在差别的阶段,游戏所运转的逻辑、所显现的界面,都是差别的。
以五子棋举例,游戏最先、游戏中、输赢已分,对应的界面和逻辑都差别。
在游戏中,又分为:本身下棋、对方下棋、游戏停息、悔棋等多个状况。
再比方RPG游戏的人物,站立、行走、奔驰、进击、殒命都是差别的动画,
发出一颗枪弹,从涌现,到往前活动、打到目标,或飞出屏幕,都是差别逻辑。
怎样完成这些结果呢?
顺序里设定差别的状况,当前是什么状况,就实行什么逻辑。
这个就叫做:有限状况机!
是否是很简朴,不要小瞧它,庞杂的游戏功用都是靠它完成的。相干教程:Java视频教程
接下来我们用代码来完成一个简朴的结果。
还以小方块为例,让它在屏幕上,以划定体式格局活动。
package game6; import java.awt.Color; import java.awt.Graphics; import javax.swing.JPanel; /** * java游戏开辟杂谈 * ---demo6:有限状况机 * * @author 台哥编程教室 * https://www.cnblogs.com/chaohi/ * * @date 2019-04-25 */ public class GamePanel extends JPanel{ /** 屏幕的宽和高 */ private int width,height; public GamePanel(int width, int height) { this.width = width; this.height = height; this.setSize(width, height); //设置当前画布可以获得核心。 this.setFocusable(true); } /**方块的位置*/ private int fk_x = 60; private int fk_y = 60; /** * 画布的绘制 */ public void paintComponent(Graphics g) { super.paintComponent(g); //画绿色背景 g.setColor(new Color(0x9391d6)); g.fillRect(0, 0, width, height); //绘制方块,大小为80 g.setColor(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; //当前状况,初始为向右 private int stage = stage_right; /** * 游戏逻辑,处置惩罚方块的活动,每次横纵坐标都挪动1个像素 */ public void logic() { switch(stage) { case stage_right: if(fk_x < 260){ fk_x = fk_x + 1; //右移一个像素 }else{ stage = stage_down; //超越指定局限,改成向下状况 } break; case stage_down: if(fk_y < 260){ fk_y = fk_y + 1; }else{ stage = stage_left; } break; case stage_left: if(fk_x > 60){ fk_x = fk_x - 1; }else{ stage = stage_up; } break; case stage_up: if(fk_y > 60){ fk_y = fk_y - 1; }else{ stage = stage_right; } break; } } }
别的两个类GameFrame和GameThread,跟上一篇博客里的一样,这里不贴出来了。
顺序运转的结果,就是赤色方块从左上角最先,右移、下移、左移、上移,顺时针轮回。
代码里我们是定义了四个状况,离别对应四个方向下的活动,
在游戏线程的逻辑要领里,依据当前状况,举行位置属性的变动,线程再调取界面重绘。
用的代码例子,界面都很粗拙,由于目标是引见知识点,越简化,越轻易明白。
以上就是java游戏开辟之有限状况机的细致内容,更多请关注ki4网别的相干文章!