当前位置:网站首页>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();
}
边栏推荐
- C语言中的函数(详解)
- How to realize multi account login of video platform members
- js获取对象中嵌套的属性值
- 接地继电器DD-1/60
- HMS v1.0 appointment.php editid参数 SQL注入漏洞(CVE-2022-25491)
- [excel] PivotChart
- Invalid revision: 3.18.1-g262b901-dirty
- Steady! Huawei micro certification Huawei cloud computing service practice is stable!
- [Excel] 数据透视图
- QT get random color value and set label background color code
猜你喜欢
AWT common components, FileDialog file selection box
buuctf-pwn write-ups (8)
gslb(global server load balance)技术的一点理解
实用的小工具指令
Google Chrome browser will support the function of selecting text translation
Detailed explanation of common APIs for component and container containers: frame, panel, scrollpane
Input displays the currently selected picture
配置交叉编译工具链和环境变量
transformer坑了多少算力
ES6 模块化
随机推荐
4G wireless all network solar hydrological equipment power monitoring system bms110
Tutle clock improved version
AWT common components, FileDialog file selection box
HMS v1.0 appointment.php editid参数 SQL注入漏洞(CVE-2022-25491)
How to clone objects
我的NVIDIA开发者之旅——优化显卡性能
MySQL information_ Schema database
[Excel] 数据透视图
509. 斐波那契数、爬楼梯所有路径、爬楼梯最小花费
The end of the Internet is rural revitalization
Invalid revision: 3.18.1-g262b901-dirty
js arguments参数使用和详解
How does apscheduler set tasks not to be concurrent (that is, execute the next task after the first one)?
检漏继电器JY82-2P
fastjson
ABAP:OOALV实现增删改查功能
70000 words of detailed explanation of the whole process of pad openvino [CPU] - from environment configuration to model deployment
如何实现视频平台会员多账号登录
After the festival, a large number of people change careers. Is it still time to be 30? Listen to the experience of the past people
(4) Canal multi instance use