文章目录

  • 案例一
  • 案例二
  • 案例三
  • 案例四
  • 案例五
  • 案例六
  • 案例七
  • 案例八
  • 案例九

案例一

#include <stdio.h>#include <windows.h>#include <conio.h>#include <time.h>//游戏窗口#define FrameX 4//游戏窗口左上角的X轴坐标#define FrameY 4//游戏窗口左上角的Y轴坐标#define Frame_height 20//游戏窗口的高度#define Frame_width 20//游戏窗口的宽度//定义全局变量char reg_name[30]="",reg_pwd[10]="";char on_name[30],on_pwd[10];int i,j;int a[2];//用于记住蛇尾坐标,其中a[0]、a[1]分别表示横、竖坐标//声明蛇的结构体struct Snake {int x[100];//蛇的横坐标,其中x[0]表示蛇尾的横坐标,x[N-1]表示蛇头的横坐标int y[100];//蛇的竖坐标,其中y[0]表示蛇尾的竖坐标,y[N-1]表示蛇头的竖坐标int count;//蛇吃食物的个数int length;//蛇的长度int speed;//蛇的速度};//声明食物的结构体struct Food {int x;//食物的横坐标int y;//食物的竖坐标};/******光标移到指定位置**************************************************************/void gotoxy(HANDLE hOut, int x, int y) {COORD pos;pos.X = x;//横坐标pos.Y = y;//纵坐标SetConsoleCursorPosition(hOut, pos);//设置控制台(cmd)光标位置 }/******设置文本为绿色*****************************************************************/void Set_TextColor_Green (void) {HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE);//HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。更具体的可查找MSDN。包含在winnt.h头文件中。//GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值)。SetConsoleTextAttribute(Handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);//SetConsoleTextAttribute是一个可以在API(应用程序编程接口)中设置控制台窗口字体颜色和背景色的计算机函数,该函数被广泛应用于电脑编程与软件开发中。}/******制作游戏窗口******************************************************************/void make_frame() {HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);//打印选择菜单printf("Esc 退出游戏");gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);printf("长按方向键:加速");gotoxy(hOut,FrameX,FrameY);//打印框角printf("╔");gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);printf("╗");gotoxy(hOut,FrameX,FrameY+Frame_height);printf("╚");gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);printf("╝");for(i=2; i<2*Frame_width-2; i+=2) {gotoxy(hOut,FrameX+i,FrameY);printf("═");//打印上横框}for(i=2; i<2*Frame_width-2; i+=2) {gotoxy(hOut,FrameX+i,FrameY+Frame_height);printf("═");//打印下横框}for(i=1; i<Frame_height; i++) {gotoxy(hOut,FrameX,FrameY+i);printf("║");//打印左竖框}for(i=1; i<Frame_height; i++) {gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);printf("║");//打印右竖框}gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);//打印游戏名称Set_TextColor_Green ();//设置蛇为绿色printf("贪吃蛇游戏");}/******结束菜单*******************************************************************/over_game() {system("cls");printf("\n\n\n\n\n\n\n\n\t\t\t\t游戏结束\n\n\n");Sleep(2000);return 0;}/******菜单信息***************************************************************/print_information(HANDLE hOut,struct Snake *snake,struct Food *food) {gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);printf("level : %d",snake->count/5+1);//打印游戏等级gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);printf("score : %d",10*snake->count);//打印游戏得分gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);printf("eat food : %d",snake->count);//打印产生食物个数?gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);printf("speed : %dms",snake->speed);//打印游戏速度gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+9);printf("foodX : %d",food->x);//打印食物的横坐标gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+11);printf("foodY : %d",food->y);//打印食物的竖坐标}/******初始化蛇**********************************************************************/void init_snake(struct Snake *snake) {snake->x[0]=FrameX+2;//初始化蛇的横坐标snake->y[0]=FrameY+Frame_height/2;//初始化蛇的竖坐标 snake->speed=300;//初始化蛇的速度为300mssnake->length=3;//初始化蛇的长度为3节snake->count=0;//初始化蛇吃的个数为0for(i=1; i<snake->length; i++){/* 依次得到蛇身、蛇头的坐标 */snake->x[i]=snake->x[i-1]+2;snake->y[i]=snake->y[i-1];}}/******移动蛇*************************************************************************/void move_snake(HANDLE hOut,struct Snake *snake) {gotoxy(hOut,snake->x[0],snake->y[0]);printf("  ");/* 清除蛇尾*/for(i=1; i<snake->length; i++) {/* 后一节的坐标依次取代前一节的坐标 */snake->x[i-1]=snake->x[i];snake->y[i-1]=snake->y[i];}}/******打印蛇*************************************************************************/void print_snake(HANDLE hOut,struct Snake *snake){for(i=0; i<snake->length; i++){gotoxy(hOut,snake->x[i],snake->y[i]);if(i==0){printf("○");//打印蛇尾}else if(i==snake->length-1){printf("¤");//打印蛇头}else{printf("⊙");//打印蛇身}}}/******随机产生食物*******************************************************************/void get_food(HANDLE hOut,struct Snake *snake,struct Food *food) {srand((unsigned)time(NULL));//初始化随机数,srand函数是随机数发生器的初始化函数,防止每次产生的随机数相同 while(1) {/* 产生食物的条件:1.在游戏窗口内 2.不在蛇的身上 */food->x = rand() % (Frame_width-1);  //rand()函数是Excel中产生随机数的一个随机函数。返回的随机数是大于等于 0 及小于 1 的均匀分布随机实数food->y = rand() % Frame_height;if( food->x==0 || food->y==0 ) {continue;}food->x = 2*food->x + FrameX;//得到食物的横坐标food->y+=FrameY;//得到食物的竖坐标for(i=0; i<snake->length; i++){/* 判断食物是否在蛇的身上,如果在蛇身上,则重新产生;否则,打印蛇身 */if( food->x==snake->x[i] && food->y==snake->y[i] ){break;}}if(i==snake->length){gotoxy(hOut,food->x,food->y);printf("⊙");break;}}}/******吃食物***************************************************************************/void eat_food(HANDLE hOut,struct Snake *snake,struct Food *food){if( snake->x[snake->length-1]==food->x && snake->y[snake->length-1]==food->y ){/* 如果蛇头位置与食物位置相同,吃食物 */snake->length++;//吃一个食物,蛇身增长一节for(i=snake->length-1; i>=1; i--){/* 蛇后节坐标依次赋值给蛇前一节的坐标,依次得到蛇身及蛇头的坐标 */snake->x[i]=snake->x[i-1];snake->y[i]=snake->y[i-1];}snake->x[0]=a[0];//得到蛇尾移动前的横坐标snake->y[0]=a[1];//得到蛇尾移动前的竖坐标get_food(hOut,snake,food);//重新产生食物snake->count++;//食物的个数增1if( snake->count%5==0 ){/* 当蛇吃Up_level个食物时,速度加快Up_speed毫秒并且升一级 */snake->speed-=50;}}}/******判断蛇是否死**************************************************************************/int if_die(struct Snake *snake){/* 当蛇头碰到自身时,蛇死 ,返回值为0 */for(i=0; i<snake->length-1; i++){if( snake->x[snake->length-1]==snake->x[i] && snake->y[snake->length-1]==snake->y[i] ){return 0;}}return 1;}/******登录界面*******************************************************************************/
void regist() {system("pause");system("cls");printf("\n\n\t\t\t欢迎使用贪吃蛇注册系统!\n\n");while(1){//输入用户名printf("\t\t请输入用户名[不能大于10个字符]:");scanf("%s",reg_name);//判断用户名if(strlen(reg_name)<=10){while(1){//输入密码printf("\n\t\t请输入密码[密码长度为八位]:");scanf("%s",reg_pwd);//判断密码if(strlen(reg_pwd)==8){printf("\n\n\t\t注册成功,您的用户名是%s,密码是%s\n\n",reg_name,reg_pwd);break;}else{printf("\n\t\t密码的长度为%d,请重新输入\n",strlen(reg_pwd));}}break;} else{printf("\n\t\t用户名的长度为%d,请重新输入\n\n",strlen(reg_name)); //strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。}}
}//判断是否注册int judge(){if(strcmp(reg_name,"")==0&&strcmp(reg_pwd,"")==0) //strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数{printf("\n\n\t\t您尚未注册,请先注册!\n\n");return 0;}else{return 1;}
}/******开始游戏*******************************************************************************/start_game() {system("pause");system("cls");unsigned char ch=77;//定义用于接收键盘输入的字符变量HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量struct Snake s,*snake=&s;//定义蛇的结构体指针并指向蛇的结构体struct Food f,*food=&f;//定义食物的结构体指针并指向食物的结构体make_frame();//制作游戏窗口init_snake(snake);//初始化蛇get_food(hOut,snake,food);//随机产生食物while(1){print_information(hOut,snake,food);//打印菜单信息a[0]=snake->x[0];//记住蛇尾的横坐标a[1]=snake->y[0];//记住蛇尾的竖坐标j=0;if(kbhit()){/* 判断是否按下键盘,如果按下,ch接收键盘输入 */ch=getch(); //getch是一个计算机函数,在windows平台下从控制台无回显地取一个字符if(kbhit()) //用于非阻塞地响应键盘输入事件。其中文可译为“键盘敲击”{/* 如果长按键盘,则加速 */Sleep(20);j=1;}}switch(ch){case 72:{/* 向上移动 */move_snake(hOut,snake);//移动蛇snake->y[snake->length-1]-=1;//蛇头的竖坐标向上移,即减1break;}case 80:{/* 向下移动 */move_snake(hOut,snake);//移动蛇snake->y[snake->length-1]+=1;//蛇头的竖坐标向下移,即加1break;}case 75:{/* 向左移动 */move_snake(hOut,snake);//移动蛇snake->x[snake->length-1]-=2;//蛇头的横坐标向左移,即减2break;}case 77:{/* 向右移动 */move_snake(hOut,snake);//移动蛇snake->x[snake->length-1]+=2;//蛇头的横坐标向右移,即加2break;}}if( ch==72 && snake->y[snake->length-1]==FrameY){return 0;  //如果蛇在上框且向上移动}if( ch==80 && snake->y[snake->length-1]==FrameY+Frame_height ){return 0;   //如果蛇在下框且向下移动}if( ch==75 && snake->x[snake->length-1]==FrameX ){return 0; //如果蛇在左框且向左移动}if( ch==77 && snake->x[snake->length-1]==FrameX+2*Frame_width-2 ){return 0;    //如果蛇在右框且向右移动}eat_food(hOut,snake,food);//吃食物print_snake(hOut,snake);//打印蛇if( if_die(snake)==0 || ch==27 || snake->speed==50 ){/* 游戏结束条件:1.蛇碰到自身 2.按Esc键 3.速度为50ms */gotoxy(hOut,FrameX+Frame_width-2,FrameY+Frame_height/2-1);printf("Game Over");Sleep(2000);break;;}if(j==0){Sleep(snake->speed);//延迟时间}else{Sleep(10);}}}
//用户登录void dl(){//定义变量system("color 0D");//设置文本为粉红色int id;while(1){system("pause");system("cls");//输出界面printf("                 **********************************                 \n");printf("                 **                              **                 \n");printf("                 **  欢迎使用贪吃蛇!            **                 \n");printf("                 **                              **                 \n");printf("                 **********************************                 \n");printf("                 -----------祝你使用愉快!----------                 \n");//输入功能编号printf("                 **********************************                \n");printf("                 **                              **                 \n");printf("                 *****请选择功能编号:*************                \n");printf("                 **                     ***      **                 \n");printf("                 **   1.注册账号。     *****     **                \n");printf("                 **                     ***      **                 \n");printf("                 **   2.登录账号。       *       **                \n");printf("                 **                      *       **                 \n");printf("                 **   0.退出系统。       *       **                \n");printf("                 **                      *       **                 \n");printf("                 **********************************                \n");printf("请输入您的选择:"); scanf("%d",&id);//判断switch(id){case 1:regist();break;case 2:if(judge()==1){return;}break;case 0:exit(1);break;default:printf("\n\t\t您输入的功能编号有误,请重新输入!\n");}}system("pause");system("cls");}int main() {int start_game();//开始游戏int over_game();//结束游戏dl();int d=3;int i;system("pause");system("cls");printf(       "  ==============================================================================\n");printf(       "  ==**************************************************************************==\n");printf(     "  ==                      \\                   /                               ==\n");printf(        "  ==                       \\                 /                 欢             ==\n");printf(     "  ==                        \\               /                  迎             ==\n");printf(     "  ==                 * * * * * * * * * * * * * * * *           来             ==\n");printf(      "  ==                 * * * * * * * * * * * * * * * *           到             ==\n");printf(      "  ==                 * *       /          \\      * *           贪             ==\n");printf(     "  ==                 * *      /            \\     * *           吃             ==\n");printf(     "  ==                 * *                         * *           蛇             ==\n");printf(  "  ==                 * *         \\  /\\  /        * *                          ==\n");printf(       "  ==                 * *          \\   \\/         * *                          ==\n");printf(       "  ==                 * * * * * * * * * * * * * * * *                          ==\n");printf(     "  ==                 * * * * * * * * * * * * * * * *                          ==\n");printf(     "  ==                    *                       *                             ==\n");printf(     "  ==                                                                          ==\n");printf(     "  ==**************************************************************************==\n");printf(     "  ******************************************************************************\n");printf("\n\n\t\t\t欢迎来到贪吃蛇登录!哔哩哔哩-(゜-゜)つロ乾杯~\n\n");//三次登录验证for(i=1; i<=3; i++){printf("\t\t请输入用户名:");scanf("%s",on_name);printf("\n\t\t请输入密  码:");scanf("%s",on_pwd);if(strcmp(reg_name,on_name)==0&&strcmp(reg_pwd,on_pwd)==0){printf("\n\n\t\t登录成功,欢迎使用贪吃蛇!\n\n");start_game();//开始游戏over_game();//结束游戏return 0;}else{printf("\n\n\t\t登录失败,请重新登录,您还有%d次机会\n\n",3-i);d=d--;if(d=0){return 0;}}}}

案例二

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
#include<string.h>
#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
#define stop 'p'
void welcome();               //55开始界面void Finish();                //291结束界面void creatgraph();            //69围墙打印void gotoxy(int x, int y);    //111光标跳转,横为X 0,1,2..void gotoprint(int x, int y); //121跳转打印void gotodelete(int x, int y);//127跳转删除void creatfood();             //133食物产生int ClickControl();           //157获取键盘信号int Judge();                  //270游戏结束判断void MovingBody();      //172蛇的移动 void Eating();                //223蛇吃到东西后的操作(伸长)void ChangeBody(int a,int b); //245蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标 typedef struct snakes{int x;int y;struct snakes *Next;
}snake;
snake *Head;
snake *tail;
struct Food{int x;int y;
}food;
char name[20];
int score=0;
int speed;
char click=1;void welcome();               //开始界面
void Finish()                //结束界面
{system("cls");gotoxy(15, 10);printf("/**********************************************/");gotoxy(15, 20);printf("/**********************************************/");gotoxy(18, 14);printf("GAME   OVER      o(* ̄▽ ̄*)o");gotoxy(20, 16);printf("Your Score is %d    hiahiahia", score);gotoxy(18, 18);gotoxy(0, 27);system("pause");    }
void creatgraph()            //围墙打印
{int i;for(i=0;i<58;i+=2){gotoprint(i, 0);gotoprint(i, 26);}for(i=1;i<26;i++){gotoprint(0, i);gotoprint(56, i);}gotoxy(63, 10);printf("欢迎来到游戏%s",name); gotoxy(63,15);printf("您的得分是:%s",score);gotoxy(104,29);printf("游戏制作者李德旭");Head = (snake*)malloc(sizeof(snake));Head->x = 16;Head->y = 15;tail=(snake*)malloc(sizeof(snake));snake *p=(snake*)malloc(sizeof(snake));snake *q=(snake*)malloc(sizeof(snake));p->x= 16;p->y= 16;q->x = 16;q->y = 17;Head->Next=p;p->Next=q;q->Next=tail;tail->Next=NULL;}
void gotoxy(int x, int y)    //光标跳转,横为X 0,1,2..
{COORD pos;HANDLE hOutput;pos.X=x;pos.Y=y; hOutput= GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOutput,pos);}
void gotoprint(int x, int y) //跳转打印
{gotoxy(x,y);printf("■");}
void gotodelete(int x, int y)//跳转删除{gotoxy(x, y);printf("  ");}void creatfood()             //食物产生
{srand((int)time(NULL)); lable:food.y = rand() % (25 - 1 + 1) + 1;food.x = rand() % (54 - 2 + 1) + 2;if (food.x % 2 != 0){food.x = food.x+1;}snake *judge = Head;while (1)  //遍历排除蛇身重复{if (judge->Next == NULL) break;if (food.x == judge->x&&food.y == judge->y){goto lable;}judge = judge->Next;}gotoxy(food.x, food.y);printf("⊙");}int ClickControl()           //获取键盘信号
{char c;while (1){if (Judge()==0) return 0;if(_kbhit()){click=_getch();}MovingBody();Eating();}return 1;}int Judge()                  //游戏结束判断
{if(Head->x==0||Head->y==0||Head->x==56||Head->y==26) {Finish();return 0;}snake *p=Head->Next;while(p->Next!=NULL){if(Head->x==p->x&&Head->y==p->y){Finish();return 0;} p=p->Next;}return 1;
}
void MovingBody()      //蛇的移动
{int count=0;int a=Head->x,b=Head->y;snake *p=Head;while(1){if(p->Next==NULL)break;gotodelete(p->x,p->y);count++;p=p->Next;} switch(click){case up:Head->y-=1;   ChangeBody(a,b);break;case down:Head->y+=1;ChangeBody(a,b);break;case left:Head->x-=2;ChangeBody(a,b);break;   case right:Head->x+=2;ChangeBody(a,b);break;   }       p=Head;while(p->Next!=NULL){gotoprint(p->x,p->y);p=p->Next;}p=Head;gotoxy(0,28);if (count<=10)speed=150;else if(count>10&& count<=20)speed=100;else if(count>20&& count<=40)speed=50;else speed=10;Sleep(speed);}
void Eating()                //蛇吃到东西后的操作(伸长)
{if (Head->x == food.x&&Head->y == food.y){creatfood();snake *_new = (snake*)malloc(sizeof(snake));snake *p;p = Head;while (1){if (p->Next->Next == NULL) break;p = p->Next;}p->Next = _new;_new->Next = tail;score += 10;gotoxy(77, 15);printf("%d", score);}}
void ChangeBody(int a,int b) //蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标 {snake *p=Head->Next; int mid1,mid2,_mid1,_mid2;mid1=p->x;mid2=p->y; while(1){if(p->Next->Next==NULL)break;_mid1=p->Next->x;_mid2=p->Next->y;p->Next->x=mid1;p->Next->y=mid2;mid1 = _mid1;mid2 = _mid2; p = p->Next;    }p=Head->Next;p->x = a;p->y = b;}
int main(){creatgraph();creatfood();if (ClickControl() == 0) return 0;}

案例三

#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<stdlib.h>
#define U 1
#define D 2
#define L 3
#define R 4       //蛇的状态,U:上 ;D:下;L:左 R:右typedef struct SNAKE //蛇的节点 {int x;int y;struct SNAKE *next;}snake;//全局变量//int score = 0, add = 10;//总得分与每次吃食物得分。int status, sleeptime = 200;//每次运行的时间间隔snake *head, *food;//蛇头指针,食物指针snake *q;//遍历蛇的时候用到的指针int endGamestatus = 0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。//声明全部函数//void Pos();//位置函数 void creatMap();//创造地图 void initSnake();//蛇的初始化 void snakeMove();//蛇的移动 int biteSelf();//咬自己 void createFood();//创造食物 void cantCrossWall();//不能穿墙 void pause();//暂停 void runGame();//控制游戏 void initGame();//游戏初始化 void endGame();//游戏结束 void gameStart();//游戏开始 void speeddown();//减速 void speedup();//加速 void Pos(int x, int y)//设置光标位置{COORD pos;//定义结构体变量pos HANDLE hOutput;//新建句柄 hOutput pos.X = x;pos.Y = y;SetConsoleTextAttribute(hOutput,10|1);hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄SetConsoleCursorPosition(hOutput, pos);}void creatMap()//创建地图{int i;for (i = 0; i<58; i=i+2)//打印上下边框{Pos(i, 0);printf("■");//一个方块占两个位置Pos(i, 25);printf("■");}for (i = 0; i<26; i++)//打印左右边框{Pos(0, i);printf("■");Pos(56, i);printf("■");}}void initSnake()//初始化蛇身{snake *tail;int i;tail = (snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置tail->x = 24;tail->y = 5;tail->next = NULL;for (i = 1; i <=3; i++)//初始长度为4{head = (snake*)malloc(sizeof(snake));head->next = tail;        head->x = 24 +2*i;          head->y = 5;tail= head;}while (tail!= NULL)//从头到尾,输出蛇身 {Pos(tail->x, tail->y);printf("■");tail = tail->next;      }    }//int biteSelf()//判断是否咬到了自己{snake *self;self = head->next;while (self != NULL){if (self->x == head->x && self->y == head->y){return 1;} self = self->next;}return 0;}void createFood()//随机出现食物{snake *food_1;srand((unsigned)time(NULL));//为了防止每次产生的随机数相同,种子设置为timefood_1 = (snake*)malloc(sizeof(snake));//初始化food_1 food_1->x=rand()%53+2;while ((food_1->x % 2)!= 0)    //保证其为偶数,使得食物能与蛇头对齐 { food_1->x = food_1->x+1 ;//活动范围 }food_1->y = rand()%23+1; q = head;while (q->next !=NULL){if (q->x == food_1->x && q->y == food_1->y) //判断蛇身是否与食物重合{free(food_1);createFood();}q = q->next;}Pos(food_1->x, food_1->y);food = food_1;printf("$");}void cantCrossWall()//不能穿墙{if (head->x == 0 || head->x == 54 || head->y == 0 || head->y == 24){endGamestatus = 1;endGame();}}void snakeMove()//蛇前进,上U,下D,左L,右R{snake * nexthead;cantCrossWall();nexthead = (snake*)malloc(sizeof(snake));if (status == U){nexthead->x = head->x;nexthead->y = head->y - 1;if (nexthead->x == food->x && nexthead->y == food->y)//如果下一个有食物//{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                               //如果没有食物//{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == D){nexthead->x = head->x;nexthead->y = head->y + 1;if (nexthead->x == food->x && nexthead->y == food->y)  //有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                               //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == L){nexthead->x = head->x - 2;nexthead->y = head->y;if (nexthead->x == food->x && nexthead->y == food->y)//有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == R){nexthead->x = head->x + 2;nexthead->y = head->y;if (nexthead->x == food->x && nexthead->y == food->y)//有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                         //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (biteSelf() == 1)       //判断是否会咬到自己{endGamestatus = 2;endGame();}}void pause()//暂停{while (1){Sleep(300);if (GetAsyncKeyState(VK_SPACE)){break;}}}void runGame()//控制游戏        {Pos(64, 15);printf("不能穿墙,不能咬到自己\n");Pos(64, 16);printf("用↑.↓.←.→分别控制蛇的移动.");Pos(64, 18);printf("ESC :退出游戏.space:暂停游戏.");status = R; while (1){Pos(64, 10);printf("得分:%d  ", score);Pos(64, 11);printf("每个食物得分:%d分", add);if (GetAsyncKeyState(VK_UP) && status != D)//GetAsyncKeyState函数用来判断函数调用时指定虚拟键的状态{status = U;//如果蛇不是向下前进的时候,按上键,执行向上前进操作}else if (GetAsyncKeyState(VK_DOWN) && status != U)//如果蛇不是向上前进的时候,按下键,执行向下前进操作{status = D;}else if (GetAsyncKeyState(VK_LEFT) && status != R)//如果蛇不是向右前进的时候,按左键,执行向左前进{status = L;}else if (GetAsyncKeyState(VK_RIGHT) && status != L)//如果蛇不是向左前进的时候,按右键,执行向右前进{status = R;}else if (GetAsyncKeyState(VK_SPACE)){pause();}else if (GetAsyncKeyState(VK_ESCAPE)){endGamestatus = 3;break;}Sleep(300);snakeMove();}}void initGame()//开始界面
{Pos(40, 12); printf("欢迎来到贪食蛇游戏!");system("pause");system("cls");Pos(25, 12);printf("用↑.↓.←.→分别控制蛇的移动,\n");system("pause");system("cls");}void endGame()//结束游戏{system("cls");Pos(24, 12);if (endGamestatus == 1){printf("对不起,您撞到墙了。游戏结束.");}else if (endGamestatus == 2){printf("对不起,您咬到自己了。游戏结束.");}else if (endGamestatus == 3){printf("您的已经结束了游戏。");}Pos(24, 13);printf("您的得分是%d\n", score);exit(0);}void gameStart()//游戏初始化{initGame();creatMap();initSnake();createFood();}int main(){  while(1){gameStart();runGame();}endGame();return 0;
}

案例四


#include <stdio.h>#include <stdlib.h>#include <Windows.h>//windows编程头文件#include <time.h>#include <conio.h>//控制台输入输出头文件#define SNAKESIZE 100//蛇的身体最大节数#define MAPWIDTH 118 //宽度#define MAPHEIGHT 29//高度//食物的坐标struct food
{int x;int y;}food;//蛇的相关属性struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[SNAKESIZE];//组成蛇身的每一个小方块中x的坐标int y[SNAKESIZE];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框void drawMap();//随机生成食物void createFood();//按键操作void keyDown();//蛇的状态bool snakeStatus();//从控制台移动光标void gotoxy(int x, int y);int key = 72;//表示蛇移动的方向,72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物,这一步很重要,涉及到是否会有蛇身移动的效果以及蛇身增长的效果int changeFlag = 0;int sorce = 0;//记录玩家的得分//将控制台光标移到(x,y)处void gotoxy(int x, int y){COORD coord;coord.X = x;coord.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}void drawMap(){//打印上下边框for (int i = 0; i <= MAPWIDTH; i += 2)//i+=2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf("■");//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, MAPHEIGHT);printf("■");}//打印左右边框for (int i = 1; i < MAPHEIGHT; i++){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf("■");//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(MAPWIDTH, i);printf("■");}//随机生成初试食物while (1){srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致,因为一个字符占两个字节位置,若不一致//会导致吃食物的时候只吃到一半if (food.x % 2 == 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf("★");//初始化蛇的属性snake.len = 3;snake.speed = 200;//在屏幕中间生成蛇头snake.x[0] = MAPWIDTH / 2 + 1;//x坐标为偶数snake.y[0] = MAPHEIGHT / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");//生成初试的蛇身for (int i = 1; i < snake.len; i++){//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2snake.x[i] = snake.x[i - 1] + 2;snake.y[i] = snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf("■");}//打印完蛇身后将光标移到屏幕最上方,避免光标在蛇身处一直闪烁gotoxy(MAPWIDTH - 2, 0);return;}void keyDown(){int pre_key = key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,第二次调用返回的才是实际值key = _getch();//第一次调用返回的不是实际值key = _getch();//第二次调用返回实际值}if (changeFlag == 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf("  ");//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节(蛇头除外)for (int i = snake.len - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向if (pre_key == 72 && key == 80)key = 72;if (pre_key == 80 && key == 72)key = 80;if (pre_key == 75 && key == 77)key = 75;if (pre_key == 77 && key == 75)key = 77;/***控制台按键所代表的数字*“↑”:72*“↓”:80*“←”:75*“→”:77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] -= 2;//往左break;case 77:snake.x[0] += 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0]++;//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");gotoxy(MAPWIDTH - 2, 0);//由于目前没有吃到食物,changFlag值为0changeFlag = 0;return;}void createFood(){if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物while (1){int flag = 1;srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//随机生成的食物不能在蛇的身体上for (int i = 0; i < snake.len; i++){if (snake.x[i] == food.x && snake.y[i] == food.y){flag = 0;break;}}//随机生成的食物不能横坐标为奇数,也不能在蛇身,否则重新生成if (flag && food.x % 2 == 0)break;}//绘制食物gotoxy(food.x, food.y);printf("★");snake.len++;//吃到食物,蛇身长度加1sorce += 10;//每个食物得10分snake.speed -= 5;//随着吃的食物越来越多,速度会越来越快changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果}return;}bool snakeStatus(){//蛇头碰到上下边界,游戏结束if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)return false;//蛇头碰到左右边界,游戏结束if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)return false;//蛇头碰到蛇身,游戏结束for (int i = 1; i < snake.len; i++){if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])return false;}return true;}int main(){drawMap();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf("Game Over!\n");gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);printf("本次游戏得分为:%d\n", sorce);Sleep(5000);return 0;}

案例五

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>//windows编程头文件
#include <time.h>
#include <conio.h>//控制台输入输出头文件//在一个大的软件工程里面,可能会有多个文件同时包含一个头文件
//当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误
//在头文件中使用#ifndef #define #endif能避免头文件的重定义#ifndef __cplusplus//用于将c++的代码以标准c的形式输出 typedef char bool;
#define false 0
#define true  1#endif//将光标移动到控制台的(x,y)坐标点处
void gotoxy(int x, int y)
{COORD coord;coord.X = x;coord.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//设置控制台光标的位置
}#define SNAKESIZE 100//蛇的身体最大节数
#define MAPWIDTH 78//宽度
#define MAPHEIGHT 24//高度//食物的坐标
struct food{int x;int y;
}food;//蛇的相关属性
struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[SNAKESIZE];//组成蛇身的每一个小方块中x的坐标int y[SNAKESIZE];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框
void drawMap();
//随机生成食物
void createFood();
//按键操作
void keyDown();
//蛇的状态
bool snakeStatus();
//从控制台移动光标
void gotoxy(int x, int y);int key = 72;//表示蛇移动的方向,72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物,这一步很重要,涉及到是否会有蛇身移动的效果以及蛇身增长的效果
int changeFlag = 0;int sorce = 0;//记录玩家的得分int i;
void drawMap()
{//打印上下边框for (i = 0; i <= MAPWIDTH; i += 2)//i+=2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf("■");//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, MAPHEIGHT);printf("■");}//打印左右边框for (i = 1; i < MAPHEIGHT; i++){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf("■");//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(MAPWIDTH, i);printf("■");}//随机生成初试食物while (1){srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//生成的食物横坐标的奇偶必须和初试时蛇头所在坐标的奇偶一致,因为一个字符占两个字节位置,若不一致//会导致吃食物的时候只吃到一半if (food.x % 2 == 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf("*");//初始化蛇的属性snake.len = 3;snake.speed = 400;//在屏幕中间生成蛇头snake.x[0] = MAPWIDTH / 2 + 1;//x坐标为偶数snake.y[0] = MAPHEIGHT / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");//生成初试的蛇身for (i = 1; i < snake.len; i++){//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2snake.x[i] = snake.x[i - 1] + 2;snake.y[i] = snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf("■");}//打印完蛇身后将光标移到屏幕最上方,避免光标在蛇身处一直闪烁gotoxy(MAPWIDTH - 2, 0);return;
}void keyDown()
{int pre_key = key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,第二次调用返回的才是实际值key = _getch();//第一次调用返回的不是实际值key = _getch();//第二次调用返回实际值}/**蛇移动时候先擦去蛇尾的一节*changeFlag为0表明此时没有吃到食物,因此每走一步就要擦除掉蛇尾,以此营造一个移动的效果*为1表明吃到了食物,就不需要擦除蛇尾,以此营造一个蛇身增长的效果*/if (changeFlag == 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf("  ");//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节(蛇头除外)for (i = snake.len - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向if (pre_key == 72 && key == 80)key = 72;if (pre_key == 80 && key == 72)key = 80;if (pre_key == 75 && key == 77)key = 75;if (pre_key == 77 && key == 75)key = 77;/***控制台按键所代表的数字*“↑”:72*“↓”:80*“←”:75*“→”:77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] -= 2;//往左break;case 77:snake.x[0] += 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0]++;//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");gotoxy(MAPWIDTH - 2, 0);//由于目前没有吃到食物,changFlag值为0changeFlag = 0;return;
}void createFood()
{ if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物while (1){int flag = 1;srand((unsigned int)time(NULL));food.x = rand() % (MAPWIDTH - 4) + 2;food.y = rand() % (MAPHEIGHT - 2) + 1;//随机生成的食物不能在蛇的身体上for (i = 0; i < snake.len; i++){if (snake.x[i] == food.x && snake.y[i] == food.y){flag = 0;break;}}//随机生成的食物不能横坐标为奇数,也不能在蛇身,否则重新生成if (flag && food.x % 2 == 0)break;}//绘制食物gotoxy(food.x, food.y);printf("*");snake.len++;//吃到食物,蛇身长度加1sorce += 10;//每个食物得10分snake.speed -= 5;//随着吃的食物越来越多,速度会越来越快changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果}return;
}bool snakeStatus()
{//蛇头碰到上下边界,游戏结束if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)return false;//蛇头碰到左右边界,游戏结束if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)return false;//蛇头碰到蛇身,游戏结束for (i = 1; i < snake.len; i++){if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])return false;}return true;
}int main()
{drawMap();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);printf("Game Over!\n");gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);printf("本次游戏得分为:%d\n", sorce);Sleep(5000);return 0;
}

案例六

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<cstdlib>
#include<ctime>
#include<fstream>
#include<cstring>
#define High 20
#define Width 50
using namespace std;
/* -2为食物 & ; -1为边框 # ; 0为 空格 ; 1为蛇头 @; >1为蛇身 * ; */ /*全局声明变量*/
int Frames[High][Width]={0}; //界面大小
int MoveDirection;//移动方向 1,2,3,4  上下左右
int Food_x,Food_y;//食物位置
int MaxGrade;//最高分
int Grade;//当前分数 /*改善画面函数*/
void gotoxy(int x,int y);//光标移动到(x,y)位置
void HideCursor();  //隐藏光标 /*功能函数*/
void Are_you_ready();//准备界面
void Initialize();//数据初始化
void Show(); //显示画面
void Move();//移动方向
void KeyPlay();//键盘操作
void SaveMaxGrade();//保存最高分 /*******主函数*******/
int main()
{HideCursor();//隐藏光标Initialize();//数据初始化 Are_you_ready();//准备界面 while(1){Show();KeyPlay();//键盘操作Move();//移动操作} SaveMaxGrade();//保存最高分return 0;
}
/*******************/ /*移动光标*///光标定位
void gotoxy(int x,int y)//光标移动到(x,y)位置  取代清屏
{HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X=x;pos.Y=y;//该结构体用来记录光标 SetConsoleCursorPosition(handle,pos);
}
/*隐藏光标*/
void HideCursor()
{CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
/*准备界面*/
void Are_you_ready()
{for(int i=4;i>=1;i--){system("cls"); cout<<"\n\n\n\t\t请使用方向键玩蛇!"; if(i==1){cout<<"\n\n\n\t\t\tGo!";Sleep(200); return ;}cout<<"\n\n\n\t\t\t"<<i-1;Sleep(1000);}
}
/*数据初始化*/
void Initialize()
{ //分数初始化ifstream fin("MaxGrade.txt");if(!fin){cout<<"MaxGrade.txt 文件打开失败!\n";//exit(2);} fin>>MaxGrade;fin.close();Grade=0; //边框初始化 # int i,j;for(i=0;i<High;i++){Frames[i][0]=-1;Frames[i][Width-1]=-1;}for(j=0;j<Width;j++){Frames[0][j]=-1;Frames[High-1][j]=-1;} //蛇初始化 for(i=1;i<=5;i++){Frames[High/2][Width/2-i]=i; } //移动方向初始化向右 MoveDirection = 4;//食物位置初始化 srand((int)time(NULL));do{Food_x=rand()%(High-5)+4;Food_y=rand()%(Width-5)+3;//判断食物与蛇是否重合 if(Frames[Food_x][Food_y]==0){Frames[Food_x][Food_y]=-2;break;}}while(1);
}
/*显示画面*/
void Show()
{ gotoxy(0,0);//移动光标至初始0,0位置 for(int i=0;i<High;i++){for(int j=0;j<Width;j++){if(Frames[i][j]==-1){cout<<"#";//-1为边框 # //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);}else if(Frames[i][j]==0){cout<<" ";//0为 空格 }else if(Frames[i][j]==1){cout<<"@";//1为蛇头 @ }else if(Frames[i][j]>1){cout<<"*";//大于1的正整数为蛇身 * // SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//红色 }else if(Frames[i][j]==-2){cout<<"&";//-2为食物 &  } }cout<<endl;}if(Grade>MaxGrade){cout<<"\n\n\n★当前得分: "<<Grade<<"\t★最高分:"<<Grade<<endl;}else{cout<<"\n\n\n★当前得分: "<<Grade<<"\t★最高分:"<<MaxGrade<<endl;}cout<<"\n\n\n★按空格暂停\t★按Esc键退出游戏\n";if(Grade >= 100&&Grade < 200){Sleep(90);} else if(Grade >=200 && Grade <300){Sleep(50);}else if(Grade >=300){Sleep(10);}else{Sleep(200);//刷新速度 }}
/*移动*/
void Move()
{int i,j,max=0;int OldTail_i,OldTail_j;//记录旧蛇尾 int OldHead_i,OldHead_j;//记录旧蛇头 for(i=1;i<High-1;i++){for(j=1;j<Width-1;j++){if(Frames[i][j]>0){//对所有大于0的元素+1 Frames[i][j]++;//记录旧蛇尾位置 if(Frames[i][j]>max){max=Frames[i][j];OldTail_i=i;OldTail_j=j;} //记录旧蛇头位置 if(Frames[i][j]==2){OldHead_i=i;OldHead_j=j;   } }}} int NewHead_i,NewHead_j; //新蛇头 if(MoveDirection==1)//向上 {NewHead_i=OldHead_i-1;NewHead_j=OldHead_j; } if(MoveDirection==2)//向下 {NewHead_i=OldHead_i+1;NewHead_j=OldHead_j;} if(MoveDirection==3)//向左 {NewHead_i=OldHead_i;NewHead_j=OldHead_j-1; } if(MoveDirection==4)//向右 {NewHead_i=OldHead_i;NewHead_j=OldHead_j+1;} //判断蛇头是否吃到食物if(Frames[NewHead_i][NewHead_j]==-2){Frames[Food_x][Food_y]=0;//食物变为空格 Grade+=10; //分数加10 do{Food_x = rand()%(High-5)+4;Food_y = rand()%(Width-5)+3;//判断食物与蛇是否重合 if(Frames[Food_x][Food_y]==0){Frames[Food_x][Food_y] = -2;//产生食物break;}}while(1); }else//未吃到长度不变 {Frames[OldTail_i][OldTail_j] = 0;//最大元素变为0==空格}//判断蛇头撞到自身或墙壁,游戏失败if(Frames[NewHead_i][NewHead_j]>0||Frames[NewHead_i][NewHead_j]==-1){system("cls"); cout<<"\n\n\n\t\t\tGame Over!\n\n\n\n\n\n\n";Sleep(2000);system("cls");cout<<"\n\n\n\t\t\t您的分数:"<<Grade<<endl;if(Grade>MaxGrade) {cout<<"\t\t\t!新纪录!\n";SaveMaxGrade();//保存最高分}Sleep(500);system("pause");exit(0);} else//正常操作 {Frames[NewHead_i][NewHead_j]=1;}}
/*键盘操作*/
void KeyPlay()
{if(kbhit())//判断是否有输入{switch(getch()){case 224:switch(getch()){case 72:if(MoveDirection==1||MoveDirection==2)//下同,判断方向,是否为正在行进方向 break;MoveDirection = 1;break;//上 case 80:if(MoveDirection==1||MoveDirection==2)break;MoveDirection = 2;break;//下 case 75:if(MoveDirection==3||MoveDirection==4)break;MoveDirection = 3;break;//左 case 77:if(MoveDirection==3||MoveDirection==4)break;MoveDirection = 4;break;//右 }break;case 27://退出(Esc) system("cls");//清屏cout<<"\n\n\n\n\t\t\t☆★退出游戏★☆\n\n\n\n";exit(0);case 32://空格(Space)system("cls");//清屏cout<<"\n\n\n\n\t\t\t☆★暂停★☆\n\n\n\n";cout<<"\n\n\t\t\t";system("pause"); system("cls");break; } }
}
/*保存最高分*/
void SaveMaxGrade()
{ofstream fout("MaxGrade.txt");if(!fout){cout<<"MaxGrade.txt 文件打开失败\n";exit(2);}if(Grade>MaxGrade){MaxGrade=Grade;}fout<<MaxGrade;fout.close();
}

案例七

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <conio.h>//预处理命令
#define up 'w'
#define down 's'
#define left 'a'
#define right 'd'
#define stop 'p'typedef struct Snakes
{int x;int y;struct Snakes *next;
}snake;
snake *head,*tail;
struct Food
{int x;int y;
}food;void welcome();//主页面
void creatgraph();//创建图表
void gotoxy(int x,int y);
void gotoprint(int x,int y);
void creatfood();
int ClickControl();
void Finish();
int Judge();
void MovingBody();
void Eating();
void ChangeBody(int a,int b);
char name[20];
int score=0;
char click=1;
int speed;
int main()
{system("color 0B");welcome();creatgraph();creatfood();if(ClickControl()==0)return 0;return 0;
}
void welcome()
{gotoxy(35,10);printf("/********************************************/");gotoxy(35,22);printf("/********************************************/");gotoxy(40,13);printf("\t欢迎来到贪吃蛇游戏");gotoxy(35,16);printf("\t请在英文输入法中操作,w a s d控制,p暂停");gotoxy(40,19);printf("\t请输入你的姓名:");scanf("%s",name);system("cls");
}
void creatgraph()//创建图表
{int i;for(i=0;i<58;i+=2){gotoprint(i,0);gotoprint(i,26);}for(i=1;i<26;i++){gotoprint(0,i);gotoprint(56,i);}gotoxy(75,10);printf("你好 %s,欢迎你来玩贪吃蛇!",name);gotoxy(75,15);printf("你的分数是:%d    = ̄ ω ̄= ",score);head = (snake*)malloc(sizeof(snake));head->x=16;head->y=15;//蛇头坐标 tail=(snake*)malloc(sizeof(snake));snake *p=(snake*)malloc(sizeof(snake));snake *q=(snake*)malloc(sizeof(snake));p->x=16;p->y=16;//第二个节点 q->x=16;q->y=17;//第三个节点 head->next=p;p->next=q;q->next=tail;tail->next=NULL;//将节点连接起来组成蛇
}
void gotoprint(int x,int y)//打印
{gotoxy(x,y);printf("■");
}
void gotodelete(int x,int y)//删除食物并输入空格
{gotoxy(x,y);printf("  ");
}
void gotoxy(int x,int y)//食物出现坐标函数,X表示横坐标,Y表示纵坐标。
{COORD pos;//表示一个字符在控制台屏幕上的坐标HANDLE hOutput;pos.X=x;pos.Y=y;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出句柄SetConsoleCursorPosition(hOutput, pos);
}
void creatfood()
{srand((int)time(NULL));//表示设置一个随机种子,每次运行都能保证随机种子不同 lable:food.y=rand()%(25-1+1)+1;food.x=rand()%(54-2+1)+2;if(food.x%2!=0)//保证食物出现位置不出界 {food.x=food.x+1;}snake *judge=head;while(1){if(judge->next==NULL)break;if(food.x==judge->x&&food.y==judge->y){goto lable;//goto label的label(标签)既可以定义在for循环前面,//也可以定义在for循环后面,当跳转到标签地方时,继续执行标签下面的代码}judge=judge->next;}gotoxy(food.x,food.y);printf("⊙");
}
int ClickControl()
{char c;while(1){if(Judge()==0)return 0;if(_kbhit()){click=_getch();}MovingBody();Eating();} return 1;
}
void MovingBody()
{int count=0;int a=head->x,b=head->y;snake *p=head;while(1){if(p->next==NULL)break;gotodelete(p->x,p->y);count++;p=p->next;}switch(click){case up:head->y-=1;ChangeBody(a,b);break;case down:head->y+=1;ChangeBody(a,b);break;case left:head->x-=2;ChangeBody(a,b);break;case right:head->x+=2;ChangeBody(a,b);break;case stop:break;}p=head;while(1){if(p->next==NULL)break;gotoprint(p->x,p->y);p=p->next;}p=head;gotoxy(0,28);if(count<=10)speed=150;else if(count>10&&count<=20)speed=120;//速度调节 else if(count>20&&count<=40)speed=80;else speed =60;Sleep(speed);
}
void Eating()
{if(head->x==food.x&&head->y==food.y){creatfood();snake *_new=(snake*)malloc(sizeof(snake));snake *p;p=head;while(1){if(p->next->next==NULL)break;p=p->next;}p->next=_new;_new->next=tail;score+=10;gotoxy(77,15);printf("%d",score);}
}
void ChangeBody(int a,int b)
{snake *p=head->next;int mid1,mid2,_mid1,_mid2;mid1=p->x;mid2=p->y;while(1){if(p->next->next==NULL)break;_mid1=p->next->x;_mid2=p->next->y;p->next->x=mid1;p->next->y=mid2;mid1=_mid1;mid2=_mid2;p=p->next;}p=head->next;{p->x=a;p->y=b;}
}
void Finish()
{system("cls");gotoxy(15,10);printf("/*******************************************/");gotoxy(15,20);printf("/*******************************************/");gotoxy(18,14);printf("\t\t游戏结束!");gotoxy(20,16);printf("\t你的分数是 %d     继续努力吧!",score);gotoxy(0,27);system("pause");
}
int Judge()
{if(head->x==0||head->x==56||head->y==0||head->y==26){Finish();return 0;}snake *p=head->next;while(1){if(p->next==NULL)break;if(head->x==p->x&&head->y==p->y){Finish();return 0;}p=p->next;}return 1;
}

案例八

#include <stdio.h>
#include <Windows.h>//windows编程头文件
#include <time.h>
#include <conio.h>#ifndef __cplusplus//一般用于将C++代码以标准C形式输出(即以C的形式被调用) typedef char bool;
#define false 0
#define true  1#endif//将光标移动到控制台的(x,y)坐标点处
void gotoxy(int x, int y)
{COORD coord;//结构体变量 coord.X = x;coord.Y = y;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出设备的句柄SetConsoleCursorPosition(hOut, coord);//这是使光标 到(x,y)这个位置的函数.
}#define ss 100//蛇的身体最大节数
#define mw 78//宽度
#define mh 24//高度//食物的坐标
struct food{int x;int y;
}food;//蛇的相关属性
struct snake{int speed;//蛇移动的速度int len;//蛇的长度int x[ss];//组成蛇身的每一个小方块中x的坐标int y[ss];//组成蛇身的每一个小方块中y的坐标}snake;//绘制游戏边框
void drawMap();
//随机生成食物
void createFood();
//按键操作
void keyDown();
//蛇的状态
bool snakeStatus();
//从控制台移动光标
int bestsorce();
void gotoxy(int x, int y);int key = 72;//表示蛇移动的方向,72为按下“↑”所代表的数字//用来判断蛇是否吃掉了食物,这一步很重要,涉及到是否会有蛇身移动的效果以及蛇身增长的效果
int changeFlag = 0;int sorce = 0;//记录玩家的得分int i;void zhushi()//打印游戏说明{ gotoxy(mw + 8, mh / 2 - 4);printf("游戏说明\n");gotoxy(mw + 8, mh / 2 -3);printf("1.吃东西蛇速度在加快,\n"); gotoxy(mw + 8, mh / 2 - 2);printf("2.该游戏通过控制蛇头方向吃东西\n"); gotoxy(mw + 8, mh / 2 -1);printf("从而使得蛇变得越来越长。\n");gotoxy(mw + 8, mh / 2);printf("历史最高分%lld",bestsorce());}
void drawMap()
{//打印上下边框for (i = 0; i <= mw; i += 2)//i+=2是因为横向占用的是两个位置{//将光标移动依次到(i,0)处打印上边框gotoxy(i, 0);printf("■");//将光标移动依次到(i,MAPHEIGHT)处打印下边框gotoxy(i, mh);printf("■");}//打印左右边框for (i = 1; i < mh; i++){//将光标移动依次到(0,i)处打印左边框gotoxy(0, i);printf("■");//将光标移动依次到(MAPWIDTH, i)处打印左边框gotoxy(mw, i);printf("■");}//随机生成初试食物while (1){srand((unsigned int)time(NULL));//随机一个数 food.x = rand() % (mw - 4) + 2;food.y = rand() % (mh - 2) + 1;if (food.x % 2 == 0)break;}//将光标移到食物的坐标处打印食物gotoxy(food.x, food.y);printf("*");//初始化蛇的属性snake.len = 3;snake.speed = 300;//在屏幕中间生成蛇头snake.x[0] = mw / 2 + 1;//x坐标为偶数snake.y[0] = mh / 2;//打印蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");//生成初试的蛇身for (i = 1; i < snake.len; i++){//蛇身的打印,纵坐标不变,横坐标为上一节蛇身的坐标值+2snake.x[i] = snake.x[i - 1] + 2;snake.y[i] = snake.y[i - 1];gotoxy(snake.x[i], snake.y[i]);printf("■");}gotoxy(mw - 2, 0);    //打印完蛇身后将光标移到屏幕最上方,避免光标在蛇身处一直闪烁return;
}void keyDown()
{int w_key = key;//记录前一个按键的方向if (kbhit())//如果用户按下了键盘中的某个键,kbhit()只是检测,返回0或1,也就是true或false。{fflush(stdin);//清空缓冲区的字符//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,第二次调用返回的才是实际值key = getch();//第一次调用返回的不是实际值key = getch();//第二次调用返回实际值}/**蛇移动时候先擦去蛇尾的一节*changeFlag为0表明此时没有吃到食物,因此每走一步就要擦除掉蛇尾,以此营造一个移动的效果*为1表明吃到了食物,就不需要擦除蛇尾,以此营造一个蛇身增长的效果*/if (changeFlag == 0){gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);printf("  ");//在蛇尾处输出空格即擦去蛇尾}//将蛇的每一节依次向前移动一节(蛇头除外)for (i = snake.len - 1; i > 0; i--){snake.x[i] = snake.x[i - 1];snake.y[i] = snake.y[i - 1];}//蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走//如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向if (w_key == 72 && key == 80)key = 72;if (w_key == 80 && key == 72)key = 80;if (w_key == 75 && key == 77)key = 75;if (w_key == 77 && key == 75)key = 77;/***控制台按键所代表的数字*“↑”:72*“↓”:80*“←”:75*“→”:77*///判断蛇头应该往哪个方向移动switch (key){case 75:snake.x[0] -= 2;//往左break;case 77:snake.x[0] += 2;//往右break;case 72:snake.y[0]--;//往上break;case 80:snake.y[0]++;//往下break;}//打印出蛇头gotoxy(snake.x[0], snake.y[0]);printf("■");gotoxy(mw - 2, 0);//由于目前没有吃到食物,changFlag值为0changeFlag = 0;return;
}void createFood()
{ if (snake.x[0] == food.x && snake.y[0] == food.y)//蛇头碰到食物{//蛇头碰到食物即为要吃掉这个食物了,因此需要再次生成一个食物while (1){int flag = 1;srand((unsigned int)time(NULL));food.x = rand() % (mw - 4) + 2;food.y = rand() % (mh - 2) + 1;//随机生成的食物不能在蛇的身体上for (i = 0; i < snake.len; i++){if (snake.x[i] == food.x && snake.y[i] == food.y){flag = 0;break;}}//随机生成的食物不能横坐标为奇数,否则重新生成if (flag && food.x % 2 == 0)break;}//绘制食物gotoxy(food.x, food.y);printf("*");snake.len++;//吃到食物,蛇身长度加1sorce += 10;//每个食物得10分snake.speed -= 5;//随着吃的食物越来越多,速度会越来越快changeFlag = 1;//很重要,因为吃到了食物,就不用再擦除蛇尾的那一节,以此来造成蛇身体增长的效果}return;
}
int bestsorce()
{static long long int w=0;long long int max = 0;if(sorce > w) max = sorce;else(max = w);w = max;sorce = 0;return max;
}bool snakeStatus()
{//蛇头碰到上下边界,游戏结束if (snake.y[0] == 0 || snake.y[0] == mh)return false;//蛇头碰到左右边界,游戏结束if (snake.x[0] == 0 || snake.x[0] == mw)return false;//蛇头碰到蛇身,游戏结束for (i = 1; i < snake.len; i++){if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])return false;}return true;
}void youxi()
{system("cls");drawMap();zhushi();while (1){keyDown();if (!snakeStatus())break;createFood();Sleep(snake.speed);}gotoxy(mw / 2, mh / 2);printf("游戏结束!!!!\n");gotoxy(mw / 2, mh / 2 + 1);printf("本次游戏得分为:%d\n", sorce);Sleep(3000);//Sleep()没有返回值,作用是暂停程序,单位是毫秒'}
int main()
{ youxi();do{char i;gotoxy(mw + 8, mh / 2 + 1);printf("1.按 1 键继续 2.按 0 退出 ");gotoxy(mw + 8, mh / 2 + 2);printf("请输入:"); scanf("%d",&i);if(i==0)exit(0);else(youxi());}while(1); return 0;
}

案例九

#include<stdio.h>
#include<string.h>//√×
#include<stdlib.h>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
#include<conio.h>
#define h 30
#define k 30
#include<pthread.h>
int num1=0,num2=0;
void gotoxy(int x,int y)
{HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition(handle,coord);
}
void map()//圈上一片地
{for(int i=1;i<h;i++){gotoxy(0,i);printf("■");gotoxy(60,i);printf("■");} for(int i=0;i<k+1;i++){gotoxy(i,0);puts("■");gotoxy(i,30);printf("■");}
}
struct snake{int sx[50];int sy[50];int speed;int length;
}snake1,snake2;
void firstonesnake()
{snake1.speed=1000;snake1.length=3;snake1.sx[0]=30;snake1.sy[0]=15;gotoxy(snake1.sx[0],snake1.sy[0]);printf("◆");for(int i=0;i<snake1.length-1;i++){snake1.sy[i+1]=snake1.sy[i]+1;snake1.sx[i+1]=snake1.sx[i];gotoxy(snake1.sx[i+1],snake1.sy[i+1]);printf("■");}
}
void firsttwosnake()
{snake1.speed=1000;snake2.speed=1000;snake1.length=3;snake2.length=3;snake1.sx[0]=14;snake1.sy[0]=15;snake2.sx[0]=46;snake2.sy[0]=15;gotoxy(snake1.sx[0],snake1.sy[0]);printf("◆");gotoxy(snake2.sx[0],snake2.sy[0]);printf("◆");for(int i=0;i<snake1.length-1;i++){snake1.sy[i+1]=snake1.sy[i]+1;snake1.sx[i+1]=snake1.sx[i];gotoxy(snake1.sx[i+1],snake1.sy[i+1]);printf("■");}for(int i=0;i<snake2.length-1;i++){snake2.sy[i+1]=snake2.sy[i]+1;snake2.sx[i+1]=snake2.sx[i];gotoxy(snake2.sx[i+1],snake2.sy[i+1]);printf("■");}
}
struct food{int x;int y;
}food1,food2;
void creat_foodup()//出食物.增加
{srand(time(NULL));
loop:{int s1=0,s2=0;food1.x=rand()%(k-4)+2;food1.y=rand()%(h-2)+1;for(int i=0;i<snake1.length;i++){if(snake1.sx[i]==food1.x&&snake1.sy[i]==food1.y){s1=1;}}for(int i=0;i<snake2.length;i++){if(snake2.sx[i]==food1.x&&snake2.sy[i]==food1.y){s2=1;}}if(food1.x%2!=0){s1=1;}if(s1==1||s2==1)goto loop;gotoxy(food1.x,food1.y);printf("★");}
}
void creat_foodre()//出食物.减少
{srand(time(NULL));
toop:{int s1=0,s2=0;food2.x=rand()%(k-4)+2;food2.y=rand()%(h-2)+1;for(int i=0;i<snake1.length;i++){if(snake1.sx[i]==food2.x&&snake1.sy[i]==food2.y){s1=1;}}for(int i=0;i<snake2.length;i++){if(snake2.sx[i]==food2.x&&snake2.sy[i]==food2.y){s2=1;}}if(food1.x==food2.x&&food1.y==food2.y)s1=1;if(food2.x%2!=0){s1=1;}if(s1==1||s2==1)goto toop;gotoxy(food2.x,food2.y);printf("☆");}
}
void eat_foodone()
{if(snake1.sx[0]==food1.x&&snake1.sy[0]==food1.y){snake1.length++;num1++;creat_foodup();}if(snake1.sx[0]==food2.x&&snake1.sy[0]==food2.y){gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf("  ");snake1.length--;num1--;creat_foodre();}
}
int onesnakedead()//蛇死的条件
{int jkl=0;for(int i=1;i<snake1.length;i++){if(snake1.sx[0]==snake1.sx[i]&&snake1.sy[0]==snake1.sy[i])jkl=1;}if(snake1.sx[0]==60||snake1.sx[0]==0||snake1.sy[0]==0||snake1.sy[0]==30||snake1.length==1||jkl==1){gotoxy(29,14);printf("你没了");gotoxy(27,15);printf("再来一局");gotoxy(27,16);printf("回到菜单"); char aa,bb;int dx=36,dy=15;while(1){gotoxy(dx,dy);printf("←");bb=getch();if(bb!='\r'){aa=getch();gotoxy(dx,dy);printf("  ");if(aa==72||aa==80){switch(aa){case 72:dy--;break;case 80:dy++;break;}if(dy>16){dy--;}else if(dy<15){dy++;}}}elsereturn dy;}}elsereturn 1;
}
void eat_foodtwo()
{if(snake1.sx[0]==food1.x&&snake1.sy[0]==food1.y){snake1.length++;num1++;creat_foodup();}if(snake1.sx[0]==food2.x&&snake1.sy[0]==food2.y){gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf("  ");snake1.length--;num1--;creat_foodre();}if(snake2.sx[0]==food1.x&&snake2.sy[0]==food1.y){snake2.length++;num2++;creat_foodup();}if(snake2.sx[0]==food2.x&&snake2.sy[0]==food2.y){gotoxy(snake2.sx[snake2.length-1],snake2.sy[snake2.length-1]);printf("  ");snake2.length--;num2--;creat_foodre();}
}char key2='5';
void keydown2()//处理按键问题
{int check2;int i='5',j='1',o='2',l='3';if (kbhit()){check2 = getch();if(check2==i||check2==j||check2==o||check2==l){key2=(char)check2;}}gotoxy(snake2.sx[snake2.length-1],snake2.sy[snake2.length-1]);printf("  ");for(int i=snake2.length-1;i>0;i--){snake2.sx[i]=snake2.sx[i-1];snake2.sy[i]=snake2.sy[i-1];}switch(key2){case '5':snake2.sy[0]--;break;case '1':snake2.sx[0]--;snake2.sx[0]--;break;case '2':snake2.sy[0]++;break;case '3':snake2.sx[0]++;snake2.sx[0]++;break;default:break;}
}
void gosnake2()//遍历蛇
{gotoxy(snake2.sx[0],snake2.sy[0]);printf("◆");for(int i=1;i<snake2.length;i++){gotoxy(snake2.sx[i],snake2.sy[i]);printf("■");}
}
void *snake222(void *arg)
{keydown2();gosnake2();}//蛇2
///
//蛇1
char key1={'w'};
void keydown1()//处理按键问题
{int check1;int z='w',x='W',c='a',v='A',b='s',n='S',m='d',u='D';if (kbhit()){check1 = getch();if(check1==z||check1==x||check1==c||check1==v||check1==b||check1==n||check1==m||check1==u) {key1=(char)check1;}}gotoxy(snake1.sx[snake1.length-1],snake1.sy[snake1.length-1]);printf("  ");for(int i=snake1.length-1;i>0;i--){snake1.sx[i]=snake1.sx[i-1];snake1.sy[i]=snake1.sy[i-1];}switch(key1){case 'w':case 'W':snake1.sy[0]--;break;case 'a':case 'A':snake1.sx[0]--;snake1.sx[0]--;break;case 's':case 'S':snake1.sy[0]++;break;case 'd':case 'D':snake1.sx[0]++;snake1.sx[0]++;break;default:break;}
}
void gosnake1()//遍历蛇
{gotoxy(snake1.sx[0],snake1.sy[0]);printf("◆");for(int i=1;i<snake1.length;i++){gotoxy(snake1.sx[i],snake1.sy[i]);printf("■");}
}
void snake1_speed()//速度变换
{if(snake1.length>4&&snake1.length<8)snake1.speed=750;if(snake1.length>7&&snake1.length<10)snake1.speed=500;
}
void *snake111(void *arg)
{keydown1();onesnakedead();gosnake1();
}
int welcome()
{gotoxy(50,10);printf("贪吃蛇小游戏");gotoxy(52,11);printf("单人模式");gotoxy(52,12);printf("双人模式");gotoxy(52,13);printf("退出游戏");int wx=60,wy=11;char aa,bb;while(1){gotoxy(wx,wy);printf("←");bb=getch();if(bb!='\r'){aa=getch();gotoxy(wx,wy);printf("  ");if(aa==72||aa==80){switch(aa){case 72:wy--;break;case 80:wy++;break;}if(wy>13){wy--;}else if(wy<11){wy++;}}}elsereturn wy;}
}
int main()
{system("color 0b");pthread_t th1,th2;
qqq:{int choose;system("cls");choose=welcome();if(choose==11){ttt:{num1=0;key1='w';system("cls");int zzz;map();firstonesnake();creat_foodup();creat_foodre();while(1){gotoxy(0,0);printf("■");gotoxy(32,0);printf("■");snake1_speed();Sleep(snake1.speed);keydown1();zzz=onesnakedead();gotoxy(70,14);printf("得分:%d",num1);if(zzz==15){goto ttt;}else if(zzz==16){goto qqq;}gosnake1();eat_foodone();}}}if(choose==12){www:{system("cls");map();firsttwosnake();creat_foodup();creat_foodre();while(1){Sleep(snake1.speed);pthread_create(&th1,NULL,snake111,NULL);Sleep(100);Sleep(snake2.speed);pthread_create(&th2,NULL,snake222,NULL);eat_foodtwo();}}}if(choose==13){system("cls");gotoxy(52,12);printf("bye");gotoxy(0,28); }
}
}

C/C++小游戏 ——贪吃蛇相关推荐

  1. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  2. 微信小游戏——贪吃蛇

    博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...

  3. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  4. 小游戏贪吃蛇的c++源代码

    小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...

  5. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  6. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  7. 我的小游戏——贪吃蛇

    我的小游戏--贪吃蛇 简介 最近学习了Java的GUI编程写一个贪吃蛇的游戏来玩玩. 游戏主要涉及到Java的GUI编程和多线程等技术. 游戏一共有两种模式:窗墙模式和撞墙模式,默认是窗墙模式,选择不 ...

  8. GUI编程详解:小游戏贪吃蛇

    GUI编程 1.简介 Gui的核心技术:Swing.AWT 界面不美观 需要jre环境 为什么要学习? 可以写出自己想要的小工具 工作时候,也可能需要维护到swing界面 了解MVC架构,了解监听 ( ...

  9. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  10. 【python小游戏】用python写一款小游戏--贪吃蛇

    大家好,我是爱吃饼干的小白鼠,今天给大家分享一款自制小游戏.如何用python编写贪吃蛇. 今天,突发奇想的想用python写一款小游戏--贪吃蛇.相信大家都玩过,那么玩一款自己写的是一种什么样的体验 ...

最新文章

  1. ACMNO.36输入三个整数,按由小到大的顺序输出。
  2. python3并发编程基础
  3. C# WinForm ProgressBar垂直显示进度和从右向左显示进度
  4. 开发转测试没人要_新人如何快速的进入融入软件测试行业?
  5. php 上一条下一条,thinkPhp里添加显示上一条和下一条
  6. 苹果手机免密支付怎么取消_超市“扫码枪”有啥神奇功能?直接扫走你的资金,不用输入密码|移动支付|手机|免密...
  7. php 什么情况下加异常,PHP中的异常
  8. linux 编写sh文件,linux编写shell脚本程序one官方
  9. NeurIPS'21|MixSeq:从微观数据到宏观时序预测的桥梁
  10. Java Swing线程之SwingUtilities.invokeLater解释
  11. 微软高性能网络编程示例程序
  12. springboot内置浏览器_springboot-为内置tomcat设置虚拟目录
  13. One-hot 编码/TF-IDF 值来提取特征,LAD/梯度下降法(Gradient Descent),Sigmoid
  14. winload.exe数字签名问题详解
  15. 时统ptp_IEEE1588 PTP对时系统原理及特点
  16. 论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)
  17. longest-common-prefix[最长公共子序列]
  18. 微信获取临时素材接口
  19. Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
  20. xml文件格式化脚本

热门文章

  1. axios链接带参数_axios常见传参方式
  2. python连等号_Python比较2列表和2元组用等号
  3. TortoiseGitPlink提示输入密码解决方法
  4. Vue-cli 3.X 构建工具零基础快速上手
  5. tomcat不重启java文件自动编译
  6. websocket 获取连接id_Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证...
  7. java铃声类_java多线程抓取铃声多多官网的铃声数据
  8. C语言 va_start / va_end / va_arg 自定义 printf 函数 - C语言零基础入门教程
  9. 关于计算机软件系统分类能够匹配的有,以下关于计算机软件系统分类能够匹配的有:...
  10. linux用date指令,Linux中date指令的使用