有限状态机游戏编程,java实现状态机
这些不同的操作如何在游戏中表现出不同的效果?通过在程序中设置不同的状态,根据当前状态执行任何逻辑。其实这叫:有限状态机!让我们和边肖一起来看看吧。
在不同的阶段,游戏的逻辑和显示的界面都是不同的。
以五子棋为例。对应的界面和逻辑在游戏开始时、游戏过程中、胜负已分后都是不同的。
游戏中分为:自己下棋、对方下棋、暂停游戏、后悔下棋等状态。
比如RPG游戏中的人物,站立,行走,奔跑,攻击,死亡,都是不同的动画。
发一颗子弹,从出现到前进,击中目标,或者飞出屏幕,都是不同的逻辑。
如何达到这些效果?
在程序中设置不同的状态,根据当前状态执行什么逻辑。
这叫:有限状态机!
不是很简单吗?不要小看它。复杂的游戏功能都是靠它实现的。相关教程:Java视频教程
接下来,我们使用代码来实现一个简单的效果。
以一个小正方形为例。让它在屏幕上按规定的方式移动。
包game6
导入Java . awt . color;
导入Java . awt . graphics;
导入javax . swing . jpanel;
/**
*谈论Java游戏开发
*-演示6:有限状态机
*
* @作者泰格编程教室
* https://www.cnblogs.com/chaohi/
*
* @日期2019-04-25
*/
公共类GamePanel扩展JPanel{
/* *屏幕的宽度和高度*/
private int width,height
公共游戏面板(int width,int height) {
this.width=宽度;
this.height=高度;
this.setSize(宽度,高度);
//设置当前画布以获得焦点。
this . setfocusable(true);
}
/* *正方形的位置*/
private int fk _ x=60
private int fk _ y=60
/**
*画布的绘制
*/
public void paint component(Graphics g){
super . paint component(g);
//绘制绿色背景
g.setColor(新颜色(0x 9391d 6));
g.fillRect(0,0,width,height);
//画一个大小为80的正方形
g . set color(color . red);
g.fillRect(fk_x,fk_y,80,80);
}
//四个状态,对应于四个方向的运动
private static final int stage _ left=0;
private static final int stage _ right=1;
private static final int stage _ up=2;
private static final int stage _ down=3;
//当前状态,最初在右侧
私有int stage=stage _ right
/**
*游戏逻辑,处理方块的移动,每次在横坐标和纵坐标移动1个像素。
*/
公共void逻辑()
{
开关(阶段)
{
案例阶段_右:
if(fk_x 260){
fk _ x=fk _ x 1;//向右移动一个像素
}否则{
阶段=阶段_下降;//超出指定范围,更改为down状态。
}
打破;
案例阶段_向下:
如果(fk_y 260){
fk _ y=fk _ y 1;
}否则{
阶段=阶段_左;
}
打破;
案例阶段_左:
if(fk_x 60){
fk _ x=fk _ x-1;
}否则{
stage=stage _ up
}
打破;
案例阶段_开始:
如果(fk_y 60){
fk _ y=fk _ y-1;
}否则{
阶段=阶段_右;
}
打破;
}
}
}另外两个类GameFrame和GameThread和上一篇博客里的一样,这里就不贴了。
如何解决写爬虫IP受阻的问题?立即使用。
运行程序的效果是红色方块从左上角开始,向右、下、左、上移动,顺时针循环。
在代码中,我们定义了四种状态,对应于四个方向的运动。
游戏线程的逻辑方法,根据当前状态,改变位置属性,然后线程调用接口重绘。
有代码示例,界面很粗糙,因为目的是介绍知识点。越简单越容易理解。以上是java游戏开发有限状态机的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。