近期没事翻了一下曾经写的程序。真是不堪入目。曾经真是什么都不懂。只是有一个程序倒是挺有意思的,大二的时候写的一个贪吃蛇游戏。尽管程序非常难看,还有非常多漏洞。但也是这个程序让我真正開始喜欢上了编程。不多说啦。先看看代码。

  1. #include<iostream>
  2. #include<windows.h>
  3. #include<ctime>
  4. #include<cstdlib>
  5. #include<conio.h>
  6. using namespace std;
  7. int n ; //墙的大小,写在这里为了好控制
  8. int foods[2];//食物的横纵坐标
  9. int m=1; //控制速度
  10. void gotoxy(int x,int y)//位置函数,输入坐标后。光标会移动到那个位置以便进行输出
  11. {
  12. COORD pos ;
  13. pos.X=2*x; //由于以下输出的图形都占两个位置
  14. pos.Y=y;
  15. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);//光标控制的位置
  16. }
  17. void color(int a)//颜色函数
  18. {
  19.  
  20. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);//这样就仅仅有一个參数啦
  21. }
  22. void init(){ //初始化墙
  23.  
  24. for(int i=0;i<=n;i++)
  25. for(int j=0;j<=n;j++){
  26. gotoxy(i ,j);
  27. if(i==0||i==n||j==0||j==n){
  28. gotoxy(i ,j);
  29. color(10);
  30. cout<<"■";}//围墙
  31. else {
  32. gotoxy(i ,j);
  33. color(3);
  34. cout<<"□" ; }//能够玩的区域
  35.  
  36. }
  37. }
  38.  
  39. void guize(){
  40. gotoxy(5,8);
  41. color(2);
  42. cout<<"欢迎你玩这款很好玩的贪吃蛇游戏";
  43. gotoxy(5,9);
  44. color(2);
  45. cout<<"此游戏由吕仰铭制作。比較粗糙,请见谅";
  46. gotoxy(n+1,1);
  47. color(12);
  48. cout<<"请按 w,s,a,d 来控制方向";
  49. gotoxy(n+1,2);
  50. color(12);
  51. cout<<"请按空格键暂停";
  52. gotoxy(n+1,3);
  53. color(12);
  54. cout<<"your score:";
  55. Sleep(2000);
  56. gotoxy(5,8);
  57. color(2);
  58. cout<<" ";
  59. gotoxy(5,9);
  60. color(2);
  61. cout<<" ";
  62.  
  63. }
  64.  
  65. void food(){ //果实的生成。用时间做变量
  66. srand((unsigned)time(NULL));
  67. foods[0]=rand()%(n-1)+1;//果实横坐标
  68. foods[1]=rand()%(n-1)+1;//果实的纵坐标
  69.  
  70. }
  71. int main(){
  72. char again='r';
  73.  
  74. while(again=='r'){
  75. int err =0 ; //输入必须正确的推断
  76. do{
  77. err++;
  78. if(err>1){
  79. gotoxy(0,0);
  80. cout<<"你输入的范围不正确,请又一次输入";
  81. Sleep(500);
  82. }
  83.  
  84. gotoxy(0,0);
  85.  
  86. cout<<"请设置围墙的宽度,范围是10—25,按enter键确定:";
  87. cin>>n;
  88.  
  89. gotoxy(0,1);
  90.  
  91. cout<<"请设置难度,1-简单 2—中 3—难。按enter键确定:";
  92. cin>>m;
  93. gotoxy(0,0);
  94. cout<<" ";
  95. gotoxy(0,1);
  96. Sleep(200);
  97. cout<<" ";
  98. }
  99. while(n<=9||n>=26||m<=0||m>=4);
  100.  
  101. int ** snake=NULL;//定义一条蛇,用来控制蛇的移动坐标
  102. int score=0;
  103. int tail[2]; //尾巴的横纵坐标
  104. int len=3; //初始蛇的长度
  105. char ch='p'; //用来控制方向的參数
  106. char sh='p'; //用来抑制蛇的反方向移动
  107. int yw=1; //用来推断是否咬到自己
  108. int count=1; //控制关卡
  109. guize();
  110.  
  111. init();//墙
  112. snake=(int**)realloc(snake,4*len);//为snake申请len长度的4个字节的空间
  113. for (int i=0;i<len;i++)
  114. snake[i]=new int[2];
  115. for(i=0;i<len;i++)
  116. {
  117. snake[i][0]=n/2;
  118. snake[i][1]=n/2+i;
  119. gotoxy(snake[i][0],snake[i][1]);
  120. color(14);
  121. cout<<"★"<<endl;//用★来构成蛇的组成部分
  122. } //这样就形成了一条长度为3的蛇
  123.  
  124. s1: food(); //生成一个果实
  125. for(i=len-1;i>=0;i--)
  126. if(foods[0]==snake[i][0]&&foods[1]==snake[i][1]) //防止果实长在蛇身上
  127. goto s1;
  128. gotoxy(foods[0],foods[1]);
  129. color(4);
  130. cout<<"●"<<endl;
  131. int zt=0; //用来暂停
  132. while(1)//正式进入游戏阶段
  133. {
  134. tail[0]=snake[len-1][0];//尾巴的横坐标
  135. tail[1]=snake[len-1][1];//尾巴的纵坐标
  136. gotoxy(tail[0],tail[1]);
  137. color(3);
  138. cout<<"□" ;
  139. gotoxy(0,4);
  140. color(10);
  141. cout<<"■";
  142. if(ch!=' ' ){
  143. for(i=len-1;i>0;i--)
  144. {
  145. snake[i][0]=snake[i-1][0];
  146. snake[i][1]=snake[i-1][1];
  147. gotoxy(snake[i][0],snake[i][1]);
  148. color(14);
  149. cout<<"★"<<endl; //前面的一节被后面的一节取代
  150. }
  151. }
  152.  
  153. if(kbhit()) //推断是否有按键按下
  154. {
  155. gotoxy(0,n+2);
  156. ch=getch();
  157. }
  158. if((sh=='a'&&ch=='d')||(sh=='d'&&ch=='a')||(sh=='w'&&ch=='s')||(sh=='s'&&ch=='w')||(ch!='a'&&ch!='w'&&ch!='d'&&ch!='s'&&ch!=' '))
  159. ch=sh; //抑制蛇反向移动
  160. switch(ch) //移动方向
  161. {
  162. case 'w':snake[0][1]--;break;
  163. case 's':snake[0][1]++;break;
  164. case 'a':snake[0][0]--;break;
  165. case 'd':snake[0][0]++;break;
  166. case ' ':break; //按下空格键暂停
  167. }
  168. sh=ch;
  169.  
  170. gotoxy(snake[0][0],snake[0][1]);
  171. color(14);
  172. cout<<"★"<<endl;
  173. Sleep(abs(300/m-0.1*score-5*count));//依据分数的添加会越来越快
  174.  
  175. if(snake[0][0]==foods[0]&&snake[0][1]==foods[1])//吃掉苹果后蛇分数加1。蛇长加1
  176. {
  177. score+=5; //吃掉果实后分数也对应的添加
  178. len++;
  179. snake=(int**)realloc(snake,4*len);//为snake新申请len长度的4个字节的空间。由于len已经变化
  180. snake[len-1]=new int[2];
  181.  
  182. s2: food(); //生成新的果实
  183. for(i=len-1;i>=0;i--)
  184. if(foods[0]==snake[i][0]&&foods[1]==snake[i][1]) //防止果实长在蛇身上
  185. goto s2;
  186.  
  187. gotoxy(foods[0],foods[1]);
  188. color(4);
  189. cout<<"●"<<endl;
  190.  
  191. gotoxy(n+7,3);
  192. color(12);
  193. cout<<score<<endl;
  194.  
  195. if(score%50==0)
  196. count++;
  197. color(2*count);
  198. gotoxy(n+2,4);
  199. cout<<"第"<<count<<"关 ";
  200. }
  201. yw=1;
  202. for(i=1;i<len;i++)
  203.  
  204. if(score>=5&&snake[i][1]==snake[0][1]&&snake[i][0]==snake[0][0])//咬到自己
  205. yw=0;
  206.  
  207. if(ch==' ')
  208. zt=score;
  209. if((yw==0&&score>zt)||snake[0][1]==0||snake[0][1]==n||snake[0][0]==0||snake[0][0]==n)//咬到自己或撞到围墙后失败
  210. {
  211. gotoxy(1,n/2);
  212. color(30);
  213. if(score<100)
  214. cout<<"这么快死,真失败。。要加油啊,菜鸟级别"<<endl;
  215. else if(score<200)
  216. cout<<"玩的还不错嘛。继续努力,高手级别"<<endl;
  217. else
  218. cout<<"玩的这么好,简直就是大神级别"<<endl;
  219.  
  220. delete []snake;
  221. Sleep(600);
  222. goto s;
  223.  
  224. }
  225.  
  226. }
  227. s: for(i=0;i<=n;i++)
  228. for(int j=0;j<=n;j++){
  229. gotoxy(i ,j);
  230. cout<<" ";}
  231. gotoxy(1,n/2+1);
  232. color(12);
  233. cout<<"按r键重来。其它键取消:";
  234. gotoxy(13,n/2+1);
  235. color(12);
  236. cin>>again;
  237. system("cls");
  238.  
  239. }
  240.  
  241. return 0;
  242. }

结果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWxvcF9kYW95YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

能够看到。功能是实现了,并且我自己认为还挺好玩的。可是这个程序有几个明显的缺陷:

1.代码实在太丑,各种不正确齐,我自己如今看都认为有点吃力。

2.这个程序仅仅能在visual c++6.0下才干正确执行,其它环境下可能会出现重定义和没有定义等错误。细致看我写的for循环应该就知道怎么回事了

3,好多goto啊,c++本来是要避免goto的,但曾经就是认为好用,并且没认为有什么不妥!

唉,想想曾经的自己是多么的无知啊,只是有位名人不是说过嘛,生活就是不断发现曾经的自己是一个SB的过程,尽管不知道谁说的,只是我想学习也是如此!

贪吃蛇c++实现的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  2. 用C++实现的贪吃蛇游戏

    我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...

  3. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  4. JavaScript-简单的贪吃蛇小游戏

    实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...

  5. juery实现贪吃蛇的游戏

    今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...

  6. HTML 5 背离贪吃蛇 写成了类似于屏幕校准

    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...

  7. 控制台游戏引擎CGE——贪吃蛇

    今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...

  8. 原生JS制作贪吃蛇小游戏

    感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...

  9. 基于AT89C51单片机的贪吃蛇电子游戏(仿真)

    有关贪吃蛇的历史发展可以看一下这个网址,贪吃蛇最初的设计和现在并不相同..http://www.techweb.com.cn/internet/2013-02-21/1278055.shtml 该项目 ...

  10. 小菜学习Winform(一)贪吃蛇2

    前言 上一篇<小菜学习Winform(一)贪吃蛇>中实现了简单版的贪吃蛇,在文章末也提到需要优化的地方,比如使用oo.得分模式.速度加快模式和减少界面重绘.因为是优化篇,实现方式上一篇有, ...

随机推荐

  1. ThinkPHP3.2.3扩展之自动分词获取关键字

    ThinkPHP自动获取关键词调用在线discuz词库 先按照下图路径放好插件 /** * 自动获取关键词(调用第三方插件) * @return [type] [description] * www. ...

  2. 2013 ACM/ICPC Asia Regional Changsha Online - J

    原题戳这里. 题意: 有一未知列数a1,a2,a3.....an, 已知s[i]=a[i-1]+a[i]+a[i]  (1<i<n) s[1]=a[1]+a[2]; s[n]=a[n-1] ...

  3. 20小时掌握网站开发(免费精品htmlcss视频教程)

    自己最近研发了一套新的htmlcss教程,并进行了授课实施,视频教程百度云下载链接如下: 视频及案例源码下载地址 本套教程视频需要安装屏幕录像专家软件才能观看,屏幕录像专家下载地址如下: 屏幕录像专家 ...

  4. python--1、入门

    python的创始人为吉多·范罗苏姆(Guido van Rossum). python在2017年统计的所有语言排名中处于第四名,稳步上升状态. python应用领域: WEB开发(Django框架 ...

  5. Leetcode0100--Same Tree 相同树

    [转载请注明]http://www.cnblogs.com/igoslly/p/8707664.html 来看一下题目: Given two binary trees, write a functio ...

  6. Android高亮TextView

    HighlightTextView Android文本高亮控件,基于View实现. 特点 文本高亮 单词自动换行 高亮词组保持在同一行显示 截图 Demo Java: public class Mai ...

  7. 学习廖雪峰的Python教程之第一个Python程序

    一.命令行模式和Python交互模式的区分 命令行模式: Python交互模式 二.文本编辑器 1.绝对不能用Word和Windows自带的记事本.Word保存的不是纯文本文件,而记事本会自作聪明地在 ...

  8. (转)基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理

    http://www.cnblogs.com/wuhuacong/p/4777720.html 在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能 ...

  9. 分块编码(Transfer-Encoding: chunked)VS Content-length

    参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 https://www.cnblogs.com/xuehaoyue/p/6639029.html 一.背景: 持续连接 ...

  10. BZOJ [POI2004]PRZ 状压DP_二进制_骚操作

    二进制就是比谁更sao... Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in"," ...