DFdou's Blog Life is short,Be yourself.

1305/108

AS3-LightOut

来个LightOut小游戏,至于LightOut是啥,可以看这里:http://en.wikipedia.org/wiki/Lights_Out_%28game%29
如果该页面被和谐,那可以看下@dfdou的简单介绍,LightOut是一个开/关游戏,游戏的目的很简单,在5x5的的方阵里,把全部的图换成亮着的状态就过关了,Demo里是白色方块代表亮起状态。
规则是点击一个方块,在方块4周的4个方块和方块本身的状态会发生改变,是亮起就变成关掉,是关掉就变成亮起~

Demo在这里:

下边来讲下代码部分,比较简单,3个类搞定。

LightOut.as:
[js]
package {
import flash.display.Sprite;
import flash.events.MouseEvent;

public class LightOut extends Sprite {
private var _lv = 0;
private var _map:Map;

public function LightOut() {
init();
}

private function init():void {
_map = new Map(_lv);
addChild(_map);
addEventListeners();
}
private function addEventListeners():void {
addEventListener(MouseEvent.MOUSE_DOWN, changeLight);
}
private function changeLight(e:MouseEvent):void
{
var tx:int = mouseX / Config.TILE_SIZE < < 0;
var ty:int = mouseY / Config.TILE_SIZE << 0;
var numRows:int = _map.getMapData().length;
var numCols:int = _map.getMapData()[0].length;

for (var i:int = 0; i < numRows; i++) {
for (var j:int = 0; j < numCols; j++) {
if (Math.abs(i - tx) + Math.abs(j - ty) <= 1) {
if (_map.getMapData()[j][i] == 0) {
_map.setMapData(j,i,1);
}else {
_map.setMapData(j,i,0);
}
}
}
}
}
}
}
[/js]
Config.as,用来配置常数和地图。
[js]
package
{
/**
* ...
* @author DFdou
*/
public class Config
{
public static const TILE_SIZE = 25;

public static const LIGHT_ON = 1;
public static const LIGHT_OFF = 0;

public static const MAP:Array = [
[
[0, 1, 0, 1, 0],
[0, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[0, 1, 0, 1, 0],
[0, 1, 0, 1, 0]
],
];
}
}
[/js]
Map.as,直接从Sokoban那拷过来的,基本上差不多@.@
[js]
package
{
import flash.display.Sprite;
import flash.events.Event;

/**
* ...
* @author DFdou
*/
public class Map extends Sprite
{
private var _lv:uint;//关卡
private var _mapData:Array = [];//map数据

public function Map(lv:uint=0)
{
_lv = lv;
initMapData(lv);
}
private function initMapData(lv:uint = 0) {
for (var i = 0; i < Config.MAP[lv].length; i++) {
_mapData[i] = [];
for (var j = 0; j < Config.MAP[lv][i].length; j++) {
_mapData[i][j] = Config.MAP[lv][i][j];
}
}
drawMap();
}
private function drawMap() {
var tile:Tile;
for (var i = 0; i < _mapData.length; i++) {
for (var j = 0; j < _mapData[i].length; j++) {
tile = new Tile();
tile.x = j * Config.TILE_SIZE;
tile.y = i * Config.TILE_SIZE;
tile.gotoAndStop(_mapData[i][j]+1);
addChild(tile);
}
}
}
private function repaintMap() {
clearMap();
drawMap();
}
private function clearMap() {
while (numChildren > 0) {
removeChildAt(0);
}
}
private function checkSuccess() {
if(isSuccess()){
trace("Success");
//nextLevel();
}
}
private function isSuccess():Boolean {
var success:Boolean = true;
var numRow:int = _mapData.length;
var numCols:int = _mapData[0].length;
for (var i = 0; i < numRow; i++) {
for (var j = 0; j < numCols; j++) {
success = success && (_mapData[i][j] == Config.LIGHT_ON);
}
}
return success;
}
public function setMapData(py:int, px:int, type:int) {
_mapData[py][px] = type;
repaintMap();
checkSuccess();
}
public function getMapData():Array {
return _mapData;
}
}
}
[/js]
感觉也没什么好讲的地方,就这样吧,有问题请留言,别客气~

Some Related Posts

Comments (8) Trackbacks (0)
  1. :leilei 好像给了个没法过关的demo。。。

    [Reply]

    草羽 Reply:

    @DFdou, 玩不过………… :dahan

    [Reply]

  2. 博主你好,一直都很关注你的教程。
    可惜我是新手,试了一下,做出3个类,主flash文件指向LightOut,编译不通过。不太清楚如何才能编译成你演示的那个demo。
    如果你能放上源文件,感激不尽。

    [Reply]

    DFdou Reply:

    @新手, 具体报什么错误?源文件,给个邮箱地址我发给你吧~

    [Reply]

  3. 忽然发现没做胜利判断,在这个地方~
    private function changeLight(e:MouseEvent):void
    22. {
    23. var tx:int = mouseX / Config.TILE_SIZE < < 0;
    24. var ty:int = mouseY / Config.TILE_SIZE << 0;
    25. var numRows:int = _map.getMapData().length;
    26. var numCols:int = _map.getMapData()[0].length;
    27.
    28. for (var i:int = 0; i < numRows; i++) {
    29. for (var j:int = 0; j < numCols; j++) {
    30. if (Math.abs(i – tx) + Math.abs(j – ty) <= 1) {
    31. if (_map.getMapData()[j][i] == 0) {
    32. _map.setMapData(j,i,1);
    33. }else {
    34. _map.setMapData(j,i,0);
    35. }
    36. }
    37. }
    38. }
    //胜利判断部分
    39. }

    [Reply]

  4. 终于玩过了…………

    [Reply]

    DFdou Reply:

    @草羽, :dahan 为啥我玩了下觉得是无解的……

    [Reply]

    草羽 Reply:

    @DFdou, 耐心点,就玩过啦~~ :jrjr


Leave a comment

:zhuang :xizao :wuwu :wenhao :wc :touxiang :shuaya :shuajian :shengtian :paopao :no :meinv :maonv :loveu :leilei :kua :jrjr :dahan :chi :chaocai :byebye


CommentLuv Enabled

No trackbacks yet.