Maison > Java > javaDidacticiel > le corps du texte

Machine à états finis pour le développement de jeux Java

little bottle
Libérer: 2019-04-30 13:30:45
avant
2681 Les gens l'ont consulté

Comment ces différentes opérations affichent-elles différents effets dans le jeu ? En définissant différents états dans le programme, quel que soit l'état actuel, la logique sera exécutée. En fait, cela s’appelle : une machine à états finis ! Découvrons-en plus avec l’éditeur ci-dessous.

À différentes étapes, la logique du jeu et l'interface affichée sont différentes.

Prenons l'exemple du backgammon. L'interface et la logique correspondantes sont différentes lorsque le jeu commence, pendant le jeu et lorsque le résultat est déterminé.

Dans le jeu, il est divisé en plusieurs états : jouer aux échecs par vous-même, jouer aux échecs par l'adversaire, mettre le jeu en pause, regretter le jeu, etc.

Un autre exemple est celui des personnages des jeux RPG. Se tenir debout, marcher, courir, attaquer et mourir sont toutes des animations différentes

Envoyer une balle, de l'apparition à l'avancée et à l'atteinte de la cible. , ou sortir de l'écran, ont tous une logique différente.


Comment obtenir ces effets ?

Différents états sont définis dans le programme. Quel que soit l'état actuel, la logique sera exécutée.

C'est ce qu'on appelle : une machine à états finis !

N'est-ce pas très simple ? Ne le sous-estimez pas. Les fonctions de jeu complexes sont toutes réalisées grâce à lui. Tutoriels associés : Tutoriel vidéo Java


Ensuite, nous utilisons du code pour obtenir un effet simple.

Prenons également un petit carré comme exemple et laissez-le se déplacer d'une manière prescrite sur l'écran.

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;
		}
	}
}
Copier après la connexion

Les deux autres classes, GameFrame et GameThread, sont les mêmes que celles du blog précédent, elles ne seront donc pas publiées ici.


Machine à états finis pour le développement de jeux Java

L'effet du programme en cours d'exécution est que le carré rouge part du coin supérieur gauche, se déplace vers la droite , bas, gauche Déplacer, monter, faire un cycle dans le sens des aiguilles d'une montre.

Dans le code, nous avons défini quatre états, correspondant au mouvement dans les quatre directions.

Dans la méthode logique du fil de jeu, l'attribut position est modifié en fonction de l'état actuel. , et le fil Ensuite, appelez l'interface pour redessiner.

Les exemples de code utilisés par

ont des interfaces approximatives car le but est d'introduire des points de connaissance. Plus c'est simple, plus c'est facile à comprendre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal