Durante las vacaciones, escribí un programa de serpiente codiciosa en C ++ (los grandes pueden corregirme)
Todos hemos jugado Snake Eating, es decir, la culebra come comida.
Necesitas descargarlo antes de escribir el código (descargar link easyx: https://easyx.cn/ .
Ideas específicas:
- Definir una estructura de coordenadas (utilizada para almacenar las coordenadas de la estructura de la comida y la serpiente). Por supuesto, también debe comprender cuál es el
eje de coordenadas en el programa C ++. Dibujé un eje de coordenadas
2 simple y usé el bucle para dibujar y limpiar (El significado es inicializar la imagen, dibujar las coordenadas iniciales de la serpiente y las coordenadas de la comida, y luego continuar limpiando y dibujando a través del ciclo temporal, por ejemplo, las coordenadas iniciales de la cabeza de la serpiente son ( 150,160), muévalo a la derecha es (160,160) Luego limpie las coordenadas originales; la serpiente dibujada aquí se dibuja con la función rectángulo easyx o se puede usar circl)
3. Cuando las coordenadas de la cabeza de la serpiente toquen las coordenadas de la comida (equivalente a comerla, se necesita aquí) Un poco de imaginación) y luego limpie las coordenadas de la comida anterior, y use la función para generar nuevas coordenadas (juicio de la función bool). Para
obtener más información, consulte mi código.
#include<iostream>
#include<graphics.h>
#include<conio.h>
//音乐头文件
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
#define N 100 //定义snake的个数
#define size 10//每一格snake之间的距离
enum Ch{
up = 72,down = 80,left1 = 75,right1 = 77};
double s = 0;
//定义结构体coor 食物和蛇的坐标
struct coor
{
int x;
int y;
};
typedef struct Snake
{
int n;//有n节
int x[N];//snake节点的坐标.x
int y[N];//snake节点的坐标.y
struct coor szb[N];//100节snake的坐标
Ch ch;//定义方向
}snake;
snake snake1;
typedef struct FOod
{
struct coor fzb;//定义食物的坐标
int ieat;//判断食物是否被吃掉
}Food;
Food food;
void snakemove()
{
for (int i = snake1.n; i > 0; i--)
{
snake1.szb[i].y = snake1.szb[i - 1].y;
snake1.szb[i].x = snake1.szb[i - 1].x;
}
switch (snake1.ch)
{
case up:
snake1.szb[0].y -= size;
break;
case down:
snake1.szb[0].y += size;
break;
case left1:
snake1.szb[0].x -= size;
break;
case right1:
snake1.szb[0].x += size;
break;
default:
break;
}
}
void drowsnake()
{
system("cls");
cleardevice();
for (int i = 0; i < snake1.n; i++)
{
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255, ));
fillrectangle(snake1.szb[i].x, snake1.szb[i].y, snake1.szb[i].x + size, snake1.szb[i].y + size);
}
fillrectangle(food.fzb.x, food.fzb.y, food.fzb.x +size, food.fzb.y + size);
settextcolor(WHITE);
outtextxy(650, 220, _T("贪吃小蛇"));
}
void direction()//方向
{
char key;
key = _getch();
switch (key)
{
case up:
if (snake1.ch != down)
snake1.ch=up;
break;
case down:
if (snake1.ch != up)
snake1.ch = down;
break;
case left1:
if (snake1.ch != right1)
snake1.ch = left1;
break;
case right1:
if (snake1.ch != left1)
snake1.ch = right1;
break;
}
}
void creatfood()
{
int flag = 0;
while (1)
{
food.fzb.x = ((1+rand() % 63) * 10);
food.fzb.y = ((1+rand() % 47) * 10);
for (int i = 0; i < snake1.n; i++)
{
if (snake1.szb[i].x == food.fzb.x && snake1.szb[i].y == food.fzb.y)
{
flag = 1;
break;
}
}
if (flag)
{
continue;
}else
{
food.ieat = false;
break;
}
}
}
void initgame()//初始化游戏
{
mciSendString(_T("open 1.mp3"), 0, 0, 0);
mciSendString(_T("play 1.mp3"), 0, 0, 0);
initgraph(800, 480);
snake1.n = 3;//初始化节数
snake1.ch = right1;
snake1.szb[0].x = 300;
snake1.szb[0].y = 100;
snake1.szb[1].x = 290;
snake1.szb[1].y = 100;
snake1.szb[2].x = 280;
snake1.szb[2].y = 100;
food.ieat = true;//吃了食物
}
void eat_food()
{
if (food.fzb.x == snake1.szb[0].x && food.fzb.y == snake1.szb[0].y)
{
snake1.n++;
s += 10;
food.ieat = true;
}
}
int game_over()
{
if (snake1.szb[0].x < 0 || snake1.szb[0].y < 0 || snake1.szb[0].x>620 || snake1.szb[0].y>460)
{
return 1;
}
for (int i = snake1.n - 1; i > 0; i--)
{
if (snake1.szb[0].x == snake1.szb[i].x && snake1.szb[0].y == snake1.szb[i].y)
{
return 1;
}
}
}
void loading_img()
{
IMAGE img1;
loadimage(&img1, _T("D:\\2.jpg"), 640, 480);
putimage(0, 0, &img1,SRCERASE);
fillrectangle(0, 0, 10, 480);
fillrectangle(0, 0, 640, 10);
fillrectangle(630, 10, 640, 480);
fillrectangle(0, 470, 640, 480);
}
int main()
{
initgame();//初始化游戏
while (1)
{
if (food.ieat == true)
{
creatfood();
}
loading_img();
snakemove();
drowsnake();
eat_food();
if (game_over())
{
break;
}
Sleep(0);
if (_kbhit())
{
direction();
}
}
return 0;
}
Es posible que no haya imágenes cuando se ejecuta, porque es local, y cuando ejecuto este programa localmente, parpadea un poco, pero no es muy serio. Por favor, corrígeme (si crees que escribí bien, dame un pulgar hacia arriba y anímame como novato.), C ++ puede dejar un mensaje si quieren comunicarse, pueden seguirse)