c++语言贪吃蛇最简单代码(怎样用c++编一个简单的贪吃蛇游戏)
本文目录
怎样用c++编一个简单的贪吃蛇游戏
#include《graphics.h》 #include《stdlib.h》 #include《dos.h》 #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0; int gamespeed=32000; struct Food /*食物的结构体*/ { int x; /*食物的横坐标*/ int y; /*食物的纵坐标*/ int yes; /*食物是否出现的变量*/ }food; struct Snack /*蛇的结构体*/ { 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 PrScore(void); /*分数输出函数*/ DELAY(char ch)/*调节游戏速度*/ { if(ch==’3’) { delay(gamespeed); /*delay是延迟函数*/ delay(gamespeed); } else if(ch==’2’) { delay(gamespeed); } } Menu()/*游戏开始菜单*/ { char ch; printf("Please choose the gamespeed:\n"); printf("1-Fast 2-Normal 3-Slow\n"); printf("\nPlease Press The numbers..\n"); do {ch=getch();} while(ch!=’1’&&ch!=’2’&&ch!=’3’); clrscr(); return(ch); } /*主函数*/ void main(void) { int ch; ch=Menu(); Init(); DrawK(); GamePlay(ch); Close(); } void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); cleardevice(); } void DrawK(void) { 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(char ch) { randomize(); /*随机数发生器*/ food.yes=1; /*1代表要出现食物,0表示以存在食物*/ snake.life=0; snake.direction=1; snake.x=100; snake.x=100; snake.node=2; PrScore(); while(1) /*可以重复游戏*/ { while(!kbhit()) /*在没有按键的情况下蛇自己移动*/ { if(food.yes==1) /*需要食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; /*使用rand函数随机产生食物坐标*/ 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; /*贪吃蛇的身体移动算法*/ } 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》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); delay(gamespeed); DELAY(ch); setcolor(0); rectangle(snake.x-10); } if(snake.life==1) break; key=bioskey(0); /*接受按键*/ if(key==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; } } void GameOver(void) { cleardevice(); 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,"scord:%d",score); outtextxy(55,20,str); } void Close(void) { getch(); closegraph(); }
求贪吃蛇C++源代码需要加入声音的
/*贪吃蛇游戏代码*/#include 《graphics.h》#include 《stdlib.h》#include 《time.h》#include 《dos.h》#define MAX_JOINTS 200#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define MV_RIGHT 1#define MV_LEFT 2#define MV_UP 3#define MV_DOWN 4void InitGraph(void) ; /*图形驱动初始化函数*/void DrawFence(void); /*绘制游戏场景*/void GameOver(int score); /*结束游戏*/void GamePlay(void); /*玩游戏具体过程*/void PrScore(int score); /*输出成绩*/struct Food /*食物的结构体定义*/{int x; /*食物的横坐标*/int y; /*食物的纵坐标*/int addFood; /*判断是否要出现食物的变量*/ };struct Snake /*蛇的结构体定义*/{int x; /*保存蛇身第一节位于屏幕上的列坐标*/ int y; /*保存蛇身第一节位于屏幕上的行坐标*/ int joint; /*蛇的节数*/ int direction; /*蛇移动方向*/ int life; /*蛇的生命,0活着,1死亡*/ };/*主函数*/main(){IntGraph(); /*图形驱动*/ DrawFence(); /*游戏场景*/ GamePlay(); /*玩游戏具体过程*/ closegraph(); /*图形结束*/ }/*图形驱动初始化函数*/void InitGraph(void){int gd = DETECT, gm;initgraph(&gd, &gm, "");cleardeviece();setbkcolor(BLUE);cleardeviece();setcolor(WHITE);settextstyle(DEFAULT_FONT,HORIZ_DIR,3); outtextxy(170,150,"Greedy Snake");outtextxy(219,254,"ready");setcolor(BLUE);cleardevice();} /*游戏开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void Drawfence(void){int i;setbkcolor(LIGHTGREEN);setcolor(11);setlinrstyle(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){int i,key;int gamespeed=22000; /*控制游戏速度*/int score=0; /*记录游戏得分*/struct Food food; /*食物结构体变量*/struct Snake snake; /*蛇结构体变量*/food.addFood=1; /*1表示需要出现新食物,0表示已经存在食物*/snake.life=0; /*置蛇的生命状态为活着*/snake.direction=MV_RIGHT; /*置蛇头方向为向右*/snake.x=100; /*置蛇头初始位置*/ snake.x=100;snake.joint=2; /*置蛇的初始节数为2*/ Prscore(score);/*重复玩游戏,直到按Esc键结束*/srand(time(NULL));while(1){while(!kbhit()){ if(food.addfood==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.addFood==0; /*画面上有食物*/ }if(food.addFood==0) /*画面上有食物,则显示*/ { setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.x-10);}for(i=snake.joint-1;i》0;i--) /*蛇的每个节向前移动*/{snake.x;snake.y;}/*1,2,3,4表示左,右,上,下四个方向,来决定蛇头的移动*/switch(snake.direction){case MV_RIGHT:snake.x+=10;break;case MV_LEFT:snake.x-=10;break;case MV_UP:snake.y-=10;break;case MV_DOWN:snake.y+=10;break;}/*从蛇的第四节开始判断是否撞到自己,因为蛇头为两节,第三节不可能拐过来*/for(i=3;i《snake.joint;i++){if(snake.x){GameOver(score); /*显示失败*/snake.life=1; /*蛇死亡*/break; } }/*判断蛇是否撞到墙壁*/if(snake.x》455){GameOver(score); /*本次游戏结束*/snake.life=1; /*蛇死亡*/break;} /*以上两种判断后,如果蛇死就跳出内循环,重新开始*/if(snake.life==1) break;if(snake.x==food.y) /*吃到食物后*/{/*把画面上的食物清除*/setcolor(o);rectangle(food.x,food.y,food.x+10,food.y-10);/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.joint++; /*蛇的身体长一节*/food.addFood=1; /*画面上出现新食物*/score+=10;Prscore(score); /*输出新得分*/}/*画蛇*/setcolor(4);for(i=0;i《snake.joint;i++)(rectangle(snake.x,snake.x-10);}delay(gamespeed); /*延迟控制蛇的速度*//*去除蛇的最后一节*/setcolor(0);rectangle(snake.x,snake.x+10);} /*end of while(!kbhit)*/if(snake.life==1)break; /*如果蛇死,则跳出循环*/key=bioskey(); /*按接收键*//*判断按键,是否向相反方向移动,按Esc键则退出*/if(key==Esc)break;else if(key==UP&&snake.dierction!=4)snake.direction=MV_UP;else if(key==RIGHT&&snake.direction!=MV_LEFT)snake.direction=MV_RIGHT;else if(key==LEFT&&snake.direction!=MV_RIGHT)snake.direction=MV_LEFT;else if(key==DOWN&&snake.direction!=MV_UP) snake.direction==MV_DOWN;} /*end of while(1)*/}/*结束游戏*/void GameOver(int score){cleardeviece();Prscore(score);setcolor(RED);settextxy(0,0,4);outtextxy(200,200,"GAMEOVER");getch()}/*输出成绩*/void Prscore(int score){char str;setfillstyle(SOILD_FILL,YELLON);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d",score);outtextxy(55,20,str);}
求贪吃蛇游戏的c++代码,非常感谢
#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 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)/*画面上有食物了就要显示*/ { 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(); }
本文相关文章:
scratch3.0怎么制作,简单版的贪吃蛇游戏呢?贪吃蛇游戏规则是什么
2024年6月30日 16:40
更多文章:
惠普打印机怎么下载驱动(惠普打印机1136型号,怎么下载扫描驱动)
2024年8月5日 20:45
dotaimba最新地图下载(求最新dota1IMBA AI地图下载地址 注是dota1不是2)
2024年5月17日 05:51
手机上有什么好玩的单机三国类游戏吗?三国杀一度很火,可是从什么时候开始,你发现你不再玩三国杀了
2024年5月8日 17:39
routeros破解(如何破解routeros+v5.16)
2024年6月28日 01:45
火车票12306官网订票app下载(怎么下载12306铁路官网)
2024年6月29日 07:20
秘史系列一共有几部?慈禧七十二岁去世时,为何面容还能像五十岁的妇人
2024年5月17日 06:22
emui 10(简洁智能EMUI 10,华为P40 Pro个性体验)
2024年6月14日 22:59
看门狗2手游下载免费(在线等哪个集美告诉我看门狗2手游在哪里可以下载)
2024年5月10日 19:10
华为官方mate40pro(华为华为Mate40 Pro与华为Mate40 Pro+的区别有哪些)
2024年5月10日 02:10