贪吃蛇完整代码(史上最详细)0 丶头文件 include stdio h 标准函数 include stdlib h 库文件 include graphics h 图形窗口 include conio h 控制台 define SNAKE NUM 500 蛇的最大节数 1 丶蛇方向 enum DIR UP conio h graphics h stdlib h stdio h
大家好,我是讯享网,很高兴认识大家。
//0丶头文件 #include<stdio.h> //标准函数 #include<stdlib.h> //库文件 #include<graphics.h> //图形窗口 #include<conio.h> //控制台 #define SNAKE_NUM 500 //蛇的最大节数 //1丶蛇方向 enum DIR { UP, //上 DOWN, //下 LEFT, //左 RIGHT, //右 } //2丶蛇结构 struct snake { int size; //蛇的节数 int speed; //蛇的速度 int dir; //蛇的方向 POINT coor[SNAKE_NUM]; //蛇坐标 }sanke; //3丶食物结构 struct food { int x; //食物横坐标 int y; //食物纵坐标 int r; //食物半径 bool flag; 食物是否被吃 DWORD color; //食物颜色 }food; //4丶数据初始化 void GameInit() { initgraph(640,480); //初始化图形窗口大小 srand(GetTickCount()); //从开机到现在经过的毫秒数,随机生成食物 snake.size=3; //初始化蛇的节数 snake.speed=10; //初始化蛇的速度 snake.dir=RIGHT; //初始化蛇的方向 for(int i=0;i<snake.size;i++) { snake.coor[i].x=40-10*i; //初始化蛇的三段节数代表 0 1 2 依此类推 snake.coor[i].y=10; } food.x=rand()%640; food.y=rand()%480; food.r=rand()%10+5; //随机生成半径为0~4的食物 food.flag=true; food.color=RGB(rand()%256,rand()%256,rand()%256); } //5丶游戏绘制 void GameDraw() { BeginBatchDraw(); //双缓冲绘制 setbkcolor(RGB(28,115,119)); //图形窗口背景颜色 cleardevice(); //清空图形 setfillcolor(GREEN); //蛇和食物颜色 for(int i=0;i<snake.size;i++) { solidcircle(snake.coor[i].x,snake.coor[i].y,5); //绘制蛇 solidcircle - 圆形填充物 } if(food.flag) { solidcircle(food.x,food.y,food.r); //绘制食物 } EndBatchDraw(); //结束绘制 } //6丶让蛇动起来 void snakeMove() { for(int i=0;i<snake.size;i++) { snake.coor[i]=snake.coor[i-1]; //移动时位置发生改变 } switch(_getch()) //_getch()接收按键 { case UP: snake.coor[0].y-=snake.speed; if(snake.coor[0].y+10<=0) { snake.coor[0].y=480; } break; case DOWN: snake.coor[0].y+=snake.speed; if(snake.coor[0].y-10>=480) { snake.coor[0].y=0; } break; case LEFT: snake.coor[0].x-=snake.speed; if(snake.coor[0].x+10<=0) { snake.coor[0].x=640; } break; case RIGHT: snake.coor[0].x-=snake.speed; if(snake.coor[0].x-10>=640) { snake.coor[0].x=0; } break; } } //7丶通过按键控制蛇的方向 void KeyControl() { if(_kbhit()) { switch(_getch()) { case 'w': case 'W': case '72': if(snake.dir!=DOWN) { snake.dir=UP; } break; case 's': case 'S': case '80': if(snake.dir!=UP) { snake.dir=DOWN; } break; case 'a': case 'A': case '75': if(snake.dir!=RIGHT) { snake.dir=LEFT; } break; case 'd': case 'D': case '78': if(snake.dir!=LEFT) { snake.dir=RIGHT; } break; case ' ': //空格暂停游戏逻辑 while(1) { if(_getch()==' ') return; } } } } //8丶吃食物 void Eatfood() { if(food.flag&&snake.coor[0].x>=food.x-food.r&&snake.coor[0].x<=food.x+food.r&& snake.coor[0].y>=food.y-food.r&&snake.coor[0].y<=food.y+food.r) { food.flag=false; snake.size++; } if(!food.flag) //食物被吃重新生成食物 { food.x=rand()%640; food.y=rand()%480; food.r=rand()%10+5; food.flag=true; food.color=RGB(rand()%256,rand()%256,rand()%256); } } //9丶暂停游戏 void stop() { if(_kbhit()) { if(_getch()==' ') { while(_getch()==' ') { } } } } //10丶主函数 int main() { GameInit(); //初始化数据 while(1) { GameDraw(); //游戏绘制 snakeMove(); //让蛇动起来 KeyControl(); //通过按键改变蛇的方向 Eatfood(); //吃食物 Sleep(40); //控制蛇的速度 }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16095.html