快速编程java:消消乐A1版,状态编程
状态在应用软件、游戏软件中都有应用。比如,订单,买家下单,待发货,待收货,待评价。用一个整型变量表示状态,1表示订单提交,2表示待发货,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.****.net/weixin_42644456
代码下载(可以留联系方式,我直接发)
https://download.****.net/user/weixin_42644456/uploads