贪吃蛇c++代码游戏

#include<iostream>
#include<windows.h>
#include<time.h>
#include<stdlib.h>坦数
#include<conio.h>
#define N 21
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=2*x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)
{
int i,j;//初始化围墙
int wall[N+2][N+2]={{0}};
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
wall[i][j]=1;
}
color(11);
for(i=0;i<N+2;i++)
{
for(j=0;j<N+2;j++)
{
if(wall[i][j]) std::cout<<"■";
else std::cout<<"□" ;
}
std::cout<<"\n";
}
gotoxy(N+3,1);//让差首显示信息
color(20);
std::cout<<"庆宴按 W S A D 移动方向\n";
gotoxy(N+3,2);
color(20);
std::cout<<"按任意键暂停\n";
gotoxy(N+3,3);
color(20);
std::cout<<"得分:\n";
apple[0]=rand()%N+1;//苹果
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
std::cout<<"●\n";
}
int main()
{
	int i,j;
	int** snake=NULL;
	int apple[2];
	int score=0;
	int tail[2];
	int len=3;
	char ch='p';
	srand((unsigned)time(NULL));
	init(apple);
	snake=(int**)realloc(snake,sizeof(int*)*len);
	for(i=0;i<len;i++)
	snake[i]=(int*)malloc(sizeof(int)*2);
	for(i=0;i<len;i++)
	{
	snake[i][0]=N/2;
	snake[i][1]=N/2+i;
	gotoxy(snake[i][0],snake[i][1]);
	color(14);
	std::cout<<"★\n";
	}
	while(1)//进入消息循环
	{
	tail[0]=snake[len-1][0];
	tail[1]=snake[len-1][1];
	gotoxy(tail[0],tail[1]);
	color(11);
	std::cout<<"■\n";
	for(i=len-1;i>0;i--)
	{
	snake[i][0]=snake[i-1][0];
	snake[i][1]=snake[i-1][1];
	gotoxy(snake[i][0],snake[i][1]);
	color(14);
	std::cout<<"★\n";
	}
	if(kbhit())
	{
	gotoxy(0,N+2);
	ch=getche();
	}
	switch(ch)
	{
	case 'w':snake[0][1]--;break;
	case 's':snake[0][1]++;break;
	case 'a':snake[0][0]--;break;
	case 'd':snake[0][0]++;break;
	default: break;
	}
	gotoxy(snake[0][0],snake[0][1]);
	color(14);
	std::cout<<"★\n";
	Sleep(abs(200-0.5*score));
	if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1
	{
	score++;
	len++;
	snake=(int**)realloc(snake,sizeof(int*)*len);
	snake[len-1]=(int*)malloc(sizeof(int)*2);
	apple[0]=rand()%N+1;
	apple[1]=rand()%N+1;
	gotoxy(apple[0],apple[1]);
	color(12);
	std::cout<<"●\n";
	gotoxy(N+5,3);
	color(20);
	std::cout<<score;
	}
	if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败
	{
	gotoxy(N/2,N/2);
	color(30);
	std::cout<<"失败!!!\n";
	for(i=0;i<len;i++)
	free(snake[i]);
	Sleep(INFINITE);
	exit(0);
	}
	}
	return 0;
	}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值