贪吃蛇程序VS2012编译成功

来源:互联网 发布:全球云计算开源峰会 编辑:程序博客网 时间:2024/06/05 18:11
// 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-rightint 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;}//Posvoid 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;}//CreatMapvoid 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;}//CreatFoodvoid 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;//纵坐标-1p_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;//纵坐标+1p_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;//横坐标-2p_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;//横坐标=2p_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 OverCrossWall();//可以穿墙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;} 

演示效果:





0 0
原创粉丝点击