Pacman Proto

by smirnov48
only level, ghosts(no AI) and player
Process of creation: http://youtu.be/VV7ggb4w6CM
♥0 | Line 187 | Modified 2013-08-13 07:03:55 | MIT License
play

ActionScript3 source code

/**
 * Copyright smirnov48 ( http://wonderfl.net/user/smirnov48 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5UQ6
 */

package {
    import flash.utils.getTimer;
    import flash.text.TextField;
    import flash.geom.Point;
    import flash.events.Event;
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        private var screenData:BitmapData;
        private var playerSpawns:Array = new Array();
        private var fruitSpawns:Array = new Array();
        private var ghostSpawns:Array = new Array();
        private var ghosts:Array = new Array();
        private var player:Point = new Point();
        private var log:TextField = new TextField();
        private var lastTurnTime:int = 0;
        /*
            0 - empty
            1 - wall
            2 - pacman start
            3 - fruit
            4 - enemy spawn
            5 - pillow
            6 - tablet(on init in alll empty cells)
        */
        private var level:Array = [
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
            [1,5,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,5,1],
            [1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1],
            [1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1],
            [1,0,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,0,1],
            [1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
            [1,1,1,2,1,1,0,1,1,0,0,1,1,0,1,1,2,1,1,1],
            [1,0,0,0,0,0,0,1,4,0,4,0,1,0,0,0,0,0,0,1],
            [1,0,1,1,0,1,0,1,0,4,0,4,1,0,1,0,1,1,0,1],
            [1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,1],
            [1,1,0,1,0,1,0,0,1,3,3,1,0,0,1,0,1,0,1,1],
            [1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
            [1,0,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1],
            [1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1],
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]           
        ];
        public function FlashTest() {
            screenData = new BitmapData(20,15,false,0);
            var screen:Bitmap  = new Bitmap(screenData);
            screen.width = 320;
            screen.height = 240;
            addChild(screen);
            init();
            spawnPlayer();
            spawnGhosts();
            addEventListener(Event.ENTER_FRAME, tick);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
            addChild(log);
        }
        private function onKeyUp(e:KeyboardEvent):void {
                lastTurnTime = getTimer();
                movePlayer(e.keyCode);
                moveGhosts();
        }
        private function init():void {
            for (var i:int = 0; i < level.length; i++) {
                for (var j:int = 0; j < level[0].length; j++) {
                   if (level[i][j]==0) {
                       level[i][j] = 6;
                   }
                    if (level[i][j]==2) {
                        playerSpawns.push(new Point(i,j));
                        level[i][j] = 6;
                    }
                    if (level[i][j]==3) {
                        fruitSpawns.push(new Point(i,j));
                        level[i][j] = 6;
                    }
                    if (level[i][j]==4) {
                        ghostSpawns.push(new Point(i,j));
                        level[i][j] = 6;
                    }
                }
            }
        }
        private function spawnPlayer():void {
            var position:int = Math.floor(Math.random() * playerSpawns.length);
            player = playerSpawns[position].clone();
            level[player.x][player.y] = 0;
        } 
        private function spawnGhosts():void {
            for (var i:int = 0; i < ghostSpawns.length; i++) {
                ghosts.push(ghostSpawns[i].clone());
            }            
        }       
        private function tick(e:Event):void {
            if (getTimer() - lastTurnTime > 1000) {
                lastTurnTime = getTimer();
                moveGhosts();
            }
            drawMap();
            drawGhosts();
            drawPlayer();
        }
        private function movePlayer(keyCode:uint):void {
                var x:int = player.x;
                var y:int = player.y;
                if (keyCode == Keyboard.UP) {
                    x--;
                }
                if (keyCode == Keyboard.DOWN) {
                    x++;
                }
                if (keyCode == Keyboard.LEFT) {
                    y--;
                }
                if (keyCode == Keyboard.RIGHT) {
                    y++;
                }
                if (level[x][y] != 1) {
                    player.x = x;
                    player.y = y;
                    level[x][y] = 0;
                }
        }
        private function moveGhosts():void {
            for (var i:int = 0; i < ghosts.length; i++) {
                var ghost:Point  = ghosts[i] as Point;
                var x:int = ghost.x;
                var y:int = ghost.y;
                var isVert:Boolean = Math.floor(Math.random()*10)<5;
                if (isVert) { 
                    var isUp:Boolean= Math.floor(Math.random()*10)<5;
                    if (isUp) {
                        x--;
                    } else {
                        x++;
                    }
                } else {
                    var isLeft:Boolean = Math.floor(Math.random()*10)<5;
                    if (isLeft) {
                        y++;
                    } else {
                        y--;
                    }
                }
                if (level[x][y] != 1 && !isThereAGhost(x,y)) {
                   ghost.x = x;
                   ghost.y = y; 
                }
            }
        }
        private function isThereAGhost(x:int, y:int):Boolean {
            for (var i:int = 0; i < ghosts.length; i++) {
                if (ghosts[i].x == x && ghosts[i].y == y) {
                    return true;
                }
            }
            return false;
        }
        private function drawPlayer():void {
            screenData.setPixel(player.y, player.x, 0xFFFF00);
        }
        private function drawGhosts():void {
            for (var i:int = 0; i < ghosts.length; i++) {
                screenData.setPixel(ghosts[i].y, ghosts[i].x, 0xFF0000);
            }
        }
        private function drawMap():void {
            for (var i:int = 0; i < level.length; i++) {
                for (var j:int = 0; j < level[0].length; j++) {
                   if (level[i][j]==0) {
                        screenData.setPixel(j,i,0x000000);
                    }
                    if (level[i][j]==1) {
                        screenData.setPixel(j,i,0x00FFFF);
                    }
                    if (level[i][j]==2) {
                        screenData.setPixel(j,i,0xFFFF00);
                    }
                    if (level[i][j]==3) {
                        screenData.setPixel(j,i,0xFF00FF);
                    }
                    if (level[i][j]==4) {
                        screenData.setPixel(j,i,0xFF0000);
                    }
                    if (level[i][j]==5) {
                        screenData.setPixel(j,i,0x0000FF);
                    }
                    if (level[i][j]==6) {
                        screenData.setPixel(j,i,0xFFFFFF);
                    }
                }
            }
        }
    }
}