# 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 &#39;w&#39;: case &#39;W&#39;: case &#39;72&#39;: //改变方向,但是不能调头 if(snake.dir != DOWN) snake.dir=UP; break; case &#39;s&#39;: case &#39;S&#39;: case &#39;80&#39;: if(snake.dir != UP) snake.dir=DOWN; break; case &#39;a&#39;: case &#39;A&#39;: case &#39;75&#39;: if(snake.dir != RIGHT) snake.dir=LEFT; break; case &#39;d&#39;: case &#39;D&#39;: case &#39;77&#39;: if(snake.dir != LEFT) snake.dir=RIGHT; break; //游戏暂停逻辑 case &#39; &#39;: while(1) { if(_getch() == &#39; &#39;) 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吧[思考]