鱼C论坛

 找回密码
 立即注册
查看: 4258|回复: 18

[作品展示] 作品:C++的贪吃蛇(幽灵切割版,回复3鱼币)

[复制链接]
发表于 2022-8-16 12:15:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 高山 于 2022-9-18 18:02 编辑

说明
本帖子需要自定义color函数,定义方法请见https://fishc.com.cn/thread-216662-1-1.html完整版不需要加任何代码),本帖为付费贴,内容自带敌人幽灵切割,回复(一共奖励一次)有70%几率全额退回鱼币
奖励版(购买后在第七版块也会显示)
名称/项目昵称查看传送门   
中奖回帖(仅1次,70%的中奖率)一点点儿点此
最佳回帖(置顶展示的回帖)一点点儿点此

1、作品介绍
贪吃蛇是一款经典的游戏,本创作在保留原有功能下,创作了幽灵
幽灵(符号为)会跟踪贪吃蛇(注意分清蛇与幽灵),被幽灵抓到即为结束游戏。贪吃蛇吃一个食物(符号为)加一分,速度也会变快。
2、收费说明
本帖为付费贴,某个回复人(仅一次)有70%几率把作品查看费完全打回,下面的代码块和非完整版代码是一样的,非完整版降价免费,完整版附件收费降至1鱼币鱼币。
如果不想自己加代码,请到文末下载完整版
3、非完整版代码(代码块和非完整版的代码是一样的,color定义链接在上方或往下看)
  1. #include<windows.h>
  2. #include<bits/stdc++.h>
  3. using namespace std; //命名空间
  4. void gotoxy(intvoid gotoxy(int x, int y) {
  5.     COORD pos = { x,y };
  6.     HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
  7.     SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
  8. }
  9. void start(){
  10. char ans;
  11. color(2);//设置颜色
  12. gotoxy(12,10);//将光标移至坐标为(12,10)的位置
  13. cout<<"★贪 吃 蛇★";//输出提示语
  14. gotoxy(12,12);
  15. cout<<"开始请输入y:";
  16. cin>>ans;
  17. if(ans!='y'){
  18. exit(0);
  19. }
  20. }

  21. int map_x=31,map_y=25;
  22. void nav(){
  23. color(6);
  24. for(int i=0;i<=map_x;i++){
  25. Sleep(10);//等待10ms
  26. gotoxy(i,map_y);
  27. cout<<"□";
  28. gotoxy(i,0);
  29. cout<<"□";
  30. }        
  31. for(int i=0;i<=map_y;i++){
  32. gotoxy(0,i);
  33. cout<<"□";
  34. gotoxy(map_x,i);
  35. cout<<"□";
  36. }
  37. color(15);
  38. /*for(int i=1;i<=29;i++){//一列一列输出
  39. for(int j=1;j<=23;j++){
  40. Sleep(10);
  41. gotoxy(i,j);
  42. cout<<"■";
  43. }
  44. } */
  45. for(int i=1;i<=map_y-1;i++){//一行一行输出
  46. for(int j=1;j<=map_x-1;j++){
  47. //Sleep(10);
  48. gotoxy(j,i);
  49. cout<<"■";
  50. }
  51. }
  52. }


  53. int snake_x[50],snake_y[50],snake_len;
  54. void snake_coor(){
  55. srand(time(0));        
  56. snake_x[0] = rand()%(map_x-1)+1;
  57. snake_y[0] = rand()%(map_y-1)+1;
  58. snake_len = 1;
  59. for(int i=1;i<snake_len;i++){
  60. snake_x[i]=snake_x[0]-i;
  61. snake_y[i]=snake_y[0];
  62. }
  63. }

  64. void draw_snake(){//通过循环的方式画蛇头以及蛇身
  65. color(5);
  66. for(int i=0;i<snake_len;i++){
  67. gotoxy(snake_x[i],snake_y[i]);
  68. if(i==0)
  69. cout<<"×";
  70. else
  71. cout<<"●";
  72. }
  73. //exit(0);
  74. }

  75. int food_x,food_y;
  76. void food_coor(){
  77. bool same=false;//食物跟蛇是否发生了重合,如果重合了,那么same就是true,否则是false
  78. while(true){//无限循环地生成食物的坐标,直到食物跟蛇补充和为止
  79. food_x = rand()%(map_x-1)+ 1;
  80. food_y = rand()%(map_y-1) + 1;
  81. //检测食物是否跟蛇发生了重合,如果有.则重新生成食物的坐标
  82. for(int i=0;i<snake_len;i++){
  83. if(snake_x[i]==food_x&&snake_y[i]==food_y)
  84. same=true;
  85. }
  86. if(same==false)//same为false,代表蛇没有跟食物发生重合,可以退出循环了
  87. break; //退出无限循环
  88. same=false;        
  89. }
  90. }

  91. void draw_food(){
  92. color(4);
  93. gotoxy(food_x,food_y);
  94. cout<<"◆";
  95. }

  96. int ghost_x,ghost_y;
  97. void ghost_coor(){
  98. bool same=false;//幽灵跟食物跟蛇是否发生了重合,如果重合了,那么same就是true,否则是false
  99. while(true){//无限循环地生成食物的坐标,直到食物跟蛇补充和为止
  100. ghost_x = rand()%(map_x-1)+ 1;
  101. ghost_y = rand()%(map_y-1) + 1;
  102. //检测食物是否跟蛇发生了重合,如果有.则重新生成食物的坐标
  103. for(int i=0;i<snake_len;i++){
  104. if(snake_x[i]==ghost_x&&snake_y[i]==ghost_y)
  105. same=true;
  106. }
  107. if(same==false)//same为false,代表蛇没有跟食物发生重合,可以退出循环了
  108. break; //退出无限循环
  109. same=false;        
  110. }
  111. }

  112. void draw_ghost(){
  113. color(4);
  114. gotoxy(ghost_x,ghost_y);
  115. cout<<"▲";
  116. }

  117. void draw_score(){
  118. color(4);
  119. gotoxy(0,map_y+1);
  120. cout<<"长度为:"<<snake_len;
  121. }

  122. void draw_blank(){//画地图,把旧的蛇覆盖 ,把旧星星覆盖
  123. color(15);
  124. for(int i=0;i<snake_len;i++){
  125. gotoxy(snake_x[i],snake_y[i]);
  126. cout<<"■";
  127. }
  128. gotoxy(ghost_x,ghost_y);
  129. cout<<"■";        
  130. }
  131. char dir='R';//direction方向 ,R--right,L--left,U--up,D--down
  132. void snake_move(){//根据当前的方向移动一步
  133. draw_blank();//覆盖蛇的旧位置
  134. for(int i=snake_len-1;i>=1;i--){
  135. snake_x[i]=snake_x[i-1];
  136. snake_y[i]=snake_y[i-1];
  137. }
  138. if(dir=='U'){
  139. snake_y[0]--;
  140. }
  141. else if(dir=='D'){
  142. snake_y[0]++;
  143. }
  144. else if(dir=='L'){
  145. snake_x[0]--;
  146. }
  147. else if(dir=='R'){
  148. snake_x[0]++;
  149. }        
  150. }

  151. bool ghost_flag=false;
  152. void ghost_move(){//幽灵向着蛇移动一步
  153. ghost_flag=!ghost_flag;
  154. if(ghost_flag)
  155. return;
  156. if(snake_x[0]>ghost_x)
  157. ghost_x++;
  158. else if(snake_x[0]<ghost_x)
  159. ghost_x--;
  160. else if(snake_y[0]>ghost_y)
  161. ghost_y++;
  162. else if(snake_y[0]<ghost_y)
  163. ghost_y--;
  164. }

  165. void detect_eat(){//检测是否吃到了食物
  166. if(snake_x[0]==food_x && snake_y[0]==food_y){
  167. snake_x[snake_len]=snake_x[snake_len-1]*2-snake_x[snake_len-2];
  168. snake_y[snake_len]=snake_y[snake_len-1]*2-snake_y[snake_len-2];
  169. snake_len++;
  170. food_coor();//吃到了,就再随机生成一个食物的新坐标
  171. draw_food();//画一下食物
  172. draw_score();//重新画上更新后的分数
  173. }
  174. }

  175. void detect_cut(){//检测是否碰到了幽灵
  176. for(int i=1;i<snake_len;i++)
  177. if(snake_x[i]==ghost_x&&snake_y[i]==ghost_y){
  178. snake_len=i;
  179. return;
  180. }
  181. }

  182. void detect_failure(){//检测撞墙以及撞自己的情况是否发生
  183. //蛇头撞在了上边界,意味着y是0;蛇头撞到了下边界,意味着y是map_y
  184. //蛇头撞在了左边界,意味着x是0;蛇头撞到了右边界,意味着x是map_x
  185. if(snake_y[0]==0||snake_y[0]==map_y||snake_x[0]==0||snake_x[0]==map_x){
  186. exit(0);
  187. }
  188. //撞到了自己,意味着蛇头撞到了蛇身,也就是蛇头的坐标与蛇身的某一个坐标发生了重合
  189. for(int i=1;i<snake_len;i++)
  190. if(snake_x[0]==snake_x[i]&&snake_y[0]==snake_y[i]){
  191. exit(0);
  192. }        
  193. if(snake_x[0]==ghost_x&&snake_y[0]==ghost_y)
  194. exit(0);
  195. }

  196. void detect_key(){//如果按下了键盘上的方向键,则更新贪吃蛇的方向
  197. if(kbhit()){//kbhit的功能是返回键盘上的按键,如果返回值为0,代表没按
  198. char key = getch();//获取在键盘上按下的按键
  199. if(key=='w')
  200. dir='U';
  201. else if(key=='s')
  202. dir='D';
  203. else if(key=='a')
  204. dir='L';
  205. else if(key=='d')
  206. dir='R';
  207. }
  208. }

  209. int main(){
  210. start();
  211. nav();
  212. snake_coor();//生成贪吃蛇的坐标
  213. draw_snake();
  214. food_coor();//生成食物的坐标
  215. draw_food();
  216. ghost_coor();//生成幽灵的坐标
  217. draw_ghost();
  218. draw_score();//画分数
  219. //让贪吃蛇一直移动
  220. //同时检测在某一个时刻是否按下了按键,如果有,则去更新方向
  221. while(true){//无限循环
  222. detect_key();//检测是否按下了按键
  223. snake_move(); //贪吃蛇沿着原来的方向移动一步
  224. ghost_move();//幽灵向着蛇移动
  225. detect_eat();//检测蛇是否吃到了食物
  226. detect_cut();//检测蛇身是否碰到了幽灵
  227. detect_failure();//检测蛇是否碰到了自己或者墙壁,导致失败
  228. draw_snake(); //画新位置的蛇
  229. draw_ghost(); //画新位置的幽灵
  230. draw_food(); //重新画食物
  231. Sleep(500/snake_len);//让游戏暂缓
  232. }
  233. return 0;
  234. }
复制代码

4、color定义方法
帖子
5、附件说明
压缩包为360压缩专用,请使用3.0以上的版本查看。
360压缩安装链接:&#9758;戳我
解压密码:fishc
普通版
贪吃蛇.zip (2.25 KB, 下载次数: 8)
完整版(不用另行添加,解压密码fishc):
贪吃蛇完整版.zip (2.54 KB, 下载次数: 49, 售价: 1 鱼币)
6、回复说明
7板块将会公示2种类型的回帖
中奖回帖:触发70%中奖的回帖
最佳回帖:最佳回复,将会置顶展示
7、回帖看板
快来回复吧!
名称/项目 昵称 查看传送门   
中奖回帖(仅1次,70%的中奖率) 一点点儿点此
最佳回帖(置顶展示的回帖)一点点儿点此
8、结语
感谢你看到这里,如果你有建议,欢迎跟我交流,我将会第一时间查看你的建议。
再次表示感谢!

别急着走~先评个分呗



本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-17 12:59:50 | 显示全部楼层

回帖奖励 +3 鱼币

感谢楼主分享!
向大佬学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-8-17 16:35:59 | 显示全部楼层
大佬厉害!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-18 16:23:23 | 显示全部楼层
哇哦哇哦哇哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-18 16:36:10 | 显示全部楼层
为什么第四行报错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 12:15:00 | 显示全部楼层
瞅一瞅学习下代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-28 13:14:47 | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-28 13:58:06 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-29 08:39:27 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-29 10:56:59 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-18 18:01:58 | 显示全部楼层
好冷清         
ding
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-28 20:17:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-29 00:08:26 | 显示全部楼层
厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-29 01:12:55 From FishC Mobile | 显示全部楼层
非常精炼的骨干。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-2 11:41:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-2 13:03:40 | 显示全部楼层
消息称
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-5 21:15:31 | 显示全部楼层
尘封已久的帖子。

考古

点评

考  发表于 2023-6-12 17:53
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 21:32:02 | 显示全部楼层
考古考古考古考古考古
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 05:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表