juego de serpiente codiciosa de c ++ (probado con éxito) --- con captura de pantalla

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:

  1. 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 Coordenadas simples
    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;
}

Prueba de serpiente c ++
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)

Supongo que te gusta

Origin blog.csdn.net/Msyusheng/article/details/106126707
Recomendado
Clasificación