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

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

Apr 30, 2019 pm 01:30 PM
java

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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1676
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
PHP vs Python: comprendre les différences PHP vs Python: comprendre les différences Apr 11, 2025 am 12:15 AM

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP: un langage clé pour le développement Web PHP: un langage clé pour le développement Web Apr 13, 2025 am 12:08 AM

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

PHP vs autres langues: une comparaison PHP vs autres langues: une comparaison Apr 13, 2025 am 12:19 AM

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

PHP vs Python: fonctionnalités et fonctionnalités de base PHP vs Python: fonctionnalités et fonctionnalités de base Apr 13, 2025 am 12:16 AM

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

Impact de PHP: développement Web et au-delà Impact de PHP: développement Web et au-delà Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP: la fondation de nombreux sites Web PHP: la fondation de nombreux sites Web Apr 13, 2025 am 12:07 AM

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.

PHP vs Python: cas d'utilisation et applications PHP vs Python: cas d'utilisation et applications Apr 17, 2025 am 12:23 AM

PHP convient aux systèmes de développement Web et de gestion de contenu, et Python convient aux scripts de science des données, d'apprentissage automatique et d'automatisation. 1.Php fonctionne bien dans la création de sites Web et d'applications rapides et évolutifs et est couramment utilisé dans CMS tel que WordPress. 2. Python a permis de manière remarquable dans les domaines de la science des données et de l'apprentissage automatique, avec des bibliothèques riches telles que Numpy et Tensorflow.

See all articles