首页 > 文章资讯 > 游戏问答
C语言贪吃蛇全部代码
更新时间:2022-05-01 07:40:01 作者:云寺手游
2开元2022棋牌
开元2022棋牌
益智棋牌 | 47.56MB | v3.3.7
神殿娱乐
神殿娱乐
休闲益智 | 47.56MB | v3.3.7
我才是棋牌
我才是棋牌
休闲益智 | 47.56MB | v3.3.7
所谓棋牌
所谓棋牌
休闲益智 | 47.56MB | v3.3.7

# include<stdio.h># include<graphics.h># include<conio.h># include<stdlib.h>#define SNAKE_NUM 500enum DIR //表示蛇的方向{ UP, DOWN, LEFT, RIGHT,};struct Food{ int x; int y; int r; bool flag;//定义食物是否被吃掉 DWORD color;}food;struct Snake{ int size; int speed; int dir; POINT coor[SNAKE_NUM];}snake;void GameInit(){ //窗口 initgraph(640,480); //设置随机数种子 srand(GetTickCount());//GetTickCount()获取系统开机 到现在所经过的毫秒数 //蛇 snake.size = 3; snake.speed = 10; snake.dir=RIGHT; for(int i=0;i< snake.size;i++) { snake.coor.x=30-i*10; snake.coor.y=10; } //食物 food.x = rand() % 640;//防止超出窗口 food.y = rand() % 480; food.color = RGB(rand()%256,rand()%256,rand()%256);//颜色初始化 food.r = rand()%10+5; food.flag = true;}void GameDraw(){ BeginBatchDraw(); //窗口 setbkcolor(RGB(14,218,243));//背景色是蓝色 cleardevice(); //蛇 for(int i=0;i<snake.size;i++) { solidcircle(snake.coor.x,snake.coor.y,5); } setfillcolor(WHITE); //食物 if(food.flag) { solidcircle(food.x,food.y,food.r); } EndBatchDraw();}void SnakeMove(){ //蛇头 snake.coor[0].x++; //蛇身 for(int i = snake.size-1;i>0;i--)//从后往前 { snake.coor = snake.coor[i-1]; } switch(snake.dir) { case UP: snake.coor[0].y-=snake.speed; if(snake.coor[0].y+10<=0)//坐标、半径和边界的关系判定 { snake.coor[0].y = 480; //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; }}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 '77': if(snake.dir != LEFT) snake.dir=RIGHT; break; //游戏暂停逻辑 case ' ': while(1) { if(_getch() == ' ') return; } break; } }}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.color = RGB(rand()%256,rand()%256,rand()%256); food.r = rand()%10+5; food.flag = true; }}int main(){ GameInit(); while(1) { GameDraw(); KeyControl(); EatFood(); SnakeMove(); Sleep(150); }}
关于代码的详解,可以看这篇文章:


用了easyx吧[思考]