快速编程java:消消乐A1版,状态编程

一年前做的项目。代码是公开的。

多个版本的俄罗斯方块、消消乐代码 https://blog.csdn.net/weixin_42644456/article/details/90178306 这里有网盘下载地址。

其他项目,都是开源的。如果有好的创意、关卡、模块和功能点,欢迎分享,我可以实现。

-------

状态在应用软件、游戏软件中都有应用。比如,订单,买家下单,待发货,待收货,待评价。用一个整型变量表示状态,1表示订单提交,2表示待发货,3表示待收货。配合分支语句,就能完成不同状态下的操作。游戏软件也一样。

一、顺序状态

片头,菜单,游戏进行,结束。四种状态。

快速编程java:消消乐A1版,状态编程_第1张图片

二、状态改变条件,状态返回

典型的返回:再来一局。

快速编程java:消消乐A1版,状态编程_第2张图片

用状态表示消消乐的两次点击:

快速编程java:消消乐A1版,状态编程_第3张图片

三、消消乐A1版:

消消乐A1版模块和功能点:
1.片头GAME_INFO:等待4秒或者鼠标点击任意地方,进入游戏菜单。
2.游戏菜单GAME_MENU:点击开始按钮,开始游戏。
3.游戏过程GAME_SET:点击两个动物交换。玩家操作十步,结束。
4.游戏结束GAME_RESULT:游戏结束,鼠标点击任意地方,再来一局。
A1版只做交换,不做消除。学习用状态机做场景切换,不同场景下的鼠标事件。

游戏各个阶段,用状态和子状态表示。

GameManage有4个成员变量:
public GameInfo gameinfo=new GameInfo();
    public GameMenu gamemenu=new GameMenu();
    public GamePlay gameplay=new GamePlay();
    public GameResult gameresult=new GameResult();
相当于4个舞台,4个场景。

当前状态,状态集合:
public  static int GAME_INFO=1;
    public  static int GAME_MENU=2;
    public  static int GAME_SET=3;
    public  static int GAME_RESULT=4;
    public  static int gamestate_manage=1;


多分支,不同状态下的绘制:
public void draw() {
        //片头信息
        if (GameTool.gamestate_manage == GameTool.GAME_INFO) {
            gameinfo.draw();
        }
        else if (GameTool.gamestate_manage == GameTool.GAME_MENU) {
            gamemenu.draw();
        }
        else if (GameTool.gamestate_manage == GameTool.GAME_SET) {
            gameplay.draw();
        }
        else if (GameTool.gamestate_manage == GameTool.GAME_RESULT) {
            gameresult.draw();
        }

    }

不同状态下的操作过程:
1.片头GAME_INFO:计时器累加,等待4秒
2.游戏菜单GAME_MENU:点击开始按钮,开始游戏
3.游戏过程GAME_SET:玩家操作十步,结束
4.游戏结束GAME_RESULT:游戏结束,鼠标点击任意地方,再来一局.

不同状态下的数据刷新:
    public void updatedata() {
        //片头信息
        if (GameTool.gamestate_manage == GameTool.GAME_INFO) {
            gameinfo.updatedata();
        }
        else if (GameTool.gamestate_manage == GameTool.GAME_SET) {
            gameplay.updatedata();
        }
    }

游戏过程的类是GamePlay,是MVC架构:
V: 画背景,画提示框,画各个图片
M:二维数组存放数据. x1,y1,x2,y2,表示两次点击
C:点击两个动物后,交换图片。操作十步后,游戏结束。

两次点击有多种做法,我们用状态来做。
设置两个状态:整数1表示点了第一次,2表示第二次点了第二次。
第一次点击,坐标赋值给x1,y1;第二次,赋值给x2,y2. 用的也是状态:
        if(state ==1)
        {
            x1=x;
            y1=y;
            x2=-1;
            y2=-1;
            state=2;
            state_str="请点击第二个动物";
        }
        else if(state == 2)
        {
            x2=x;
            y2=y; 
            state=1;
            state_str="请点击第一个动物";
            //user_step++;// 统计步数
        }

这些功能,用其他的编程方法,也可以完成。之所以用状态,是因为更多的功能,都要用状态实现。

总结:

1.数据用二维数组

2.类的设计,功能拆分
3.各个状态的三件事:初始化,画面绘制,数据刷新。
4.用状态做新功能:方块的消除,产生新块,方块落下。

技术博客:
https://blog.csdn.net/weixin_42644456

代码下载(可以留联系方式,我直接发)
https://download.csdn.net/user/weixin_42644456/uploads
 

你可能感兴趣的:(java和设计模式)