# 小游戏-贪吃蛇 **Repository Path**: lkdhy/snake ## Basic Information - **Project Name**: 小游戏-贪吃蛇 - **Description**: 很酷炫的贪吃蛇小游戏 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-13 - **Last Updated**: 2022-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 小游戏-不会变长的贪吃蛇 #### 使用方法 * 编译运行 snake.c 文件即可 #### 界面架构 * 游戏区:20 * 20 的边界(#),水果(*),贪吃蛇(S) * 分数区:显示玩家当前的分 #### 规则与操作方法 * 开始后,玩家可用键盘的 W、S、A、D 来控制贪吃蛇的移动方向,分别代表上、下、左、右 * 若贪吃蛇吃到水果则得 10 分,并且界面会自动生成下一个水果 * 若贪吃蛇碰到边界则游戏自动结束,玩家可以关注自己的最终得分 #### 源代码 ```c #include #include #include #include #include int ht,wt,gameover,score,got_it; int fruit_x,fruit_y,now_x,now_y,id; int dx[]={0,-1,1,0,0},dy[]={0,0,0,-1,1}; void draw() { sleep(0.2); system("cls"); for (int i=0;i<=wt+1;++i) printf("#"); printf("\n"); for (int i=1;i<=ht;++i) { printf("#"); for (int j=1;j<=wt;++j) { if (i==fruit_x && j==fruit_y) printf("*"); else if (i==now_x && j==now_y) printf("S"); else printf(" "); } printf("#\n"); } for (int i=0;i<=wt+1;++i) printf("#"); printf("\n"); if (got_it) { printf("Got it!!\n"); sleep(1); } else printf("\n"); printf("Your score: %d\n",score); printf("\n"); } void input() { if (kbhit()) { switch (getch()) { case 'w' : id=1; break; case 's' : id=2; break; case 'a' : id=3; break; case 'd' : id=4; break; case 'x' : gameover=1; break; } } } void logic() { now_x+=dx[id]; now_y+=dy[id]; if (now_x<1 || now_x>ht || now_y<1 || now_y>wt) { gameover=1; return; } if (now_x==fruit_x && now_y==fruit_y) { got_it=1; fruit_x=rand()%ht+1,fruit_y=rand()%wt+1; score+=10; } else got_it=0; } void init() { srand((unsigned)time(0)); ht=20; wt=20; gameover=score=0; fruit_x=rand()%ht+1,fruit_y=rand()%wt+1; now_x=rand()%ht+1; now_y=rand()%wt+1; } int main() { init(); while (!gameover) { draw(); input(); logic(); } return 0; } ```