当前位置:网站首页>C réaliser des jeux de serpents gourmands

C réaliser des jeux de serpents gourmands

2022-07-04 06:04:00 Vagues et pluie 123

Les Jeux de serpents gourmands peuvent être considérés comme les lumières de nombreux jeux de petits amis,Aujourd'hui, on va l'utiliser ensembleCLangage Recovery Childhood Classic Games eating Snakes,Avant d'écrire ce jeu,J'ai besoin de savoireasyxConnaissance de la Bibliothèque graphique,Parce que c'est là que la fenêtre du jeu est fournie.

Cet article se concentre sur les fonctionnalités à réaliser lors de l'écriture de ce jeu,En plus, j'écrirai un autre article sur ce jeu communBUGEt ses solutions,.Si vous pouviez écrire la partie,Et s'accrocher à quelque choseBUGLes partenaires peuvent passer à un autre article,Il y a peut - être quelque chose que tu as rencontréBUG.

Réaliser le jeu du serpent gourmand,Nous devons d'abord mettre en place une fenêtre de jeu,UtilisationeasyxBibliothèque graphique,Mettre en place un classique640*480Taille de la fenêtre.La fenêtre est réglée,Ensuite, vous pouvez définir le serpent,Nous utilisons des structures pour définir le type de serpent,Analyser les données dont les serpents ont besoin,Nous devons d'abord savoir combien de temps ce serpent a,Pour faciliter le réglage de la longueur du serpent au début du jeu,Et les statistiques sur la longueur des serpents après la fin du jeu,Alors on va l'utiliser. int n Pour représenter la longueur du serpent.Le serpent doit se déplacer dans une direction,Donc nous devons aussi mettre en place unint direction Pour indiquer la direction dans laquelle le serpent se déplace,Parce qu'il n'y a que quatre directions,Et si on énumérait les quatre directions,La direction du mouvement du serpent est alors représentée par une variable énumérée

//Énumérer les directions
enum direction
{
	up = 72,
	down = 80,
	left = 75,
	right = 77
};

Deuxièmement, nous devons connaître les coordonnées de chaque section du corps du serpent , Pour que nous puissions déplacer le serpent à travers les coordonnées , Et dessiner le serpent sur la fenêtre , Parce que le corps du serpent a beaucoup de noeuds , Les coordonnées ont encore x , yDeux valeurs. Nous définissons les coordonnées individuellement comme des structures , Et chaque section du corps correspond à une coordonnée , Nous utilisons des tableaux pour représenter le corps

//Définir les coordonnées du serpent
struct coor
{
	int x;
	int y;
}coor;

Le serpent final est défini comme suit:

// Définir le type de données du serpent 
struct snake
{
	int n = 3;
	direction site;
	coor szb[NUM];
}snake;

//Parmi euxNUM Est la valeur maximale de ce tableau, c'est - à - dire la longueur maximale du corps du serpent ,Auto - Définition

Définir le type de serpent , Ensuite, nous initialisons le serpent comme suit: ,Écrivez une fonction d'initialisation, initsnake() Supposons que la longueur initiale du serpent soit 3, Direction à gauche, Les coordonnées sont

    snake.n = 3;
	snake.site = left;
	snake.szb[0].x = 320;
	snake.szb[0].y = 240;
	snake.szb[1].x = 310;
	snake.szb[1].y = 240;
	snake.szb[2].x = 300;
	snake.szb[2].y = 240;	

Une fois l'initialisation terminée, On va dessiner le serpent sur la fenêtre. ,Écris un Drawsnake() Fonctions,En fait, c'est un cycle, La longueur du serpent est la condition de jugement , Dessinez à partir des coordonnées de la tête de serpent , Dessinez un rectangle ou un cercle , Ici, j'utilise un rectangle

void Drawsnake()
{	
	for (int i = 0; i < snake.n; i++)
	{
		rectangle(snake.szb[i].x, snake.szb[i].y, snake.szb[i].x+10, snake.szb[i].y+10);
	}
}

Une fois le dessin terminé, Le serpent va bouger. ,C'est crucial., Comment faire bouger le serpent ,L'analyse montre, Le principe du mouvement du serpent est que les coordonnées de la tête du serpent changent constamment dans une direction , Le corps change avec la tête du serpent. , Les coordonnées redessinent le corps du serpent à chaque transformation , Parce que le processus est assez rapide , Nous utilisons la vitesse de traitement Sleep() Un peu plus tard , Pour former un taux de trame que nos yeux peuvent reconnaître , Pour voir les serpents se déplacer en continu. . Maintenant que vous changez constamment les coordonnées de la tête de serpent, , Et redessiner le corps du serpent , Alors mettez ces deux fonctions dans la boucle , Le Mouvement du serpent Movesnake().

int main()
{
    initgraph(640, 480);
	initgame();

    while (ture)
   {
     cleardevice();
     Movesnake();
     Drawsnake();
     Sleep(100);
   }
 
}

Comment faire pour que les coordonnées du serpent changent constamment dans une direction ? Ensuite, nous allons examiner attentivement Movesnake(), Nous devons d'abord déterminer dans quelle direction nous allons , Rappelez - vous quand vous définissez un serpent , Une variable de direction est définie siteOui., C'est utile maintenant. .Au moment de l'initialisation, Déplacer l'initialisation de cette variable vers la gauche , Et puis le programme a pris les coordonnées de la tête de serpent xDiminution10, C'est - à - dire qu'il a changé à gauche 10Pixels, Parce que dans la boucle ,Tant quesiteLa valeur de est constante, La tête du serpent se déplace à gauche. , Section 2 les coordonnées du corps se déplacent vers la position initiale de la tête de serpent , Les coordonnées des autres sections du corps se déplacent à tour de rôle vers les coordonnées du corps précédent , Cela permet au serpent de se déplacer , N'oubliez pas d'ajouter cleardevice()Fonctions, Effacer le dernier dessin .

switch (snake.site)
	{
		case up:
			snake.szb[0].y-=10;
			break;
		case down:
			snake.szb[0].y+=10;
			break;
		case left:
			snake.szb[0].x-=10;
			break;
		case right:
			snake.szb[0].x+=10;
			break;
  	}




for (int i = snake.n - 1; i > 0; i--)  // Remplacer les coordonnées de chaque section du corps du serpent par celles de la section précédente 
	{
		snake.szb[i].x = snake.szb[i - 1].x;
		snake.szb[i].y = snake.szb[i - 1].y;
	}

Une fois le mouvement du serpent terminé, , Ensuite, le serpent se déplace. , Changement de direction , Si le serpent ne change pas de direction, , C'est impossible de jouer , D'abord, la direction de la tête du serpent ne change que lorsque la touche de direction est enfoncée , Alors définissez d'abord une variable pour recevoir la clé de direction que nous avons pressée , Ensuite, cette clé directionnelle est assignée à la variable directionnelle de la tête de serpent , On va juste écrire un Chdirection()Fonction pour implémenter

void Chdirection()
{
	char key;
	key = _getch();
	
	switch(key)
	{
	case up:
		if (snake.site != down)
		{
			snake.site = up;
		}
		break;
	case down:
		if (snake.site != up)
		{
			snake.site = down;
		}
		break;
	case left:
		if (snake.site != right)
		{
			snake.site = left;
		}
		break;
	case right:
		if (snake.site != left)
		{
			snake.site = right;
		}
		break;
	}
}

Pourquoi ajouter if Et la Déclaration de jugement , En fait, c'est pour empêcher le serpent de tourner la tête , Ça ne correspond pas à la réalité , Tourner en rond dans l'affichage .

 En fait..., On peut faire demi - tour. ,C'est très intéressant, Comme un train. ,Ha Ha!,Si ça vous intéresse, essayez..

Le problème du virage est réglé. , Mais comment le Programme sait - il quand tourner ? Parce que ce programme est en boucle , Ajoutons une phrase de jugement. ,Aveckbhit() Fonction pour détecter si le joueur a appuyé sur la touche , Renvoie True si pressé , Entrez la fonction de direction , Et à l'intérieur pour décider où se tourner , Faux sans pression , Ne pas entrer dans la fonction de direction .

int main()
{
    initgraph(640, 480);
	initgame();

    while (ture)
   {
     cleardevice();
     Movesnake();
     Drawsnake();
     Sleep(100);

     if ( kbhit() )
      {
        Chdirection();     
      }
    
   }
 
}

Le petit serpent peut courir , Ensuite, on mangera. , Comment l'effet de la nourriture peut - il être réalisé? ?Encore une fois, Nous devons définir un type de données pour les aliments , D'abord, les coordonnées de la nourriture. , Deuxièmement, l'état actuel de la nourriture. , A - t - on mangé ou non? , On va utiliser boolVariables

// Définir le type de données pour les aliments 
struct food
{
	int x;
	int y;
	bool state;
}food;

Ensuite, nous retournons à la fonction d'initialisation , Définissez l'état du premier aliment ,Défini comme suit:true, Ça veut dire qu'on a mangé , Pourquoi est - ce réglé pour être mangé? ,Je t'expliquerai plus tard,Nous avons continué à écrireCreatefood(), Pour créer de la nourriture , Est d'attacher des valeurs aléatoires aux coordonnées de la nourriture , Les valeurs aléatoires sont utilisées pour générer des graines , Une fois que nous avons créé un aliment , Ce moment de création , Besoin de changer l'état de la nourriture false, Indique qu'il n'a pas été mangé .

void Creatfood()
{
	while (1)
	{
		food.x = rand() % 62 * 10;
		food.y = rand() % 46 * 10;
		if (food.x >= 20 && food.y >= 20)
		{
			food.state = false;
			break;
		}
	}
}
  
// Ici, j'ajoute des boucles pour ne pas que la nourriture arrive au point limite 

Quand la nourriture sera - t - elle produite? , C'est l'état de la nourriture. true Ça veut dire quand on est mangé. , C'est pour ça qu'au début, on met l'état de la nourriture à true, C'est de créer un aliment pour commencer. . Encore une fois, utilisez une déclaration de jugement.

int main()
{
	initgraph(LENGTH, WIDTH);
	initgame();

	while (1)
	{
		if (food.state)
		{
		Creatfood();
		}  
		cleardevice();
		Movesnake();
		Drawsnake();
		Drawfood();
		Sleep(100);	
		EndBatchDraw();
		if (_kbhit())
		{
		Chdirection();
		}
	}

La nourriture a été créée , C'est la dernière étape. , C'est le processus de réalisation de la nourriture. , Écrivez un Eatfood(), Quand les coordonnées de la tête de serpent coïncident avec celles de la nourriture, on peut manger , Puis l'état de la nourriture change true, La longueur du serpent plus 1.

void Eatfood()
{
	if (snake.szb[0].x == food.x  &&  snake.szb[0].y == food.y)
	{
		snake.n++;
		food.state = true;
	}
}

C'est tout., La simple cupidité du serpent est terminée. , Il y a aussi un dessin de la nourriture , C'est assez simple , Faites - le vous - mêmes. .

int main()
{
	initgraph(LENGTH, WIDTH);
	initgame();

	while (1)
	{
		if (food.state)
		{
		Creatfood();
		}  
		
        cleardevice();
		Movesnake();
		Drawsnake();
		Drawfood();
		Eatfood();
		Sleep(100);	
		
        if (_kbhit())
		{
		Chdirection();
		}
	}

	getchar();	
}

原网站

版权声明
本文为[Vagues et pluie 123]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207040602236436.html