当前位置:   article > 正文

【C语言】贪吃蛇游戏的实现(一)_c语言 贪吃蛇

c语言 贪吃蛇

(注意:本代码是在VC++6.0环境下编译的,在其他环境如codeblocks下运行可能会产生意想不到的问题,请尽量使用VC。至于为什么要使用VC编译,哦,我亲爱的朋友,这只有上帝才知道)

最近由于小创需要,捣鼓了一个贪吃蛇游戏,系统由纯C语言开发,VC++6.0编译通过,具体的运行效果如下:

略显简陋的开始界面,图案是我一点一点拼的,因为有\需要转义,所以对齐也花了不少时间,足够繁杂和无聊的工作。

游戏界面如图所示,左侧方框是地图,菱形组成的线是蛇,红色圆点是食物,吃到加分。

游戏结束界面可以选择再来一局或者退出。

系统源码链接:https://download.csdn.net/download/includei/10878930

GitHubhttps://github.com/testAccount1024/snake

为了给以后自己留个参考,记录心得体会,也希望能对做相同项目的人有所帮助或启发,我把这个游戏的开发过程整理成博客发布,陆续更新,不足之处恳请批评斧正。

 

好了,让我们进入正题。

贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长。它的基本规则是:一条蛇出现在封闭空间中,空间中随机出现一个食物,通过键盘上下左右方向键控制蛇前进方向。蛇头撞到食物,食物消失,蛇身体增长一节,累计得分,刷新食物。如果蛇在前进过程中撞到墙或自己身体,则游戏失败。

我们可以简单地画出游戏的大概流程图:

贪吃蛇游戏分为四个界面,包括欢迎界面,游戏界面,游戏说明和游戏结束界面。实现的主要功能有:

1.字符图案装饰。
           2.绘制游戏地图。
           3.绘制移动的贪吃蛇。
           4.随机绘制食物并且位置不与当前蛇身体重合。
           5.键盘按键控制蛇的前进方向。
           6.不按键时,蛇自动前进。
           7.文件读写,存入和读取最高分。

我们列出为实现各个模块功能所需要的函数:

暂且省略定义,下面依次介绍各个函数的功能,首先说明欢迎界面的函数,因为游戏说明界面其实只是打印字符较为简单,我们也一并列出。为了在窗口内合适位置打印字符,我们需要控制光标的位置,声明gotoxy()函数以实现设置光标位置。

  1. /*
  2. 设置光标位置
  3. */
  4. void gotoxy(int x,int y)
  5. {
  6. COORD c;
  7. c.X=x;
  8. c.Y=y;
  9. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
  10. }

为了让显示的文字色彩多样,我们声明color()函数用于改变文字颜色。

  1. /*
  2. 文字颜色函数
  3. */
  4. int color(int c)
  5. {
  6. //SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数
  7. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
  8. return 0;
  9. }

接着声明printsnake()函数用于打印欢迎界面的字符装饰,color(2)设置文字颜色为绿色。

  1. /*
  2. 字符拼成英文图案
  3. */
  4. void printsnake()
  5. {
  6. color(2);
  7. printf(" \n");
  8. printf(" __________ ___ \n");
  9. printf(" / \\ / \\ \\ |____ __\\__ \n");
  10. printf(" / ________ \\ / ___ \\ _/ __ | | / \n");
  11. printf(" | | |__| _/_ |_| / [|] |/ \n");
  12. printf(" | | | | | / _|_ \\__/ \n");
  13. printf(" \\ \\_______ / \\ |___/ ____ \n");
  14. printf(" \\ \\ ____ ____ ____ __ | | ___ ______ \n");
  15. printf(" \\_______ \\ | |/ \\ / \\_/ / | | / / / \\ \n");
  16. printf(" \\ \\ | ___ \\ / ____ / | |/ / / ____ \\ \n");
  17. printf(" __ | | | / \\ \\ | | | / | / | /____\\ | \n");
  18. printf(" \\ \\_______| | | | | | | |__| | | \\ | ________/ \n");
  19. printf(" \\ / | | | | \\ \\ | |\\ \\ \\ \\____ \n");
  20. printf(" \\__________/ |__| |__| \\___/\\__\\ |__| \\__\\ \\______/ \n");
  21. }

然后我们声明welcometogame()函数绘制菜单选项并通过switch实现选择功能。

  1. /*
  2. 开始界面
  3. */
  4. void welcometogame()
  5. {
  6. int n;
  7. int i,j = 1;
  8. gotoxy(43,18);
  9. color(11);
  10. printf("贪 吃 蛇 游 戏");
  11. color(14); //黄色边框
  12. for (i = 20; i <= 26; i++) //输出上下边框┅
  13. {
  14. for (j = 27; j <= 74; j++) //输出左右边框┇
  15. {
  16. gotoxy(j, i);
  17. if (i == 20 || i == 26)
  18. {
  19. printf("-");
  20. }
  21. else if (j == 27 || j == 74)
  22. {
  23. printf("|");
  24. }
  25. }
  26. }
  27. color(10);
  28. gotoxy(35, 22);
  29. printf("1.开始游戏");
  30. gotoxy(55, 22);
  31. printf("2.游戏说明");
  32. gotoxy(35, 24);
  33. printf("3.退出游戏");
  34. gotoxy(29,27);
  35. color(3);
  36. printf("请选择[1 2 3]:[ ]\b\b"); //\b为退格,使得光标处于[]中间
  37. color(14);
  38. scanf("%d", &n); //输入选项
  39. switch (n)
  40. {
  41. case 1: //选择开始游戏
  42. system("cls");
  43. createMap(); //创建地图
  44. initsnake(); //初始化蛇身
  45. createfood(); //初始化食物
  46. keyboardControl(); //控制键盘按钮
  47. break;
  48. case 2: //选择游戏说明
  49. explation();
  50. break;
  51. case 3: //选择退出游戏
  52. exit(0); //退出游戏
  53. break;
  54. default: //输入非1~3之间的选项
  55. color(12);
  56. gotoxy(40,28);
  57. printf("请输入1~3之间的数!");
  58. getch(); //输入任意键
  59. system("cls"); //清屏
  60. printsnake();
  61. welcometogame();
  62. }
  63. }

游戏说明界面explation()函数实现打印说明文字的功能。

  1. /*
  2. 游戏说明
  3. */
  4. void explation()
  5. {
  6. int i,j = 1;
  7. system("cls");
  8. color(15);
  9. gotoxy(44,3);
  10. printf("游戏说明");
  11. color(2);
  12. for (i = 6; i <= 22; i++) //输出上下边框===
  13. {
  14. for (j = 20; j <= 76; j++) //输出左右边框||
  15. {
  16. gotoxy(j, i);
  17. if (i == 6 || i == 22) printf("=");
  18. else if (j == 20 || j == 75) printf("||");
  19. }
  20. }
  21. color(3);
  22. gotoxy(30,8);
  23. printf("tip1: 不能撞墙,不能咬到自己");
  24. color(10);
  25. gotoxy(30,11);
  26. printf("tip2: 用↑.↓.←.→分别控制蛇的移动");
  27. color(14);
  28. gotoxy(30,14);
  29. printf("tip3: F1 为加速,F2 为减速");
  30. color(11);
  31. gotoxy(30,17);
  32. printf("tip4: 按空格键暂停游戏,再按空格键继续");
  33. color(4);
  34. gotoxy(30,20);
  35. printf("tip5: Esc :退出游戏");
  36. getch(); //按任意键返回主界面
  37. system("cls");
  38. printsnake();
  39. welcometogame();
  40. }

以上便是欢迎界面和游戏说明界面的函数介绍,下一部分内容有空的时候继续更新(最后让我吐槽一下富文本编辑器这谜一样的代码对齐方式)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/493561
推荐阅读
相关标签
  

闽ICP备14008679号