贪吃蛇代码c语言(新手求c语言贪吃蛇源代码,一定要有注释,不要有光标移动函数之类的(新手看不懂)其它的没有要求,不)
本文目录
- 新手求c语言贪吃蛇源代码,一定要有注释,不要有光标移动函数之类的(新手看不懂)其它的没有要求,不
- c语言贪吃蛇代码问题,按左右按一下不能一直移动,请帮忙改下
- 求贪吃蛇C语言代码,有一定功能要求
- 贪吃蛇c语言代码
- 求C语言贪吃蛇代码能在DEV上运行通过的贪吃蛇,不要TC上的啊我们老师上课给在DEV我们运行了一次
- 在dos环境下c语言编程编一个贪吃蛇游戏
新手求c语言贪吃蛇源代码,一定要有注释,不要有光标移动函数之类的(新手看不懂)其它的没有要求,不
贪吃蛇 #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50000;/*游戏速度自己调整*/ struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake { int x; int y; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake; void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void) { Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ } /*图形驱动*/ void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); cleardevice(); } /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void) { /*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i《=600;i+=10)/*画围墙*/ { rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ } for(i=40;i《=450;i+=10) { rectangle(50,i,59,i+10); /*左边*/ rectangle(601,i,610,i+10);/*右边*/ } } /*玩游戏具体过程*/ void GamePlay(void) { randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ snake.direction=1;/*方向往右*/ snake.x=100;/*蛇头*/ snake.x=100; snake.node=2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ { while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ { if(food.yes==1)/*需要出现新食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/ } if(food.yes==0)/*画面上有食物了就要显示*/ {
c语言贪吃蛇代码问题,按左右按一下不能一直移动,请帮忙改下
/*program by wlfryq 71693456@qq.com*/#include 《stdio.h》#include 《stdlib.h》#include 《conio.h》#include 《windows.h》#include 《time.h》#include 《direct.h》#include 《stdbool.h》#define W 80 //屏幕宽度 #define H 37 //屏幕高度 #define SNAKE_ALL_LENGTH 200 //蛇身最长为 void CALLBACK TimerProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime);void start();struct MYPOINT{int x;int y;} s , head, end, food;int max_count=0; //历史最高分,如果count》max_count, 则max_count=countint old_max_count=0; //历史最高分,不会变动, 用于死亡时判断max_count是否大于old_max_count,如果大于,则写入文件 int count=0; //得分 int len=20; //当前蛇身长度 int direct=0; //方向: 0-向右, 1-向下, 2-向左, 3-向上int speed=200; //速度:毫秒 bool isfood=false; //食物是否存在int timerID;bool stop=false; //暂停 char* ini_path; //数据文件绝对路径 void setxy(int x, int y) //设置CMD窗口光标位置{ COORD coord = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);}void hide_cursor() //隐藏CMD窗口光标{CONSOLE_CURSOR_INFO cci;cci.bVisible = FALSE;cci.dwSize = sizeof(cci);HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(handle, &cci);}void set_food() //设置食物坐标 {if(isfood==true){return;}int x,y,i;bool flag=false;while(1){flag=false;x=rand()%(W-14)+6;y=rand()%(H-12)+6;for(i=0;i《len;i++) //判断食物是否落在蛇身上 {if(s.y==y){flag=true;break;}}if(flag==true){continue;}else{food.x=x;food.y=y;break;}}setxy(food.x,food.y);printf("*");isfood=true;}void check_board() //检测蛇身是否越界和相交 {int i;if(s.y《=2){setxy(W/2-5,0);printf("game over\n");stop=true;if(old_max_count《max_count){char t={’\0’};sprintf(t,"%d",max_count);WritePrivateProfileString("MAX_COUNT","max_count",t,ini_path);}}for(i=1;i《len;i++){if(s.y){setxy(W/2-5,0);printf("game over\n");stop=true;if(old_max_count《max_count){char t={’\0’};sprintf(t,"%d",max_count);WritePrivateProfileString("MAX_COUNT","max_count",t,ini_path);}break;}}if(stop==true){KillTimer(NULL,timerID);int c;while(1){fflush(stdin);c=_getch();if(c==’n’ || c==’N’){start();}else if(c==’q’ || c==’Q’){exit(0);}else continue;}}}void printf_body(bool is_first) //打印蛇身 {if(is_first==true) //如果是第一次打印蛇身 {int i;for(i=0;i《len;i++){setxy(s.y);printf("O");}}else //如果不是第一次打印蛇身 {setxy(end.x,end.y);printf(" ");setxy(s.y);printf("O");}if(food.x==s.y) //如果吃到食物 {count++;isfood=false; //重置食物 set_food();len++;KillTimer(NULL,timerID);if(speed》100) speed-=10;else if(speed》50) speed-=5;else if(speed》30) speed-=2;else if(speed》16) speed-=1;else ;setxy(0,0);if(max_count《count)max_count=count;printf(" speed : %d ms score : %d best score:%d ",speed,count,max_count);timerID=SetTimer(NULL,001,speed,TimerProc);}}void change_body_pos(int x, int y) //改变蛇身的坐标数据 {end.x=s.x;end.y=s.y;int i;for(i=len-1;i》0;i--){s.x;s.y;}s.x=x;s.y=y;}void CALLBACK TimerProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime){switch(direct){case 0:head.x++;change_body_pos(head.x,head.y);printf_body(false);check_board();break;case 1:head.y++;change_body_pos(head.x,head.y);printf_body(false);check_board();break;case 2:head.x--;change_body_pos(head.x,head.y);printf_body(false);check_board();break;case 3:head.y--;change_body_pos(head.x,head.y);printf_body(false);check_board();break;}}void start(){int i;KillTimer(NULL,timerID);count=0; //得分 len=20; //当前蛇身长度 direct=0; //方向: 0-向右, 1-向下, 2-向左, 3-向上speed=200; //速度:毫秒 isfood=false; //食物是否存在stop=false; //停止 system("cls");setxy(1,4);printf("┌─────────────────────────────────────┐\n");for(i=0;i《33;i++){printf(" │ │\n");}printf(" └─────────────────────────────────────┘");head.x=len-1+5;head.y=H/2;for(i=0;i《len;i++){s.x=head.x-i;s.y=head.y;}setxy(0,0);printf(" speed : %d:ms score : %d best score:%d ",speed,count,max_count);printf_body(true);set_food();timerID=SetTimer(NULL,001,speed,TimerProc);int c;MSG msg;while(GetMessage(&msg,NULL,0,0)){if(stop==true)break;if(_kbhit()) //如果按下的是方向键或功能键, _getch()要调用两次,第一次返回0XE0或0 {fflush(stdin);c=_getch(); //上: 72 下:80 左:75 右:77 if(c==0XE0 || c==0){c=_getch();if(c==72 && direct!=1 && direct!=3){direct=3;}else if(c==80 && direct!=1 && direct!=3){direct=1;}else if(c==75 && direct!=0 && direct!=2){direct=2;}else if(c==77 && direct!=0 && direct!=2){direct=0;}}else if(c==’ ’){setxy(W/2-10,0);system("pause");setxy(W/2-10,0);printf(" ");}}if(msg.message==WM_TIMER){DispatchMessage(&msg);}}}int main(){ini_path=(char*)malloc(sizeof(char)*50);srand((unsigned)time(0));getcwd(ini_path,50);//取得当前程序绝对路径ini_path=strcat(ini_path,"snake.dat"); max_count=GetPrivateProfileInt("MAX_COUNT","max_count",0,ini_path);old_max_count=max_count;char cmd;sprintf(cmd,"mode con cols=%d lines=%d\0",W,H);system(cmd);//改变CMD窗口大小hide_cursor();start();return 0;}
求贪吃蛇C语言代码,有一定功能要求
以下是代码
/* 贪吃蛇程序 by champking */#define N 200#include 《graphics.h》#include 《stdlib.h》#include 《dos.h》#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score = 0;/*得分*/int gamespeed = 100000;/*游戏速度自己调整*/struct Food{ int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{ int x; int y; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){ Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/}/*图形驱动*/void Init(void){ int gd = DETECT, gm; initgraph(&gd, &gm, "c:\\tc"); cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void){/*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE, 0, THICK_WIDTH);/*设置线型*/ for(i = 50; i 《= 600; i += 10)/*画围墙*/ { rectangle(i, 40, i + 10, 49); /*上边*/ rectangle(i, 451, i + 10, 460);/*下边*/ } for(i = 40; i 《= 450; i += 10) { rectangle(50, i, 59, i + 10); /*左边*/ rectangle(601, i, 610, i + 10);/*右边*/ }}/*玩游戏具体过程*/void GamePlay(void){ randomize();/*随机数发生器*/ food.yes = 1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life = 0;/*活着*/ snake.direction = 1;/*方向往右*/ snake.x = 100;/*蛇头*/ snake.x = 100; snake.node = 2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ { while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ { if(food.yes == 1)/*需要出现新食物*/ { food.x = rand() % 400 + 60; food.y = rand() % 350 + 60; while(food.x % 10 != 0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++; while(food.y % 10 != 0) food.y++; food.yes = 0;/*画面上有食物了*/ } if(food.yes == 0)/*画面上有食物了就要显示*/ { setcolor(GREEN); rectangle(food.x, food.y, food.x + 10, food.y - 10); } for(i = snake.node - 1; i 》 0; i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x; snake.y; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case 1: snake.x += 10; break; case 2: snake.x -= 10; break; case 3: snake.y -= 10; break; case 4: snake.y += 10; break; } for(i = 3; i 《 snake.node; i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ { if(snake.x) { GameOver();/*显示失败*/ snake.life = 1; break; } } if(snake.x《55|| snake.y》455)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life == 1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x == food.y)/*吃到食物以后*/ { setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x, food.y, food.x + 10, food.y - 10); snake.x =- 20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes = 1;/*画面上需要出现新的食物*/ score += 10; PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i = 0; i 《 snake.node; i++) rectangle(snake.x + 10, snake.y - 10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.x, snake.x - 10); } /*endwhile(!kbhit)*/ if(snake.life == 1)/*如果蛇死就跳出循环*/ break; key = bioskey(0);/*接收按键*/ if(key == ESC)/*按ESC键退出*/ break; else if(key == UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key == RIGHT &&snake.direction != 2) snake.direction=1; else if(key == LEFT && snake.direction != 1) snake.direction = 2; else if(key == DOWN && snake.direction != 3) snake.direction = 4; }/*endwhile(1)*/}/*游戏结束*/void GameOver(void){ cleardevice(); PrScore(); setcolor(RED); settextstyle(0, 0, 4); outtextxy(200, 200, "GAME OVER"); getch();}/*输出成绩*/void PrScore(void){ char str; setfillstyle(SOLID_FILL, YELLOW); bar(50, 15, 220, 35); setcolor(6); settextstyle(0,0,2); sprintf(str, "score:%d", score); outtextxy(55, 20, str);}/*图形结束*/void Close(void){ getch(); closegraph();}
贪吃蛇c语言代码
#include《stdio.h》#include《stdlib.h》#include《Windows.h》#include《conio.h》#include《time.h》char gamemap;//游戏地图大小 20*40int score=0;//当前分数 //记录蛇的结点int x;//每个结点的行编号int y;//每个结点的列编号int len = 0;//蛇的长度//记录水果信息 int fx=0;//食物的横坐标 int fy=0;//食物的纵坐标 int fcount=0;//食物的数目 //主要函数操作 void createfood();//生成食物 void PrintgameMap(int x);//画游戏地图 void move(int x);//移动蛇 int main(){ srand(time(NULL)); //初始化蛇头和身体的位置,默认刚开始蛇长为2 x = 9; y = 9; len++; x = 9; y = 8; len++; createfood(); PrintgameMap(x,y); move(x,y); return 0;}void createfood(){ if(0==fcount) { int tfx=rand()%18+1; int tfy=rand()%38+1; int i,j; int have=0;//为0表示食物不是食物的一部分 for(i=0;i《len;i++) { for(j=0;j《len;j++) { if(x==fy) { have=1; break; } else { have=0; } } if(1==have)//若为蛇的一部分,执行下一次循环 { continue; } else//否则生成新的水果 { fcount++; fx=tfx; fy=tfy; break; } }}}//游戏地图void PrintgameMap(int x){ int snake = 0,food=0;int i, j; //画游戏地图,并画出蛇的初始位置 for (i = 0; i 《 20; i++) { for (j = 0; j 《 40; j++) { if (i == 0 && j 》= 1 && j 《= 38) { gamemap = ’=’; } else if (i == 19 && j 》= 1 && j 《= 38) { gamemap = ’=’; } else if (j == 0 || j == 39) { gamemap = ’#’; } else { gamemap = ’ ’; } //判断蛇是否在当前位置 int k; for ( k = 0; k 《 len; k++) { if (i == x) { snake = 1; break; } else { snake = 0; } } { if(fcount&&fx==i&&fy==j) { food=1; } else { food=0; } } //若蛇在当前位置 if (1==snake ) { printf("*"); } else if(1==food) { printf("f"); } //若蛇不在当前位置并且当前位置没有水果 else { printf("%c", gamemap); } } printf("\n"); } printf("score:%d",score);}//移动void move(int x){ char s; s=getch(); int move=0,beat=0; while (1) { int cx; int cy; memcpy(cx, x, sizeof(int)*len); memcpy(cy, y, sizeof(int)*len); //头 if (s==’w’) { x--; move=1; if(x《=0) { printf("Game over\n"); break; } } else if (s==’s’) { x++; move=1; if(x》=19) { printf("Game over\n"); break; } } else if (s==’a’) { y --; move=1; if(y《=0) { printf("Game over\n"); break; } } else if (s==’d’) { y++; move=1; if(y》=39) { printf("Game over\n"); break; } } //身体 int i; for ( i = 1; i 《 len; i++) { x; y; } for(i=1;i《len;i++)//要是咬到了自己 { if(x) { beat=1; } else { beat=0; } } if(1==beat) { printf("Game over\n"); break; } if(1==move) { if(fcount&&x==fy)//如果吃到了果子 { //拷贝当前蛇头地址到第二个结点 memcpy(x+1,cx,sizeof(int)*len); memcpy(y+1,cy,sizeof(int)*len); len++; fcount--; fx=0; fy=0; score++; createfood(); } Sleep(70); system("cls"); PrintgameMap( x, y); } else continue; if(kbhit())//判断是否按下按键 { s=getch(); } } }
求C语言贪吃蛇代码能在DEV上运行通过的贪吃蛇,不要TC上的啊我们老师上课给在DEV我们运行了一次
#include 《time.h》#include 《stdio.h》#include 《stdlib.h》#include 《windows.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();int biteself();void createfood();void cantcrosswall();void snakemove();void pause();void gamecircle();void welcometogame();void endgame();void gamestart();void Pos(int x,int y)//设置光标位置{ COORD pos; HANDLE hOutput; pos.X=x; pos.Y=y; hOutput=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput,pos);}void creatMap()//创建地图{ int i; for(i=0; i《58; i+=2) { //打印上下边框 Pos(i,0); printf("■"); Pos(i,26); printf("■"); } for(i=1; 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《=4; i++) { 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)); food_1=(snake*)malloc(sizeof(snake)); while((food_1-》x%2)!=0) { //保证其为偶数,使得食物能与蛇头对其 food_1-》x=rand()%52+2; } food_1-》y=rand()%24+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==56 ||head-》y==0 || head-》y==26) { 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 gamecircle()//控制游戏{ Pos(64,15); printf("不能穿墙,不能咬到自己\n"); Pos(64,16); printf("用↑.↓.←.→分别控制蛇的移动."); Pos(64,17); printf("F1 为加速,F2 为减速\n"); Pos(64,18); printf("ESC :退出游戏.space:暂停游戏."); Pos(64,20); // status=R; while(1) { Pos(64,10); printf("得分:%d ",score); Pos(64,11); printf("每个食物得分:%d分",add); if(GetAsyncKeyState(VK_UP) && status!=D) { 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; } else if(GetAsyncKeyState(VK_F1)) { if(sleeptime》=50) { sleeptime=sleeptime-30; add=add+2; if(sleeptime==320) { add=2;//防止减到1之后再加回来有错 } } } else if(GetAsyncKeyState(VK_F2)) { if(sleeptime《350) { sleeptime=sleeptime+30; add=add-2; if(sleeptime==350) { add=1; //保证最低分为1 } } } Sleep(sleeptime); snakemove(); }}void welcometogame()//开始界面{ Pos(40,12); // printf("欢迎来到贪食蛇游戏!"); Pos(40,25); // system("pause"); system("cls"); Pos(25,12); printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n"); Pos(25,13); 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()//游戏初始化{ system("mode con cols=100 lines=30"); welcometogame(); creatMap(); initsnake(); createfood();}int main(){ gamestart(); gamecircle(); endgame(); return 0;}
在dos环境下c语言编程编一个贪吃蛇游戏
程序设计及说明1、边墙(Wall) 该类规定游戏的范围大小。 2、蛇类(Snake) 用该类生成一个实例蛇snake。 3、移动(Move) 该类用于实现对蛇的操作控制,即蛇头方向的上下左右的移动操作。 4、食物类(Food) 该类是游戏过程中食物随机产生的控制和显示。 5、判断死亡(Dead) 该类是对游戏过程中判断玩家操作是否导致蛇的死亡,其中包括蛇头咬食自己身体和蛇头是否触及游戏“边墙”。 6、蛇结点(SnakeNode) 该类是蛇吃下随机产生的食物从而增加长度的控制类,其中包括蛇长度增加和尾部的变化。 7、计分统计(Score) 该类由于玩家的游戏成绩记录,及游戏结束时的得分输出。 ... 部分函数及说明1.Char menu(); /*用于玩家选择的游戏速度,返回一个char值*/ 2.DELAY(char ch1); /*用于控制游戏速度*/ 3.void drawmap(); /*绘制游戏地图函数* 4、void menu() /*游戏帮助信息的输出* ... 部分类细节解说1、蛇的构建 —Snake class Snake{ public: int x;int y; int node; //蛇身长度int direction;//蛇运动方向int life;//蛇生命,判断死亡 }2、随机食物Food 利用rand()函数进行随机数产生,然后就行坐标定位 void Food(void){ ... int pos_x = 0; int pos_y = 0; pos_x = rand() % length;//x坐标的确定 pos_y = rand() % (width-1);//y坐标的确定 ... }3、蛇头方向确定 利用switch语句进行方向确定... switch(){ case VK_UP:{ OutChar2.Y--; y--; break; } case VK_LEFT:{ OutChar2.Y++; y++; break; } case VK_DOWN:{ OutChar2.X---; x--; break; } case ’VK_RIGHT:{ OutChar2.X++; x++; break; } } 代码#include 《iostream》 #include 《ctime》 #include 《conio.h》 #include 《windows.h》 #include 《time.h》 using namespace std; int score=0,t=300,f=1;//得分与时间间隔/ms(控制贪吃蛇的速度) double ss=0,tt=0;//统计时间所用参数 class Node { Node(): x(0), y(0), prior(0), next(0) { } int x; int y; Node *prior; Node *next; friend class Snake; }; class Snake { public: Snake(); ~Snake(); void output(); void move(); void change_point(char); private: Node *head; Node *tail; enum p{ UP, RIGHT, DOWN, LEFT }point; //方向int food_x, food_y; //食物的坐标static const int N = 23; int game; void add_head(int, int); //添加坐标为a,b的结点void delete_tail(); //删除最后一个结点void greate_food(); //产生食物void gotoxy(int, int); }; void menu(); //游戏操作菜单int main() { system("color a"); //初始cmd窗口颜色为黑(背景)淡绿(文字) cout《《"\n\n\n\n\n\n "; for(int i=0;i《23;i++) {char star={"Welcome To Snake Game!"}; cout《《star; Sleep(170);} cout《《"\n\n 祝你好运!"《《endl; Sleep(3000); if(kbhit()){char kk=getch();if(kk==9)f=5;} //如果执行,吃一颗星加5分 system("cls"); Snake s; menu(); system("color 1a"); s.output(); while (true) { char keydown = getch(); if(keydown==32)getch(); if(keydown==27)return 0; s.change_point(keydown); while (!kbhit()) {clock_t start,end;start=clock(); s.move(); s.output(); Sleep(t); end=clock();tt=(double)(end-start)/CLOCKS_PER_SEC;ss+=tt; cout《《" 时间:"《《(int)ss;
本文相关文章:
贪吃蛇植物大作战第五关怎么过?植物大作战第十关熔岩火山怎么过
2024年9月18日 08:18
贪吃蛇小游戏代码(能在dev-c++上运行通过的扫雷,贪吃蛇,等小游戏的c语言代码)
2024年8月9日 17:15
贪吃蛇999999钻999999金币(贪吃蛇大作战无限999999苹果下载地址)
2024年8月4日 14:24
贪吃蛇模式是什么意思?版本ios10的苹果6s plus手机玩“贪吃蛇大作战”游戏一直显示无法连接网络是怎么回事
2024年5月20日 09:55
贪吃蛇大作战好看的女生动漫头像有哪些?《贪吃蛇进化论》皮肤大全
2024年5月19日 10:46
更多文章:
cfm手游官方网站(cf手游体验服资格申请官网2023如何下载)
2024年6月5日 13:44
侦探游戏app排行榜前十名(2020好玩的侦探类手机游戏有哪些)
2024年7月26日 13:54
大话西游手游网页版(大话西游手游网页版怎么登陆 网页版登陆方法及操作步骤)
2024年4月30日 17:33
三国志在线玩(谋士献策,在线配将,三国志中怎样搭开荒能达到最佳效果)
2024年6月24日 04:21
2008年电脑单机游戏大全列表(2008年最流行的单机游戏)
2024年8月8日 15:45
帝国时代4有哪些战役 帝国时代4战役背景时间一览?帝国时代2里所有的国家个是现在的什么国家
2024年6月7日 09:33