![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 29
|
Hard Coder, такого не может быть. Он двигается каждый раз на 20, и также всегда (х-10)%20=0. То же самое для (у-10)%20=0.
Такой уж был масштаб. Начинается x=310 y=10. И постоянно меняется только на +-20. Добавлено через 1 минуту Всем большое спасибо! Буду стараться помогать другим ![]() |
|
|||||
|
Окей... Не может, так не может... Значит здесь именно ретерн нужен. Если вам интересно знать в чем была ошибка, читайте дальше - это полезно знать:
Змея начинает по иксу движение с 310 к нулю. 310 - 20 = 290 - 20 = 270...........50 - 20 = 30 - 20 = 10. Сейчас она на x = 10, ни одно условие не выполнилось. Змея дальше лезет к нулю. В следующем кадре ее икс опять уменьшается на 20 и стает еще меньше - "-10", потому что 10 - 20 = - 10. Так как "-10" меньше чем "10", то выполняется условие: Игра закончилась. Ретерна нет, код продолжает выполнятся: И вот тут программа вам говорит, что в массиве НЕТ ТАКОГО ЭЛЕМЕНТА map[-1][еще какой-то там]. Откуда взялось? Все просто: map[(-10 - 10)/20 = -1]
__________________
Я мало чего умею, но зато хорошо умею учиться... Последний раз редактировалось HardCoder; 12.03.2012 в 15:11. |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 29
|
Всем большое спасибо! Вот исправленный код, кому интересно. Буду стараться помогать другим
package{ import flash.display.Sprite; import flash.display.Stage; import flash.events.Event; import flash.events.KeyboardEvent; import flash.display.MovieClip; public class Game{ private var head:Snake_head; private var map:Array; private var turnQueue:Array; private var direction:uint=40; private var sprite:Sprite; private var stage:Stage; private var paused:Boolean=true; private var snake:Vector.<Snake_body>; private var bonus:Bonus; public function Game(stage:Stage){ bonus = new Bonus(); snake = new Vector.<Snake_body>(); this.stage=stage; sprite=new Sprite(); stage.addChild(sprite); sprite.graphics.lineStyle(6,0x000000); sprite.graphics.beginFill(0x0095D3); sprite.graphics.drawRect(0, 0, 600,600); sprite.graphics.endFill(); map=new Array(31); for (var i:int = 0; i < 31; i++) { map[i] = new Array(31); } stage.addEventListener(Event.ACTIVATE,onActivate); turnQueue=new Array(); stage.addEventListener(KeyboardEvent.KEY_DOWN, reactToKey); head=new Snake_head; sprite.addChild(head); head.x=310; head.y=10; map[15][0]=head; place_food(); head.addEventListener(Event.ENTER_FRAME,onEnterFrame); } private function onEnterFrame(event:Event):void{ if (!paused){ var x_:int=head.x; var y_:int=head.y; var segment:Snake_body=new Snake_body(); if (turnQueue.length!=0) direction=turnQueue.shift(); if (direction==37){ head.x-=20; } if (direction==38){ head.y-=20; } if (direction==39){ head.x+=20; } if (direction==40){ head.y+=20; } if(head.x<10 || head.x>590 || head.y<10 || head.y>590){ moveSnake(x_,y_); game_over(); return; } if (map[(head.x-10)/20][(head.y-10)/20]==1){ moveSnake(x_,y_); game_over(); return; } if (map[(head.x-10)/20][(head.y-10)/20]==2){ sprite.removeChild(bonus); segment.x=x_; segment.y=y_; map[(x_-10)/20][(y_-10)/20]=1; snake.push(segment); sprite.addChild(segment); place_food(); } else moveSnake(x_,y_); } } private function moveSnake(x_:int,y_:int):void{ if (snake.length>0) map[(x_-10)/20][(y_-10)/20]=1; if (snake.length>0) map[(snake[0].x-10)/20][(snake[0].y-10)/20]=0; for(var i:int=snake.length-1;i>-1;i--){ var tmp_x:int=snake[i].x; var tmp_y:int=snake[i].y; snake[i].x=x_; snake[i].y=y_; x_=tmp_x; y_=tmp_y; } } private function reactToKey(event:KeyboardEvent):void{ var keyCode:uint=event.keyCode; if ( Math.abs(direction - keyCode)!=2 && keyCode > 36 && keyCode < 41 && keyCode!=turnQueue[turnQueue.length-1]){ turnQueue.push(keyCode); } // arrow keys pressed (37 = left, 38 = up, 39 = right, 40 = down)... } private function onDeactivate(e:Event):void { stage.removeEventListener(Event.DEACTIVATE,onDeactivate); stage.addEventListener(Event.ACTIVATE,onActivate); paused=true; } private function onActivate(e:Event):void { stage.removeEventListener(Event.ACTIVATE,onActivate); stage.addEventListener(Event.DEACTIVATE,onDeactivate); paused=false; } private function place_food():void{ var x_:int; var y_:int; do{ x_= Math.round((Math.random()*29)); y_= Math.round((Math.random()*29)); }while(map[x_][y_]==1 || (x_*20+10==head.x && y_*20+10==head.y) ); bonus.x=x_*20+10; bonus.y=y_*20+10; map[x_][y_]=2; sprite.addChild(bonus); } private function game_over():void{ paused=true; head.removeEventListener(Event.ENTER_FRAME,onEnterFrame); stage.removeEventListener(KeyboardEvent.KEY_DOWN, reactToKey); trace("game over"); } } } Уже исправила! Большое спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|