Heim  >  Artikel  >  Java  >  Finite-State-Maschine für die Entwicklung von Java-Spielen

Finite-State-Maschine für die Entwicklung von Java-Spielen

little bottle
little bottlenach vorne
2019-04-30 13:30:332624Durchsuche

Wie zeigen diese verschiedenen Vorgänge unterschiedliche Auswirkungen im Spiel? Durch das Festlegen verschiedener Zustände im Programm wird die Logik unabhängig vom aktuellen Zustand ausgeführt. Tatsächlich nennt man das: endliche Zustandsmaschine! Lassen Sie uns mit dem untenstehenden Herausgeber mehr herausfinden.

In verschiedenen Phasen sind die Logik des Spiels und die angezeigte Benutzeroberfläche unterschiedlich.

Nehmen Sie als Beispiel Backgammon. Die entsprechende Benutzeroberfläche und Logik sind unterschiedlich, wenn das Spiel beginnt, während des Spiels und wenn das Ergebnis festgelegt wird.

Im Spiel ist es in mehrere Zustände unterteilt: Schach alleine spielen, Schach mit dem Gegner spielen, Spiel pausieren, Spiel bereuen usw.

Ein weiteres Beispiel sind die Charaktere in RPG-Spielen: Stehen, Gehen, Laufen, Angreifen und Sterben sind allesamt unterschiedliche Animationen.

Senden Sie eine Kugel, vom Erscheinen bis zum Vorwärtsbewegen und dem Treffen des Ziels. oder aus dem Bildschirm fliegen, alle haben unterschiedliche Logik.


Wie erreicht man diese Effekte?

Im Programm werden verschiedene Zustände eingestellt. Unabhängig vom aktuellen Zustand wird die Logik ausgeführt.

Das nennt man: endliche Zustandsmaschine!

Ist es nicht sehr einfach? Unterschätzen Sie es nicht. Komplexe Spielfunktionen werden dadurch realisiert. Verwandte Tutorials: Java-Video-Tutorial


Als nächstes verwenden wir Code, um einen einfachen Effekt zu erzielen.

Nehmen Sie auch ein kleines Quadrat als Beispiel und lassen Sie es sich in einer vorgeschriebenen Weise auf dem Bildschirm bewegen.

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

Die anderen beiden Klassen, GameFrame und GameThread, sind die gleichen wie im vorherigen Blog und werden daher hier nicht veröffentlicht.


Finite-State-Maschine für die Entwicklung von Java-Spielen

Der Effekt des laufenden Programms besteht darin, dass das rote Quadrat in der oberen linken Ecke beginnt und sich nach rechts bewegt , nach unten, nach links Bewegen, nach oben bewegen und im Uhrzeigersinn wechseln.

Im Code haben wir vier Zustände definiert, die der Bewegung in die vier Richtungen entsprechen

In der Logikmethode des Spielthreads wird das Positionsattribut entsprechend dem aktuellen Zustand geändert , und der Thread Rufen Sie dann die Schnittstelle auf, um sie neu zu zeichnen.

Die von

verwendeten Codebeispiele verfügen über grobe Schnittstellen, da der Zweck darin besteht, Wissenspunkte einzuführen. Je einfacher sie sind, desto einfacher sind sie zu verstehen.

Das obige ist der detaillierte Inhalt vonFinite-State-Maschine für die Entwicklung von Java-Spielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Welches Format ist JSP?Nächster Artikel:Welches Format ist JSP?