0

我是一名学生,我正在做我的最后一个项目,但我被困住了。我在我的动作脚本中找不到解决问题的方法。我搜索了网络,几乎阅读了所有可以帮助我的网站。但这是我的问题。

我必须在动作脚本中制作一个 Flash 游戏。我快完成了,但我找不到如何添加验证没有可供选择的瓷砖的代码。

可以帮助我在哪里放置代码以检查舞台上是否没有更多的瓷砖吗?还有我必须使用什么代码?

而且,当它检查是否没有剩余瓷砖并且没有剩余时,它必须进入第二帧,要求再次播放或返回主屏幕。

我的代码:

package {
// importing classes
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.text.*;
// end of importing classes
public class Main extends Sprite {
    private var pickedTiles:Array = new Array();  
    private const NUMBER_OF_TILES:uint=24;
    private var pause_game:Timer;
    private var canPick:Boolean=true;
    // scorebord
    private static const pointsForMatch:int = 100; 
    private static const pointsForMiss:int = -5; 
    private var gameScoreField:TextField; 
    private var gameScore:int; 
    public function Main() {
        gameScoreField = new TextField();
        addChild(gameScoreField); 
        gameScoreField.x = 810; 
        gameScoreField.y = 50;
        gameScoreField.width = 200;
        var format:TextFormat = new TextFormat();
        format.size = 50;
        gameScoreField.defaultTextFormat = format;
        gameScoreField.textColor = 0xFF0000;

        // variables and constants
        // no more NUMBER_OF_TILES here
        const TILES_PER_ROW:uint=6;
        var tiles:Array=new Array();
        var tile:tile_movieclip;
        // end of variables and constants
        // tiles creation loop
        for (var i:uint=0; i<NUMBER_OF_TILES; i++) 
        {
            tiles.push(Math.floor(i/2));
        }
        trace("My tiles: "+tiles);
        // end of tiles creation loop
        // shuffling loop
        var swap,tmp:uint;
        for (i=NUMBER_OF_TILES-1; i>0; i--) 
        {
            swap=Math.floor(Math.random()*i);
            tmp=tiles[i];
            tiles[i]=tiles[swap];
            tiles[swap]=tmp;
        }
        trace("My shuffled tiles: "+tiles);
        // end of shuffling loop
        // tile placing loop
        for (var i:uint=0; i<NUMBER_OF_TILES; i++) 
        {
            tile=new tile_movieclip();
            addChild(tile);

            tile.cardType=tiles[i];
            tile.x=5+(tile.width+5)*(i%TILES_PER_ROW);
            tile.y=5+(tile.height+5)*(Math.floor(i/TILES_PER_ROW));
            tile.gotoAndStop(NUMBER_OF_TILES/2+1);
            tile.buttonMode=true;
            tile.addEventListener(MouseEvent.CLICK,onTileClicked);
        }
        // end of tile_placing_loop
    }
        private function onTileClicked(e:MouseEvent) 
        {
            if(canPick)
            {
                var picked:tile_movieclip=e.currentTarget as tile_movieclip;
                trace("you picked a "+e.currentTarget.cardType);
                // checking if the current tile has already been picked
                if (pickedTiles.indexOf(picked)==-1) {
                    pickedTiles.push(picked);
                    picked.gotoAndStop(picked.cardType+1);
                }
                // end checking if the current tile has already been picked
                // checking if we picked 2 tiles
                if (pickedTiles.length==2) 
                {
                    canPick=false;
                    pause_game=new Timer(1000,1);
                    pause_game.start();
                    if (pickedTiles[0].cardType==pickedTiles[1].cardType) 
                    {
                        // tiles match!!
                        trace("tiles match!!!!");
                        pause_game.addEventListener(TimerEvent.TIMER_COMPLETE,removeTiles);
                    } 
                    else 
                    {
                        // tiles do not match
                        trace("tiles do not match");
                        pause_game.addEventListener(TimerEvent.TIMER_COMPLETE,resetTiles);
                    }
                    // no more pickedTiles = new Array();
                }
                // end checking if we picked 2 tiles
            }
        }
        private function removeTiles(e:TimerEvent) 
        {
            pause_game.removeEventListener(TimerEvent.TIMER_COMPLETE,removeTiles);
            pickedTiles[0].removeEventListener(MouseEvent.CLICK,onTileClicked);
            pickedTiles[1].removeEventListener(MouseEvent.CLICK,onTileClicked);
            removeChild(pickedTiles[0]);
            removeChild(pickedTiles[1]);
            pickedTiles = new Array();
            gameScore += pointsForMatch; // +100 points
            showGameScore(); // shows new score
            canPick = true;
        }
        private function resetTiles(e:TimerEvent) 
        {
            pause_game.removeEventListener(TimerEvent.TIMER_COMPLETE,resetTiles);
            pickedTiles[0].gotoAndStop(NUMBER_OF_TILES/2+1);
            pickedTiles[1].gotoAndStop(NUMBER_OF_TILES/2+1);
            pickedTiles = new Array();
            gameScore += pointsForMiss; // -5 points
            showGameScore(); //shows new score
            canPick = true;
        }
    public function showGameScore() 
    {
        gameScoreField.text = String(gameScore);
    }
}}
4

2 回答 2

0

我的想法是,由于您将图块保留在图块数组中,因此当用户单击图块时,您可以使用 splice 属性从数组中删除项目,因此当 array.length 属性为零时,您可以结束游戏。

ps 不确定 splice 属性是否是您需要的,但这里是 actionscript 网站,它告诉您有关数组及其属性的所有信息 ActionScript 3 Site

于 2013-06-03T00:24:39.197 回答
0

我认为这更像是一种快速的“破解”,但由于您知道瓷砖的数量,您可以创建一个计数器。然后每次从棋盘上移走一对牌时,将 2 加到计数器上(每个牌一个)。当计数器与您在开始时拥有的瓷砖数量相匹配时,这意味着所有瓷砖都已匹配并因此从板上移除。

于 2013-06-03T01:54:51.720 回答