Home  >  Article  >  Java  >  Finite state machine for java game development

Finite state machine for java game development

little bottle
little bottleforward
2019-04-30 13:30:332624browse

How do these different operations display different effects in the game? By setting different states in the program, whatever the current state is, the logic will be executed. In fact, this is called: finite state machine! Let’s find out more with the editor below.

At different stages, the logic of the game and the interface displayed are different.

Take Gomoku as an example. The corresponding interface and logic are different when the game starts, during the game, and when the outcome is determined.

In the game, it is divided into multiple states: playing chess by yourself, playing chess by the opponent, pausing the game, regretting the game, etc.

Another example is the characters in RPG games. Standing, walking, running, attacking, and dying are all different animations.

Send a bullet from appearing to moving forward and hitting the target. , or flying out of the screen, all have different logic.


How to achieve these effects?

Different states are set in the program. Whatever the current state is, the logic will be executed.

This is called: finite state machine!

Isn’t it very simple? Don’t underestimate it. Complex game functions are all realized by it. Related tutorials: Java Video Tutorial


Next we use code to achieve a simple effect.

Also take a small square as an example, let it move in a prescribed way on the screen.

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;
		}
	}
}

The other two classes, GameFrame and GameThread, are the same as those in the previous blog and will not be posted here.


Finite state machine for java game development

The effect of the program is that the red square starts from the upper left corner, moves right, down, left Move, move up, cycle clockwise.

In the code, we have defined four states, corresponding to the movement in the four directions.

In the logic method of the game thread, the position attribute is changed according to the current state. The thread Then call the interface to redraw.

The code examples used have rough interfaces because the purpose is to introduce knowledge points. The simpler it is, the easier it is to understand.

The above is the detailed content of Finite state machine for java game development. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete
Previous article:What format is jsp?Next article:What format is jsp?