用C/C++语言实现贪吃蛇游戏
2014-10-06 23:04
519 查看
无意间听说贪吃蛇这个游戏可以用C语言做出来。对此,本人很感兴趣,顺便也是在国庆假期期间,闲着也是闲着,用空余时间写出了一个小小的贪吃蛇游戏。
但由于没有涉及什么算法知识,所以代码比较冗长。但我觉得好理解。
对贪吃蛇游戏还有一个没有考虑过的就是,蛇头撞到自身,游戏会结束。
还有一个地方就是,游戏一开始,就有两节长。
我这个代码中的蛇头的创建没有用随机生成,这个好实现。
地图是用一个二维数组来实现的。
主要用到的知识有:二维数组,结构体,srand函数,rand函数,kbhit()函数,getch()函数,_sleep()函数,还有几个函数的几个基本知识
运行截图:
但由于没有涉及什么算法知识,所以代码比较冗长。但我觉得好理解。
对贪吃蛇游戏还有一个没有考虑过的就是,蛇头撞到自身,游戏会结束。
还有一个地方就是,游戏一开始,就有两节长。
我这个代码中的蛇头的创建没有用随机生成,这个好实现。
地图是用一个二维数组来实现的。
主要用到的知识有:二维数组,结构体,srand函数,rand函数,kbhit()函数,getch()函数,_sleep()函数,还有几个函数的几个基本知识
/************************************************************************** ***************************www.njtcstudent.com*****************************
******************************2014年10月6日********************************
******************************-by puhaiyang********************************
*******************************内江师范学院********************************
********************************13级计科系*********************************
**************************************************************************/ <pre name="code" class="cpp">#include<iostream> #include<conio.h>//kbhit()函数需要调用,用来检查键盘输入 #include<ctime>//time函数需要调用,用来生成随机数 using namespace std; #define COL 15 //height 游戏地图高度 #define COW 30 //width 游戏地图宽度 int speed = 100; //游戏速度 100即 : 100*0.1 sconst char head = '@'; //蛇头 const char body='#'; //蛇身 const char food ='&'; //食物 const char brige = '!'; //边界 const char space = ' '; //空白区域 void rightMove(char map[COL][COW]); //定义几个函数 void upMove(char map[COL][COW]); void downMove(char map[COL][COW]); void leftMove(char map[COL][COW]); void otherMove(char map[COL][COW]); void createFood(char map[COL][COW]); void eatFood(char map[COL][COW]);int gameState=0;// 0 as running , 1 as over 游戏标志 1表示游戏结束 int sum = 0; //蛇的宽度 int fx,fy; //食物在地图上的位置 int score = 0; //游戏分数,吃一个食物,加10分 ,开始时是0分 void createMap(char map[COL][COW] ) //创建游戏地图 void createMap(char map[COL][COW] ) { int i,j; for(i=0;i<COL;i++) for(j=0;j<COW;j++){ if(i==0 || j==0 || i==COL-1 || j==COW-1) { map[i][j]=brige; } else map[i][j]=space; } } void show(char map[COL][COW])//显示游戏地图 { int i,j; for(i=0;i<COL;i++){ for(j=0;j<COW;j++){ cout<<map[i][j]; } cout<<endl; } cout<<"score:"<<score<<endl; } struct snake//创建蛇的结构体 { int x,y;//创建蛇的结构体 int now; //蛇的方向 }SNAKE[COL*COW]; void addNode(char map[COL][COW])//添加蛇身函数 { SNAKE[sum].x=(SNAKE[0].x); SNAKE[sum].y=(SNAKE[0].y); SNAKE[sum].now=SNAKE[0].now; map[SNAKE[sum].x][SNAKE[sum].y]=body; sum++; } void createSnake(char map[COL][COW])//创建蛇头函数 { int x,y; x=3;y=5; map[x][y]=head; SNAKE[0].x=x; SNAKE[0].y=y; SNAKE[0].now=3; sum = 1; } void snakeMove(char map[COL][COW])//蛇的移动过程 { char key; //定义一个用来存放键盘输入的值 addNode(map); createFood(map); while(1){ system("cls"); _sleep(speed); eatFood(map); if(kbhit()!=0)//kbhit()函数用法 自己去查下 { while(kbhit() != 0) //kbhit()函数用法 自己去查下 key = getch(); switch(key)//可以通过w,s,a,d的大小写 或上下左右键来控制方向 { case 'w': case 'W': case 72: //向上键的ascii码是:72 if(SNAKE[0].now!=1) SNAKE[0].now=0;break; case 's': case 'S': case 80://下的asc:80 if(SNAKE[0].now!=0) SNAKE[0].now=1;break; case 'a': case 'A': case 75://下的asc:80 if(SNAKE[0].now!=3) SNAKE[0].now=2;break; case 'd': case 'D': case 77://右的asc:77 if(SNAKE[0].now!=2) SNAKE[0].now=3;break; } } switch(SNAKE[0].now)//我定义蛇的结构体中 上下左右分别是0,1,2,3 { case 0: upMove(map);break; case 1: downMove(map);break; case 2: leftMove(map);break; default: rightMove(map); } show(map); if(gameState==1)//判断游戏的状态,通过gameState变量判断 { cout<<"Game Over!"<<endl; break; } } } /*对于移动中的具体代码,可以画出游戏地图,标出具体位置,再分加讨论上下左右的位置移动*/ void downMove(char map[COL][COW])//蛇头向下移动 { otherMove(map); SNAKE[0].x++; map[SNAKE[0].x][SNAKE[0].y]=head; SNAKE[0].now=1; } void leftMove(char map[COL][COW])//蛇头向左移动 { otherMove(map); SNAKE[0].y--; map[SNAKE[0].x][SNAKE[0].y]=head; SNAKE[0].now=2; } void upMove(char map[COL][COW])//蛇头向上移动 { otherMove(map); SNAKE[0].x--; map[SNAKE[0].x][SNAKE[0].y]=head; SNAKE[0].now=0; } void rightMove(char map[COL][COW])//蛇头向右移动 { otherMove(map); SNAKE[0].y++; map[SNAKE[0].x][SNAKE[0].y]=head; SNAKE[0].now=3; } void otherMove(char map[COL][COW])//蛇体移动 ,就是不是蛇头的部分移动 { int i; for(i=1;i<sum;i++){ if(i==1) map[SNAKE[i].x][SNAKE[i].y]=space; if(i==sum-1){ SNAKE[i].x=SNAKE[0].x; SNAKE[i].y=SNAKE[0].y; SNAKE[i].now=SNAKE[0].now; } else { SNAKE[i].x=SNAKE[i+1].x; SNAKE[i].y=SNAKE[i+1].y; SNAKE[i].now=SNAKE[i+1].now; } map[SNAKE[i].x][SNAKE[i].y]=body; } } void createFood(char map[COL][COW])//创建食物 { //random create food 随机创建食物 srand(time(0)); while(1){ fx=(rand()%(COL-2))+1;//不能让食物创建在 fy=(rand()%(COW-2))+1; //游戏边界线上 if(map[fx][fy]!=head && map[fx][fy]!=body)//不能让食物创建在蛇身上 { map[fx][fy]=food; break; } } } void eatFood(char map[COL][COW]) { if((SNAKE[0].x==fx)&&(SNAKE[0].y==fy))//蛇吃食物 { score+=10;//分数加10分 createFood(map);//再创建一个食物 addNode(map);//蛇身加1个结点 } if(SNAKE[0].x==0 || SNAKE[0].x==COL-1 || SNAKE[0].y==0 || SNAKE[0].y==COW-1) { gameState=1;//如果蛇头碰上了边界,设置游戏标志为1,即游戏结束标志 } } void main(){ char map[COL][COW]; system("title snake"); //system函数用来调用dos命令 createMap(map); createSnake(map); show(map); cout<<endl<<"Plead enter anykey to start game"<<endl;//提示 getch();//等待用户输入任意一个字符,游戏就可以开始 snakeMove(map); }
运行截图:
相关文章推荐
- 经典游戏---贪吃蛇从C++代码实现
- 【贪吃蛇,C++实现】,由简单游戏开始学习OOP,的编程新手
- Linux 环境下C语言编译实现贪吃蛇游戏(转载)
- 经典游戏---贪吃蛇从C++代码实现
- 用C/C++实现较完整贪吃蛇游戏
- 经典游戏---贪吃蛇从C++代码实现
- 利用C/C++实现较完整贪吃蛇游戏
- C/C++语言实现动态数组
- 用C++实现跨平台游戏开发之Allegro引擎
- [转]用C++实现跨平台游戏开发之Irrlicht引擎
- 一个简单的游戏引擎核心状态机的C++实现
- c/c++语言实现堆栈修改,通过ret跳转到自定义函数
- 使用SWIG实现C/C++与其他语言间的互相调用 zz
- 游戏状态管理之C++实现
- c++实现动态多国语言的动态切换
- c++模拟动态语言中string类的实现
- C++(STL)实现的修改游戏存档文件的2个相关类
- 用C++实现跨平台游戏开发之Irrlicht引擎
- 通过Flash和c++的交互来实现自己的桌面游戏
- JAVA实现贪吃蛇游戏