贪吃蛇程序VS2012编译成功

// libin.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>

struct Body//定义蛇身结构体
{
	short x,y;//蛇身结点的坐标
	struct Body *next;//指向下一个结点的指针
};

////////////////////全局变量/////////////////////////////////////
int len=sizeof(struct Body);//Body结构体所占字节数

int score;//玩家得分

int Food=0;//1-有食物,0-没食物
short food_x,food_y;//食物坐标

struct Body *body001;//蛇头指针

int dir=4;//蛇头方向1-up,2-down,3-left,4-right

int sleeptime=220;//每次移动之后的停顿时间

////////////////////////函数声明/////////////////////////////////////
void Pos(short x,short y);
void CreatMap();
void PrintSnake();
void CreatFood();
void SnakeMove();
//int TouchWall();//不可穿墙
void CrossWall();//可以穿墙
int TouchSelf();
void Init();
void GameCircle();
void Pause();
void StartImage();
void EndImage();

////////////////////////函数定义/////////////////////////////////////
void Pos(short x,short y)//设置光标位置函数
{
	COORD pos;
	pos.X=x;
	pos.Y=y;
	HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOutput,pos);
	return;
}//Pos

void CreatMap()//打印地图
{
	int i;
	for(i=0;i<57;i+=2)//打印上下边框
	{
		Pos(i,0);
		printf("■");
		Pos(i,24);
		printf("■");
	}
	for(i=1;i<24;i++)//打印左右边框
	{
		Pos(0,i);
		printf("■");
		Pos(56,i);
		printf("■");
	}
	return;
}//CreatMap

void PrintSnake()//打印蛇
{
	struct Body *p=body001;
	while(p!=NULL)//判断是否指向蛇尾
	{
		Pos(p->x,p->y);
		printf("■");
		p=p->next;
	}//从蛇头打印到蛇尾
	return ;
}

void CreatFood()//创建新食物
{
	if(Food==0)
	{
		srand((int)time(0));
		food_x=2+rand()%53;//x的取值范围[2,54]
		if(food_x%2==1)
			food_x--;
		food_y=1+rand()%23;//y的取值范围[1,23]
		Food=1;//1表明有食物,0表明没食物
	}
	return;
}//CreatFood

void SnakeMove()//蛇身移动、刷新蛇身和食物及其坐标
{
	struct Body *p_food;//下一格有食物
	struct Body *p_forward;//下一格没食物
	struct Body *q;//蛇身移动一格时的临时指针
	p_forward=(struct Body *)malloc(len);
	if(1==dir)//向上移动
	{
		if(body001->x==food_x && body001->y-1==food_y)//下一格有食物
		{
			p_food=(struct Body *)malloc(len);
			p_food->x=food_x;
			p_food->y=food_y;
			p_food->next=body001;
			body001=p_food;
			score+=5;
			Pos(62,3);printf("分数:%d",score);
			Food=0;
			CreatFood();
			Pos(62,7);printf("食物坐标:        ");
			Pos(62,7);printf("食物坐标:%u,%u",food_x,food_y);
		}
		else//下一格没有食物
		{
			p_forward->x=body001->x;//横坐标不变
			p_forward->y=body001->y-1;//纵坐标-1
			p_forward->next=body001;
			body001=p_forward;
			q=body001;
			while((q->next)->next!=NULL)//使q指向倒数第二个结点
				q=q->next;
			Pos((q->next)->x,(q->next)->y);//移动光标到蛇尾
			printf(" ");//删除蛇尾
			free(q->next); //释放蛇尾
			q->next=NULL;//使倒数第二个结点成为新的蛇尾
		}//else
	}

	if(2==dir)//向下移动
	{

		if(body001->x==food_x && body001->y+1==food_y)//下一格有食物
		{
			p_food=(struct Body *)malloc(len);
			p_food->x=food_x;
			p_food->y=food_y;
			p_food->next=body001;
			body001=p_food;
			score+=5;
			Pos(62,3);printf("分数:%d",score);
			Food=0;
			CreatFood();
			Pos(62,7);printf("食物坐标:        ");
			Pos(62,7);printf("食物坐标:%u,%u",food_x,food_y);
		}
		else//下一格没有食物
		{
			p_forward->x=body001->x;//横坐标不变
			p_forward->y=body001->y+1;//纵坐标+1
			p_forward->next=body001;
			body001=p_forward;
			q=body001;
			while((q->next)->next!=NULL)//使q指向倒数第二个结点
				q=q->next;
			Pos((q->next)->x,(q->next)->y);//移动光标到蛇尾
			printf(" ");//删除蛇尾
			free(q->next); //释放蛇尾
			q->next=NULL;//使倒数第二个结点成为新的蛇尾
		}//else
	}

	if(3==dir)//向左移动
	{
		if(body001->x-2==food_x && body001->y==food_y)//下一格有食物
		{
			p_food=(struct Body *)malloc(len);
			p_food->x=food_x;
			p_food->y=food_y;
			p_food->next=body001;
			body001=p_food;
			score+=5;
			Pos(62,3);printf("分数:%d",score);
			Food=0;
			CreatFood();
			Pos(62,7);printf("食物坐标:        ");
			Pos(62,7);printf("食物坐标:%u,%u",food_x,food_y);
		}
		else//下一格没有食物
		{
			p_forward->x=body001->x-2;//横坐标-2
			p_forward->y=body001->y;//纵坐标不变
			p_forward->next=body001;
			body001=p_forward;
			q=body001;
			while((q->next)->next!=NULL)//使q指向倒数第二个结点
				q=q->next;
			Pos((q->next)->x,(q->next)->y);//移动光标到蛇尾
			printf(" ");//删除蛇尾
			free(q->next); //释放蛇尾
			q->next=NULL;//使倒数第二个结点成为新的蛇尾
		}//else
	}

	if(4==dir)//向右移动
	{
		if(body001->x+2==food_x && body001->y==food_y)//下一格有食物
		{
			p_food=(struct Body *)malloc(len);
			p_food->x=food_x;
			p_food->y=food_y;
			p_food->next=body001;
			body001=p_food;
			score+=5;
			Food=0;
			Pos(62,3);printf("分数:%d",score);
			CreatFood();
			Pos(62,7);printf("食物坐标:        ");
			Pos(62,7);printf("食物坐标:%u,%u",food_x,food_y);
		}
		else//下一格没有食物
		{
			p_forward->x=body001->x+2;//横坐标=2
			p_forward->y=body001->y;//纵坐标不变
			p_forward->next=body001;
			body001=p_forward;
			q=body001;
			while((q->next)->next!=NULL)//使q指向倒数第二个结点
				q=q->next;
			Pos((q->next)->x,(q->next)->y);//移动光标到蛇尾
			printf(" ");//删除蛇尾
			free(q->next); //释放蛇尾
			q->next=NULL;//使倒数第二个结点成为新的蛇尾
		}//else
	}
	Pos(62,9);printf("蛇头坐标:        ");
	Pos(62,9);printf("蛇头坐标:%u,%u",body001->x,body001->y);//打印蛇头坐标
	Pos(food_x,food_y);printf("■");//打印食物
	PrintSnake();//打印蛇
} 

/*int TouchWall()//不可穿墙
{
	if(body001->x==0 || body001->x==56 || body001->y==0 || body001->y==24)
		return 1;
	else
		return 0;
}//TouchWall*/

void CrossWall()//可以穿墙
{
	if(0==body001->x)//左进右出
	{
		body001->x=54;
		if(food_x==body001->x && food_y==body001->y)
			food_x-=2;
	}
	if(56==body001->x)//右进左出
	{
		body001->x=2;
		if(food_x==body001->x && food_y==body001->y)
			food_x+=2;
	}
	if(0==body001->y)//上进下出
	{
		body001->y=23;
		if(food_x==body001->x && food_y==body001->y)
			food_y--;
	}
	if(24==body001->y)//下进上出
	{
		body001->y=1;
		if(food_x==body001->x && food_y==body001->y)
			food_y++;
	}
	return;
}

int TouchSelf()//判断是否咬到自己
{
	struct Body *p_tself;
	p_tself=body001;
	while(!p_tself->next==NULL)
	{
		p_tself=p_tself->next;
		if(p_tself->x==body001->x && p_tself->y==body001->y)
			return 1;
	}
	return 0;
} 

void Init()//游戏初始化
{
	CreatMap();//打印地图
    Pos(62,1);printf("作者:李斌");
	Pos(62,3);printf("分数:%d",score);
	Pos(62,5);printf("速度:      ");
	Pos(62,5);printf("速度:%d",20+300-sleeptime);
	Pos(62,13);printf("F1 加速");
	Pos(62,15);printf("F2 减速");
	Pos(62,17);printf("↑ ↓ ← →方向");
	Pos(62,19);printf("SPACE 暂停/开始");
	Pos(62,21);printf("ESC 退出");
	Pos(62,23);printf("QQ:1010305129");
	struct Body *body002,*body003,*body004;//定义四个指向蛇身的指针

	body001=(struct Body *)malloc(len);//创建4个蛇身结构体
	body002=(struct Body *)malloc(len);
	body003=(struct Body *)malloc(len);
	body004=(struct Body *)malloc(len);

	body001->next=body002;//把蛇身连接起来,形成链表
	body002->next=body003;
	body003->next=body004;
	body004->next=NULL;

	Pos(body001->x=12,body001->y=8);printf("■");//设定并打印蛇身的初始位置
	Pos(body002->x=10,body002->y=8);printf("■");
	Pos(body003->x=8,body003->y=8);printf("■");
	Pos(body004->x=6,body004->y=8);printf("■");

    CreatFood();//打印食物
	Pos(62,7);printf("食物坐标:        ");
	Pos(62,7);printf("食物坐标:%u,%u",food_x,food_y);
} 

void Pause()
{
	while(1)
	{
		Sleep(600);
		if(GetAsyncKeyState(VK_SPACE))
			break;
	}
	return;
} 

void GameCircle()//游戏循环
{
	while(1)
	{
//		if (1== TouchWall() )//不可穿墙
//			break;//撞墙Game Over

		CrossWall();//可以穿墙

		if(1== TouchSelf() )//判断蛇是否咬到自己
			break;//咬到自己Game Over

		//判断用户的按键输入
//		int dir=4;
		if(GetAsyncKeyState(VK_UP) && dir!=2)
			dir=1;
		else if(GetAsyncKeyState(VK_DOWN) && dir!=1)
			dir=2;
		else if(GetAsyncKeyState(VK_LEFT) && dir!=4)
			dir=3;
		else if(GetAsyncKeyState(VK_RIGHT) && dir!=3)
			dir=4;
		else if(GetAsyncKeyState(VK_ESCAPE))
			break;
		else if(GetAsyncKeyState(VK_SPACE))
			Pause();
		else if(GetAsyncKeyState(VK_F1))//加速
		{
			if(sleeptime>=110)
				sleeptime-=10;
			Pos(62,5);printf("速度:      ");
			Pos(62,5);printf("速度:%d",20+300-sleeptime);
		}
		else if(GetAsyncKeyState(VK_F2))//减速
		{
			if(sleeptime<=290)
				sleeptime+=10;
			Pos(62,5);printf("速度:      ");
			Pos(62,5);printf("速度:%d",20+300-sleeptime);
		}

		SnakeMove();//蛇移动一格

		Sleep(sleeptime);//设定两次移动之间的时间间隔
	}
} 

void StartImage()
{
	Pos(28,6);
	printf("李斌,邀请你玩贪吃蛇");
	Pos(28,11);
	printf("贪吃蛇    作者:李斌");
	Pos(21,23);
	printf("2013.12.27晚于西安文理学院二号公寓");
	Pos(28,13);
	system("pause");
	system("cls");

	Pos(25,9);
	printf("-->终于编译成功啦<--");
	Pos(21,23);
	printf("2013.12.27晚于西安文理学院二号公寓");
	Pos(26,13);
	system("pause");
	system("cls");
} 

void EndImage()
{
	system("cls");
	Pos(30,9);printf("游戏结束,欢迎再来!");
	Pos(30,11);printf("你的得分:%d",score);
	Pos(30,16);printf("娃,你还得继续努力啊!");
	Pos(20,23);printf("2013.12.27晚于西安文理学院二号公寓");
	Pos(28,13);
	system("pause");
}

/////////////////////////main函数////////////////////////////////////////
int main(void)
{
	StartImage();//开始画面

	Init();//界面初始化

	GameCircle();//游戏循环

	EndImage();//结束画面

	return 0;
} 

演示效果:

时间: 2024-08-02 03:19:21

贪吃蛇程序VS2012编译成功的相关文章

窗口类应用程序已经编译成功,为什么显示一直在连接,就是没有界面出来,是什么问题

问题描述 窗口类应用程序已经编译成功,为什么显示一直在连接,就是没有界面出来,是什么问题 #include<windows.h> #include<stdio.h> //声明窗口过程函数 LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); //编写WinMain函数 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE

求大神给我详细讲解下面的c++贪吃蛇程序

问题描述 求大神给我详细讲解下面的c++贪吃蛇程序 #include #include #include #include using namespace std; // 刷新当前屏幕 inline void Refresh(char q[][22], int grade, int gamespeed){ ????system("cls");?????//??清屏 ?int i,j; ?cout << endl; ?for(i=0;i ?????cout ??for(j=0

pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice

问题描述 pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice 第三方给了一个webservice,我用vs的命令,编译成了dll,可惜pb程序里无法正常调用该dll 解决方案 .net的dll,需要包装成com对象,才能被pb调用,不是一般的dll.关于如何包装com组件,以及pb如何调用com组件,请google. 解决方案二: pb程序里如何调用vs2012编译的dll ,该dll是封装的第三方的webservice 第三方给了一个webservice

VB问题。请大家帮帮忙!我自己做的VB贪吃蛇小程序

问题描述 VB问题.请大家帮帮忙!我自己做的VB贪吃蛇小程序 请大家帮帮忙!我自己做的VB贪吃蛇小程序,它能运动,用键盘上下左右都可以,但是吃食物的时候,食物不能消失.蛇直接穿过了食物. 不知道是否属性设置的问题,还是键盘输入的问题.下面有两个程序,一个是正确的,一个错误的,求大家帮忙调试一下.http://pan.baidu.com/s/1dE6HLAh 无需密码,直接下载下来,调试即可.谢谢大家!谢谢啊.C币不够,发个支付宝账号过来.直接支付.(10-20元都是可以接受的) 解决方案 htt

malloc-关于c语言的贪吃蛇游戏问题,为什么最后编译出错?

问题描述 关于c语言的贪吃蛇游戏问题,为什么最后编译出错? /* c语言之贪吃蛇 */ #include #include #include #include #include #include #define N 24 int apple[3]; //食物 char score[3]; //分数 char tail [3];//蛇尾前面一节 //输出坐标 void gotoxy(int x,int y) { COORD pos; pos.X=x; pos.Y=y; SetConsoleCurs

64位系统下用vs2012 编译qt程序,请问怎么编译出在32位系统可以运行的程序

问题描述 64位系统下用vs2012 编译qt程序,请问怎么编译出在32位系统可以运行的程序 我现在想把写好的qt程序打包,但是在32位系统上跑不起来, 然后我编译时把平台改为win32,又提示无法编译,编译失败, 请问在64位windows系统怎么编译出可以在32位系统运行的程序 解决方案 需要在编译设置里面修改一些条件编译的参数. 解决方案二: 需要设置编译选项 或直接运行32位的gcc编译系统

c语言-我的这个程序在VS2010上可以编译成功,但是在VS2015上就不行,求指导啊,。。

问题描述 我的这个程序在VS2010上可以编译成功,但是在VS2015上就不行,求指导啊,.. #include #include struct student{ /* 学生结构体 / int num; char name[20]; char optional[2]; union{ float mark; / 百分制分数成员mark / char grade; / 五级制等级成员grade / }score; / 成绩共用体 / }; void main() { struct student s

编译成功后程序不能执行

问题描述 编译成功后程序不能执行 解决方案 不直接运行,调试模式下启动程序,看程序哪一行发生异常. 解决方案二: 平台问题,或者代码问题 解决方案三: 问题是否可以描述的更详细一点呢? 解决方案四: 鬼知道.估计程序也不是你写的,你上当受骗了. 解决方案五: 这问题描述的我也是醉了 解决方案六: 我觉得你是运行别人的代码,或者修改别人的代码吧.有可能是平台的问题.我遇到过,就是修改别人代码基础上,人家代码创建和开发的平台和我的不一样,后来我用相同的平台,就完全没问题了.不知道你是不是这个问题,仅

c++-qt做的贪吃蛇小游戏,构建的时候有问题,运行不了

问题描述 qt做的贪吃蛇小游戏,构建的时候有问题,运行不了 包含界面文件源文件头文件,可是在运行的时候构建不成功,说只完成了2之中的1个步骤. 15:02:08: 为项目scoff_snake执行步骤 ... 15:02:08: 正在启动 "D:qt4.8.4binqmake.exe" D:qtpujing新建文件夹scoff_snake.pro -r -spec win32-g++ Cannot find file: d:qtpujing新建文件夹scoff_snake.pro. 1