博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
控制台小游戏-贪吃蛇,c++和c#版
阅读量:7041 次
发布时间:2019-06-28

本文共 36558 字,大约阅读时间需要 121 分钟。

说是c++版,其实只是用到了c++的cout和cin而已。这是我做的第二个控制台游戏,基本上每一行代码都加上了注释。

游戏嘛,我觉得重要的是了解他的思想,所以后期学了面向对象之后这个游戏的代码我也没有重新封装。

下面请看图

 

 

代码如下:我是用dev c++写的

1 //注释。 ---星辰   2   3 #include 
4 #include
5 #include
6 #include
7 #include "conio.h"//非标准输入输出库函数 8 9 using namespace std; 10 11 12 const int UP=72;//上 13 const int DOWN=80;//下 14 const int LEFT=75;//左 15 const int RIGHT=77;//右 16 17 int n=4;//n用来记录蛇身长度,初始为2节 18 int guan;//用来记录关卡 19 int T;//用来给记录蛇的移动速度 20 int t1,t2,t3=0;//用来记录以用时间 21 int HP=5;//记录蛇的生命值,初始化为6 22 int food=0;//用来记录所吃到的食物数 23 int x=12,y=12;//记录食物所在地 24 25 struct snake 26 { 27 int x;//蛇身所在横坐标 28 int y;//蛇身所在纵坐标 29 int direction;//行走方向 30 }p[81]; 31 32 33 struct map 34 { 35 int food;//此map[x][y]处是否有食物有的话food为1 36 int star;//此map[x][y]处是否有星星的话值为1 37 int barrier;//此map[x][y]处是否有障碍物有的话值为1 38 }map[26][22]; 39 40 41 inline void c(int k)//改变输出字体的颜色 42 { 43 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), k); 44 } 45 46 inline int time()//用来计时 47 { 48 clock_t t=clock()/CLOCKS_PER_SEC;//记录当前程序已用时间 49 return t; 50 } 51 52 inline void gotoxy(int x,int y) //移动坐标 53 { 54 COORD coord; 55 coord.X=x; 56 coord.Y=y; 57 SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); 58 } 59 60 inline int random()//用来输出随机值 61 { 62 srand(t1+rand());//将随机数种子初始化 63 return rand();//返回随机数 64 } 65 66 void ycgb(int);//隐藏光标 67 void start();//绘制启动画面以及隔墙 68 void guanka();//用来选择关卡并根据关卡设置蛇的移动速度 69 void data();//用来记录游戏的各种状态数据 70 int game();//游戏运行 71 void show();//用来随机产生障碍物以及食物和生命药水以及用来判断游戏的各种参数(小星星是否吃到,是否撞墙) 72 void key();//用户是否操作键盘 73 void qp();//清除屏幕 74 75 76 int main() 77 { 78 ycgb(0);//隐藏光标 79 start();//绘制启动画面以及隔墙 80 while(1) 81 { 82 guanka();//用来选择关卡并根据关卡设置蛇的移动速度 83 ycgb(0);//隐藏光标 84 if(!game()) break;//游戏运行 85 } 86 } 87 88 void ycgb(int k)//隐藏光标 89 { 90 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); 91 CONSOLE_CURSOR_INFO cci; 92 GetConsoleCursorInfo(hOut,&cci); 93 cci.bVisible=k;//赋1为显示,赋0为隐藏 94 SetConsoleCursorInfo(hOut,&cci); 95 } 96 97 98 void start()//绘制墙/绘制启动画面以及隔墙 99 {100 int i,j,z;101 for(i=0;i<25;i++)102 {103 cout<<" ";104 }105 c(14);//调成红色106 for(z=0;z<20;z++)107 {108 if(z>=0)109 {110 gotoxy(12,z);111 cout<<" ~--______-~ ~-___-~\" "; 112 }113 if(z>=1)114 {115 gotoxy(12,z-1);116 cout<<" ~-_ _-~ ~-_ _-~ ";117 }118 if(z>=2)119 {120 gotoxy(12,z-2);121 cout<<" \\ ~-____-~ _-~ ~-_ ~-_-~ / ";122 }123 if(z>=3)124 {125 gotoxy(12,z-3);126 cout<<" ( ( _-~ _--_ ~-_ _/ | ";127 }128 if(z>=4)129 {130 gotoxy(12,z-4);131 cout<<" / / _-~ ~-_ | | "; 132 }133 if(z>=5)134 {135 gotoxy(12,z-5);136 cout<<" / / _----_ \\ \\ ";137 }138 if(z>=6)139 {140 gotoxy(12,z-6);141 cout<<" / / \\ \\ ";142 }143 if(z>=7)144 {145 gotoxy(12,z-7);146 cout<<" / / \\\\ ";147 }148 if(z>=8)149 {150 gotoxy(12,z-8);151 cout<<" / / \\\\ ";152 }153 if(z>=9)154 {155 gotoxy(12,z-9);156 cout<<" / / \\ ";157 }158 if(z>=10)159 {160 gotoxy(12,z-10);161 cout<<" | | \\ ";162 }163 if(z>=11)164 {165 gotoxy(12,z-11);166 cout<<" \\ \\ ";167 }168 if(z>=12)169 {170 gotoxy(12,z-12);171 cout<<" \\_______ \\ ";172 }173 if(z>=13)174 {175 gotoxy(12,z-13);176 cout<<" \\____|__________/ \\ "; 177 }178 if(z>=14)179 {180 gotoxy(12,z-14);181 cout<<"\\/ /~ \\_/ \\ ";182 }183 if(z>=15)184 {185 gotoxy(12,z-15);186 cout<<" _|__| O| ";187 }188 for(int k=15;k
20)206 { 207 gotoxy(2*(j-21),0);208 cout<<"▉";//输出第一行209 } 210 if(i<40)211 {212 gotoxy(2*i,23);213 cout<<"▉";// 输出最下面一行 214 } 215 if(j>22&&j<45)216 {217 gotoxy(78,j-22);218 cout<<"▇";//输出最右边列219 } 220 if(j>22&&j<45)221 {222 gotoxy(0,i-15);223 cout<<"▇";//输出第一列224 }225 if(i>37&&i<60)226 {227 gotoxy(54,i-37);228 Sleep(10);229 cout<<"▇";//输出中间那列230 } 231 Sleep(30);232 }233 gotoxy(56,11);234 cout<<"▉▉▉▉▉▉▉▉▉▉▉"; //56 235 gotoxy(19,0); 236 c(14);//调整输出颜色 237 cout<<"| | |贪 吃 蛇| | |";//输出标题 238 239 gotoxy(56,2);240 cout<<"已用时间:";241 gotoxy(75,2);242 cout<<"秒";243 gotoxy(56,4);244 cout<<"生命值:";245 gotoxy(56,6);246 cout<<"当前长度:";247 gotoxy(56,8);248 cout<<"已吃食物:";249 gotoxy(56,10);250 cout<<"第 关";251 gotoxy(64,12);252 cout<<"提示:";253 gotoxy(56,13);254 cout<<"向上:↑ 向上:←"; 255 gotoxy(56,14);256 cout<<"向下:↓ 向右:→";257 gotoxy(56,15);258 cout<<"暂停/开始:确定键 ";259 gotoxy(56,16);260 cout<<"重新选关 :Esc键";261 gotoxy(64,18);262 cout<<"注意!";263 gotoxy(56,19);264 cout<<"1:撞到障碍物或者墙生命";265 gotoxy(56,20);266 cout<<" 值减一 ";267 gotoxy(56,21);268 cout<<"2:吃到小星星生命值加一"; 269 }270 void guanka()//用来选择关卡并根据关卡设置蛇的移动速度271 {272 ycgb(1);//显示光标273 n=4;//n用来记录蛇身长度,初始为3节274 HP=6;//记录蛇的生命值,初始化为6275 p[0].x=6; //276 p[0].y=10; //277 p[0].direction=RIGHT; //278 p[1].x=4; //279 p[1].y=10; // 初始化蛇所在位置和移动方向 280 p[1].direction=RIGHT; //281 p[2].x=2; //282 p[2].y=10; //283 p[2].direction=RIGHT; //284 p[3].x=4;////285 p[3].y=4;///记录蛇尾的信息286 p[3].direction=RIGHT;////287 while(1)288 {289 gotoxy(15,3);290 cout<<"请输入关数(1-6):";291 cin>>guan;292 cin.get();293 if(guan==0) //判断是否作弊294 {295 gotoxy(15,3);296 c(12);//变成红色297 cout<<" 作弊有害智商,需谨慎";298 gotoxy(15,5);299 c(14);//变成黄色300 cout<<"请输入你想要的蛇的生命值:";301 cin>>HP;302 cin.get();303 gotoxy(15,3);304 cout<<" ";305 gotoxy(15,5);306 cout<<" ";307 continue;//返回选关处308 }309 if(guan<7&&guan>0) break;//判断关数是否溢出310 gotoxy(15,5);311 cout<<"输入错误!";312 gotoxy(32,3);313 cout<<" ";314 315 }316 gotoxy(15,3);317 cout<<" ";318 switch (guan)319 {320 case 1:{T=600;break;}//321 case 2:{T=400;break;}//322 case 3:{T=200;break;}// 根据关数来设定蛇的移动速度323 case 4:{T=150;break;}//324 case 5:{T=100;break;}//325 case 6:{T=60;break;}//326 }327 qp();//清除屏幕328 }329 void data()//用来记录和判断游戏的各种状态数据330 {331 gotoxy(66,2);332 c(12);//调成红色333 cout<
0&&t1%12==0&&t1>t3&&map[(p[0].x-1)/2][p[0].y-1].food==0&&map[(p[0].x-1)/2][p[0].y-1].star==0)470 {471 while(1)472 { 473 e=random()%26;//产生随机横坐标474 f=random()%22;//产生随机纵坐标475 if(map[e][f].food==0&&map[e][f].star==0) break;//当此处无其他元素是才生效 476 }477 gotoxy(2*(e+1),f+1);//定位到障碍物出现的位置478 map[e][f].barrier=1;//随机出现障碍物479 c(12);//调成黄色480 cout<<"▇";//打印出障碍物481 t3=t1;//以免产生多个障碍物482 if(HP<7)483 {484 gotoxy(18,24);485 c(15);//调成白色486 cout<<"温馨提示:在选关的时候输入0可以开启作弊模式";487 }488 }489 if(t1/25>0&&t1%15==0&&t1>t3&&map[(p[0].x-1)/2][p[0].y-1].food==0&&map[(p[0].x-1)/2][p[0].y-1].barrier==0)//减少星星出现的几率 490 {491 while(1)492 { 493 a=random()%26;//产生随机横坐标494 b=random()%22;//产生随机纵坐标495 if(map[a][b].barrier==0&&map[a][b].food==0) break;//当此处无其他元素是才生效 496 }497 map[a][b].star=1;//随机出现小星星(吃到星星长度减1)498 gotoxy(2*(a+1),b+1);//定位到星星出现的位置(吃到星星长度减1)499 c(14);//调成黄色500 cout<<"☆";//打印出星星(吃到星星长度减1)501 t3=t1;//以免产生多个障碍物502 if(HP<7)503 {504 gotoxy(18,24);505 cout<<" ";506 }507 }508 for(int i=0;i
0;i--) p[i]=p[i-1];//移动蛇591 key();//用户是否操作键盘592 switch (p[0].direction)593 {594 case UP:{p[0].y-=1;break;}//改变蛇头坐标,移动蛇头595 case DOWN:{p[0].y+=1;break;}//改变蛇头坐标,移动蛇头596 case LEFT:{p[0].x-=2;break;}//改变蛇头坐标,移动蛇头597 case RIGHT:{p[0].x+=2;break;}//改变蛇头坐标,移动蛇头598 }599 if(p[0].x==0)//当蛇撞到左墙时600 {601 cout<<"\a";602 --HP;//将生命值减一603 p[0].x=52;//将其穿墙604 }605 if(p[0].x==54)//当蛇撞到右墙时606 {607 cout<<"\a";608 --HP;//将生命值减一609 p[0].x=2;//将其穿墙610 }611 if(p[0].y==0)//当蛇撞到上墙时612 {613 cout<<"\a";614 --HP;//将生命值减一615 p[0].y=22;//将其穿墙616 }617 if(p[0].y==23)//当蛇撞到下墙时618 {619 cout<<"\a";620 --HP;//将生命值减一621 p[0].y=1;//将其穿墙622 }623 for(i=1;i
=n)//当蛇撞到自己628 {629 cout<<"\a";630 HP=0;//将蛇死亡 631 }632 if(map[(p[0].x-1)/2][p[0].y-1].barrier==1)//当蛇障碍物时633 {634 cout<<"\a";635 --HP;//将生命值减一636 map[(p[0].x-1)/2][p[0].y-1].barrier=0;637 }638 if(HP==0)639 {640 gotoxy(25,5);641 c(15);//调成白色642 cout<<"\a\a\a游戏结束!!!";643 Sleep(3000);//延时644 return 1;645 break;646 }647 if(n==81)648 {649 gotoxy(25,5);650 c(15);//调成白色651 cout<<"\a\a\a恭喜你过关!!!";652 Sleep(3000);//延时653 return 1;654 break;655 }656 show();//用来随机产生障碍物以及食物和生命药水以及用来判断游戏的各种参数(小星星是否吃到,是否撞墙)657 }658 return 0;659 }
显示代码

下面是c#版的,完全是从c++版的移植过来的,也就改了改界面颜色而已

下面看图:

 

其他就没有什么变化了,下面是代码

1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6 using System.Windows.Input;  7 using System.Threading;  8 using System.Runtime.InteropServices;  9  10 namespace ConsoleApplication3 11 { 12  13  14     class Game 15     { 16         public struct Snake 17         { 18             public int x;//蛇身所在横坐标 19             public int y;//蛇身所在纵坐标 20             public ConsoleKey direction;//行走方向 21         } 22  23         public struct Map 24         { 25             public int food;//此map[x][y]处是否有食物有的话food为1 26             public int star;//此map[x][y]处是否有星星的话值为1 27             public int barrier;//此map[x][y]处是否有障碍物有的话值为1 28         } 29  30         Thread readKeyThread; 31  32         Snake[] p = new Snake[81]; 33         Map[,] map = new Map[26, 22]; 34  35         const ConsoleKey UP = ConsoleKey.UpArrow;//上 36         const ConsoleKey DOWN = ConsoleKey.DownArrow;//下 37         const ConsoleKey LEFT = ConsoleKey.LeftArrow;//左 38         const ConsoleKey RIGHT = ConsoleKey.RightArrow;//右 39  40         int n = 4;//n用来记录蛇身长度,初始为2节 41         int guan;//用来记录关卡 42         int T;//用来给记录蛇的移动速度 43         int t1 = 0, t2 = 0, t3 = 0;//用来记录以用时间 44         int HP = 5;//记录蛇的生命值,初始化为6 45         int food = 0;//用来记录所吃到的食物数 46         int x = 12, y = 12;//记录食物所在地 47         bool pause = false;//记录是否暂停; 48  49         public void c(ConsoleColor k)//改变输出字体的颜色 50         { 51             Console.ForegroundColor = k; 52         } 53  54         public int time()//用来计时 55         { 56             DateTime dt = System.DateTime.Now;//记录当前程序已用时间 57             return dt.Second; 58         } 59  60         public void gotoxy(int x, int y) //移动坐标 61         { 62             Console.SetCursorPosition(x, y); 63         } 64  65         public int random()//用来输出随机值 66         { 67  68             Random rd = new Random(); 69             return rd.Next();//返回随机数 70         } 71  72         public void ycgb(bool k)//隐藏光标 73         { 74             Console.CursorVisible = k; //隐藏光标 75         } 76  77         public void Sleep(int s) 78         { 79             System.Threading.Thread.Sleep(s); 80         } 81  82         public void start()//绘制墙/绘制启动画面以及隔墙 83         { 84             readKeyThread = new Thread(new ThreadStart(key)); 85             c(ConsoleColor.Yellow);//改成黄色 86             int i, j, z; 87             for (i = 0; i < 25; i++) 88             { 89                 Console.Write("                                                                                "); 90             } 91             for (z = 0; z < 20; z++) 92             { 93                 if (z >= 0) 94                 { 95                     gotoxy(12, z); 96                     Console.Write("              ~--______-~                ~-___-~\"       "); 97                 } 98                 if (z >= 1) 99                 {100                     gotoxy(12, z - 1);101                     Console.Write("            ~-_           _-~          ~-_       _-~    ");102                 }103                 if (z >= 2)104                 {105                     gotoxy(12, z - 2);106                     Console.Write("          \\     ~-____-~     _-~    ~-_    ~-_-~    / ");107                 }108                 if (z >= 3)109                 {110                     gotoxy(12, z - 3);111                     Console.Write("         (     (         _-~    _--_    ~-_    _/   |  ");112                 }113                 if (z >= 4)114                 {115                     gotoxy(12, z - 4);116                     Console.Write("          /    /            _-~      ~-_        |   |  ");117                 }118                 if (z >= 5)119                 {120                     gotoxy(12, z - 5);121                     Console.Write("           /    /              _----_           \\  \\ ");122                 }123                 if (z >= 6)124                 {125                     gotoxy(12, z - 6);126                     Console.Write("             /    /                            \\ \\   ");127                 }128                 if (z >= 7)129                 {130                     gotoxy(12, z - 7);131                     Console.Write("              /    /                          \\\\     ");132                 }133                 if (z >= 8)134                 {135                     gotoxy(12, z - 8);136                     Console.Write("                /    /                      \\\\       ");137                 }138                 if (z >= 9)139                 {140                     gotoxy(12, z - 9);141                     Console.Write("                 /     /                   \\            ");142                 }143                 if (z >= 10)144                 {145                     gotoxy(12, z - 10);146                     Console.Write("                  |     |                \\                ");147                 }148                 if (z >= 11)149                 {150                     gotoxy(12, z - 11);151                     Console.Write("                 \\     \\                                 ");152                 }153                 if (z >= 12)154                 {155                     gotoxy(12, z - 12);156                     Console.Write("        \\_______      \\                                  ");157                 }158                 if (z >= 13)159                 {160                     gotoxy(12, z - 13);161                     Console.Write(" \\____|__________/  \\                                    ");162                 }163                 if (z >= 14)164                 {165                     gotoxy(12, z - 14);166                     Console.Write("\\/     /~     \\_/ \\                                     ");167                 }168                 if (z >= 15)169                 {170                     gotoxy(12, z - 15);171                     Console.Write("        _|__|  O|                                          ");172                 }173                 for (int k = 15; k < z; k++)174                 {175                     gotoxy(12, k - 15);176                     Console.Write("                                                           ");177                 }178                 Sleep(30);179             }180             Sleep(2000);181             c(ConsoleColor.Gray);//调成白色182             gotoxy(0, 0);183             for (i = 0; i < 25; i++)184             {185                 Console.Write("                                                                                ");186             }187             //c(252);//调整输出颜色 188             for (i = 0, j = 60; i < 60; i++, j--)//if是为了异步输出 189             {190                 if (j > 20)191                 {192                     gotoxy(2 * (j - 21), 0);193                     Console.Write("▉");//输出第一行194                 }195                 if (i < 40)196                 {197                     gotoxy(2 * i, 23);198                     Console.Write("▉");// 输出最下面一行 199                 }200                 if (j > 22 && j < 45)201                 {202                     gotoxy(78, j - 22);203                     Console.Write("▇");//输出最右边列204                 }205                 if (j > 22 && j < 45)206                 {207                     gotoxy(0, i - 15);208                     Console.Write("▇");//输出第一列209                 }210                 if (i > 37 && i < 60)211                 {212                     gotoxy(54, i - 37);213                     Sleep(10);214                     Console.Write("▇");//输出中间那列215                 }216                 Sleep(30);217             }218             gotoxy(56, 11);219             Console.Write("▉▉▉▉▉▉▉▉▉▉▉");                                            //56 220             gotoxy(19, 0);221             c(ConsoleColor.Red);//调整输出颜色 222             Console.Write("| | |贪 吃 蛇| | |");//输出标题 223 224             gotoxy(56, 2);225             Console.Write("已用时间:");226             gotoxy(75, 2);227             Console.Write("秒");228             gotoxy(56, 4);229             Console.Write("生命值:");230             gotoxy(56, 6);231             Console.Write("当前长度:");232             gotoxy(56, 8);233             Console.Write("已吃食物:");234             gotoxy(56, 10);235             Console.Write("第             关");236             gotoxy(64, 12);237             Console.Write("提示:");238             gotoxy(56, 13);239             Console.Write("向上:↑   向上:←");240             gotoxy(56, 14);241             Console.Write("向下:↓   向右:→");242             gotoxy(56, 15);243             Console.Write("暂停/开始:确定键 ");244             gotoxy(56, 16);245             Console.Write("重新选关 :Esc键");246             gotoxy(64, 18);247             Console.Write("注意!");248             gotoxy(56, 19);249             Console.Write("1:撞到障碍物或者墙生命");250             gotoxy(56, 20);251             Console.Write("  值减一 ");252             gotoxy(56, 21);253             Console.Write("2:吃到小星星生命值加一");254         }255 256         public void guanka()//用来选择关卡并根据关卡设置蛇的移动速度257         {258             ycgb(true);//显示光标259             n = 4;//n用来记录蛇身长度,初始为3节260             HP = 6;//记录蛇的生命值,初始化为6261 262             p[0].x = 6;                    //263             p[0].y = 10;                   //264             p[0].direction = RIGHT;        //265             p[1].x = 4;                   //266             p[1].y = 10;                  //     初始化蛇所在位置和移动方向   267             p[1].direction = RIGHT;       //268             p[2].x = 2;                   //269             p[2].y = 10;                  //270             p[2].direction = RIGHT;      //271             p[3].x = 4;////272             p[3].y = 4;///记录蛇尾的信息273             p[3].direction = RIGHT;////274             while (true)275             {276                 gotoxy(15, 3);277                 Console.Write("请输入关数(1-6):");278                 guan = Console.Read() - 48;279                 //Console.Write("关卡:{0}", guan);280                 if (guan == 0)     //判断是否作弊281                 {282                     gotoxy(15, 3);283                     c(ConsoleColor.Red);//变成红色284                     Console.Write("  作弊有害智商,需谨慎");285                     gotoxy(15, 5);286                     c(ConsoleColor.Yellow);//变成黄色287                     Console.Write("请输入你想要的蛇的生命值:");288                     HP = Console.Read(); ;289 290                     gotoxy(15, 3);291                     Console.Write("                      ");292                     gotoxy(15, 5);293                     Console.Write("                                    ");294                     continue;//返回选关处295                 }296                 if (guan < 7 && guan > 0) break;//判断关数是否溢出297                 gotoxy(15, 5);298                 Console.Write("输入错误!");299                 gotoxy(32, 3);300                 Console.Write("          ");301             }302             gotoxy(15, 3);303             Console.Write("                   ");304             switch (guan)305             {306                 case 1: { T = 600; break; }//307                 case 2: { T = 400; break; }//308                 case 3: { T = 200; break; }//    根据关数来设定蛇的移动速度309                 case 4: { T = 150; break; }//310                 case 5: { T = 100; break; }//311                 case 6: { T = 60; break; }//312             }313             qp();//清除屏幕314         }315 316         void data()//用来记录和判断游戏的各种状态数据317         {318             c(ConsoleColor.Red);//调成红色319             gotoxy(66, 2);320             Console.Write("{0}", t1);//程序已用时间321             switch (guan)322             {323                 case 1:324                     gotoxy(59, 10);325                     c(ConsoleColor.Red);//调成红色326                     Console.Write("1");327                     c(ConsoleColor.Yellow);//调成黄色328                     Console.Write(" 2 3 4 5 6");329                     break;330                 case 2:331                     gotoxy(59, 10);332                     c(ConsoleColor.Yellow);//调成黄色333                     Console.Write("1 ");334                     c(ConsoleColor.Red);//调成红色335                     Console.Write("2");336                     c(ConsoleColor.Yellow);//调成黄色337                     Console.Write(" 3 4 5 6 ");338                     break;339                 case 3:340                     gotoxy(59, 10);341                     c(ConsoleColor.Yellow);//调成黄色342                     Console.Write("1 2 ");343                     c(ConsoleColor.Red);//调成红色344                     Console.Write("3");345                     c(ConsoleColor.Yellow);//调成黄色346                     Console.Write(" 4 5 6 ");347                     break;348                 case 4:349                     gotoxy(59, 10);350                     c(ConsoleColor.Yellow);//调成黄色351                     Console.Write("1 2 3 ");352                     c(ConsoleColor.Red);//调成红色353                     Console.Write("4");354                     c(ConsoleColor.Yellow);//调成黄色355                     Console.Write(" 5 6 ");356                     break;357                 case 5:358                     gotoxy(59, 10);359                     c(ConsoleColor.Yellow);//调成黄色360                     Console.Write("1 2 3 4 ");361                     c(ConsoleColor.Red);//调成红色362                     Console.Write("5");363                     c(ConsoleColor.Yellow);//调成黄色364                     Console.Write(" 6 ");365                     break;366                 case 6:367                     gotoxy(59, 10);368                     c(ConsoleColor.Yellow);//调成黄色369                     Console.Write("1 2 3 4 5 ");370                     c(ConsoleColor.Red);//调成红色371                     Console.Write("6");372                     break;373             }374             switch (HP)375             {376                 case 1:377                     gotoxy(65, 4);378                     c(ConsoleColor.Green);//调成绿色379                     Console.Write("▁");380                     c(ConsoleColor.Red);//调成红色381                     Console.Write("▂▃▅▆▇");382                     break;383                 case 2:384                     gotoxy(65, 4);385                     c(ConsoleColor.Green);//调成绿色386                     Console.Write("▁▂");387                     c(ConsoleColor.Red);//调成红色388                     Console.Write("▃▅▆▇");389                     break;390                 case 3:391                     gotoxy(65, 4);392                     c(ConsoleColor.Green);//调成绿色393                     Console.Write("▁▂▃");394                     c(ConsoleColor.Red);//调成红色395                     Console.Write("▅▆▇");396                     break;397                 case 4:398                     gotoxy(65, 4);399                     c(ConsoleColor.Green);//调成绿色400                     Console.Write("▁▂▃▅");401                     c(ConsoleColor.Red);//调成红色402                     Console.Write("▆▇");403                     break;404                 case 5:405                     gotoxy(65, 4);406                     c(ConsoleColor.Green);//调成绿色407                     Console.Write("▁▂▃▅▆");408                     c(ConsoleColor.Red);//调成红色409                     Console.Write("▇");410                     break;411                 case 6:412                     gotoxy(65, 4);413                     c(ConsoleColor.Green);//调成绿色414                     Console.Write("▁▂▃▅▆▇");415                     break;416                 default:417                     gotoxy(65, 4);418                     c(ConsoleColor.Red);//调成红色419                     Console.Write("!超级模式 !");420                     break;421             }422             gotoxy(66, 6);423             c(ConsoleColor.Red);//调成红色424             Console.Write("{0}", n - 1);//输出蛇的当前长度425             gotoxy(66, 8);426             Console.Write("{0}", food);//输出蛇当前已经吃到食物427         }428         void qp()//用来清除屏幕429         {430             for (int i = 1; i < 23; i++)431             {432                 gotoxy(2, i);433                 Console.Write("                                                    ");434             }435             map[x, y].food = 0;//将食物清空436             map[x, y].barrier = 0;//将障碍物清除437             map[x, y].star = 0;//将星星清除 438         }439 440         void show()//用来随机产生障碍物以及食物和生命药水以及用来判断游戏的各种参数441         {442             int a, b, e, f; //a,b用来表示小星星的坐标   c,d代表障碍物坐标443             if (map[x, y].food == 0)//判断食物是不是被吃掉444             {445                 while (true)446                 {447                     x = random() % 26;//产生随机横坐标448                     y = random() % 22;//产生随机纵坐标449                     if (map[x, y].barrier == 0 && map[x, y].star == 0) break;//当此处无其他元素是才生效 450                 }451                 map[x, y].food = 1;//随机出现食物452                 gotoxy(2 * (x + 1), y + 1);//定位到食物出现的位置453                 c(ConsoleColor.Yellow);//调成黄色454                 Console.Write("●");//打印出食物455             }456             if (t1 / 20 > 0 && t1 % 12 == 0 && t1 > t3 && map[(p[0].x - 1) / 2, p[0].y - 1].food == 0 && map[(p[0].x - 1) / 2, p[0].y - 1].star == 0)457             {458                 while (true)459                 {460                     e = random() % 26;//产生随机横坐标461                     f = random() % 22;//产生随机纵坐标462                     if (map[e, f].food == 0 && map[e, f].star == 0) break;//当此处无其他元素是才生效 463                 }464                 gotoxy(2 * (e + 1), f + 1);//定位到障碍物出现的位置465                 map[e, f].barrier = 1;//随机出现障碍物466                 c(ConsoleColor.Yellow);//调成黄色467                 Console.Write("▇");//打印出障碍物468                 t3 = t1;//以免产生多个障碍物469                 if (HP < 7)470                 {471                     gotoxy(18, 24);472                     c(ConsoleColor.White);//调成白色473                     Console.Write("温馨提示:在选关的时候输入0可以开启作弊模式");474                 }475             }476             if (t1 / 25 > 0 && t1 % 15 == 0 && t1 > t3 && map[(p[0].x - 1) / 2, p[0].y - 1].food == 0 && map[(p[0].x - 1) / 2, p[0].y - 1].barrier == 0)//减少星星出现的几率 477             {478                 while (true)479                 {480                     a = random() % 26;//产生随机横坐标481                     b = random() % 22;//产生随机纵坐标482                     if (map[a, b].barrier == 0 && map[a, b].food == 0) break;//当此处无其他元素是才生效 483                 }484                 map[a, b].star = 1;//随机出现小星星(吃到星星长度减1)485                 gotoxy(2 * (a + 1), b + 1);//定位到星星出现的位置(吃到星星长度减1)486                 c(ConsoleColor.Red);//调成红色487                 Console.Write("☆");//打印出星星(吃到星星长度减1)488                 t3 = t1;//以免产生多个障碍物489                 if (HP < 7)490                 {491                     gotoxy(18, 24);492                     Console.Write("                                            ");493                 }494             }495             for (int i = 0; i < n; i++)496             {497                 if (map[(p[i].x - 1) / 2, p[i].y - 1].food == 1)//判断蛇是否吃到食物498                 {499                     ++n;//让蛇长度加1500                     food++;//将食物数加1501                     map[(p[i].x - 1) / 2, p[i].y - 1].food = 0;//让食物标示归零502                     break;503                 }504             }505             if (map[(p[0].x - 1) / 2, p[0].y - 1].star == 1)//判断蛇是否吃到星星506             {507                 map[(p[0].x - 1) / 2, p[0].y - 1].star = 0;//让星星标示归零508                 if (HP < 6)509                     ++HP;//将生命值加1510             }511             t1 = time() - t2;//刷新游戏运行时间512         }513 514         void key()//用户是否操作键盘515         {516             while (true)//判断是否按键517             {518                 ConsoleKey ch = Console.ReadKey().Key;519                 if (ch == ConsoleKey.Enter)//判断用户是否暂停520                 {521                     pause = true;522                     int a, b;523                     a = time();//记录当前程序已用时间524                     gotoxy(20, 1);525                     c(ConsoleColor.White);//调成白色526                     Console.Write("已暂停,按确定键开始");527                     while (true)528                     {529                         gotoxy(0, 24);//将光标设置到最后一行,防止用户乱输入数据530                         ConsoleKey temp = Console.ReadKey().Key;531                         if (temp == ConsoleKey.Enter)////判断是否按键且是否解除暂停532                         {533                             pause = false;534                             gotoxy(20, 1);535                             Console.Write("                     ");//清除"已暂停,按确定键开始"这行字                     536                             break;537                         }538                         else539                         {540                             gotoxy(Console.CursorLeft - 1, Console.CursorTop);//将位置移到用户输入的非正常数据541                             Console.Write(" ");//清除这个数据542                         }543                     }544                     b = time();//记录当前程序已用时间545                     t2 += (b - a);//将暂停加到t2上供t1减去546                 }547                 else if (ch == ConsoleKey.Escape)//判断是否重新选关548                 {549                     guanka();//用来选择关卡并根据关卡设置蛇的移动速度550                     game();//开始游戏        551                 }552                 else if ((ch == RIGHT || ch == LEFT || ch == DOWN || ch == UP) && ch != p[0].direction && (int)ch - 2 != (int)p[0].direction && (int)ch + 2 != (int)p[0].direction)  //判断按键是否是方向键,并且是不是蛇移动方向的反方向553                     p[0].direction = ch;//如果不是就改变蛇头方向554             }555         }556 557         public bool game()558         {559             readKeyThread.Start();//启动按键获取560 561             int i;562             //ConsoleKey ch = RIGHT;//向右563             t2 = time();//记录当前程序已用时间564             while (true)565             {566                 if (pause) continue;//如果暂停了567 568                 t1 = time() - t2;//刷新游戏运行时间569                 data();//用来记录游戏的各种状态数据570                 gotoxy(p[0].x, p[0].y);//转到蛇头位置571                 c(ConsoleColor.Yellow);//改成黄色572                 Console.Write("◆");//打印蛇头573                 for (i = 1; i < n - 1; i++)574                 {575                     gotoxy(p[i].x, p[i].y);//转到当前蛇身位置576                     c(ConsoleColor.Red);//改成红色577                     Console.Write("●");//打印蛇身578                 }579                 gotoxy(p[n - 2].x, p[n - 2].y);//转到当前蛇尾位置580                 c(ConsoleColor.Yellow);//改成红色581                 Console.Write("●");//打印蛇尾582                 Sleep(T);//控制蛇的移动速度583                 t1 = time() - t2;//刷新游戏运行时间584                 gotoxy(p[n - 2].x, p[n - 2].y);//移到蛇尾所在地585                 Console.Write(" ");//清除上个循环的蛇尾586                 for (i = n - 1; i > 0; i--) p[i] = p[i - 1];//移动蛇587                 switch (p[0].direction)588                 {589                     case UP: { p[0].y -= 1; break; }//改变蛇头坐标,移动蛇头590                     case DOWN: { p[0].y += 1; break; }//改变蛇头坐标,移动蛇头591                     case LEFT: { p[0].x -= 2; break; }//改变蛇头坐标,移动蛇头592                     case RIGHT: { p[0].x += 2; break; }//改变蛇头坐标,移动蛇头593                 }594                 if (p[0].x == 0)//当蛇撞到左墙时595                 {596                     Console.Write("\a");597                     --HP;//将生命值减一598                     p[0].x = 52;//将其穿墙599                 }600                 if (p[0].x == 54)//当蛇撞到右墙时601                 {602                     Console.Write("\a");603                     --HP;//将生命值减一604                     p[0].x = 2;//将其穿墙605                 }606                 if (p[0].y == 0)//当蛇撞到上墙时607                 {608                     Console.Write("\a");609                     --HP;//将生命值减一610                     p[0].y = 22;//将其穿墙611                 }612                 if (p[0].y == 23)//当蛇撞到下墙时613                 {614                     Console.Write("\a");615                     --HP;//将生命值减一616                     p[0].y = 1;//将其穿墙617                 }618                 for (i = 1; i < n - 1; i++)619                 {620                     if (p[0].x == p[i].x && p[0].y == p[i].y) i = n + 1;//判断蛇是否撞到自621                 }622                 if (i >= n)//当蛇撞到自己623                 {624                     Console.Write("\a");625                     HP = 0;//将蛇死亡  626                 }627                 if (map[(p[0].x - 1) / 2, p[0].y - 1].barrier == 1)//当蛇障碍物时628                 {629                     Console.Write("\a");630                     --HP;//将生命值减一631                     map[(p[0].x - 1) / 2, p[0].y - 1].barrier = 0;632                 }633                 if (HP == 0)634                 {635                     readKeyThread.Abort();//停止按键检测636                     gotoxy(25, 5);637                     c(ConsoleColor.White);//调成白色638                     Console.Write("\a\a\a游戏结束!!!");639                     Sleep(3000);//延时640                     return true;641                 }642                 if (n == 81)643                 {644                     readKeyThread.Abort();//停止按键检测645                     gotoxy(25, 5);646                     c(ConsoleColor.White);//调成白色647                     Console.Write("\a\a\a恭喜你过关!!!");648                     Sleep(3000);//延时649                     return true;650                 }651                 show();//用来随机产生障碍物以及食物和生命药水以及用来判断游戏的各种参数(小星星是否吃到,是否撞墙)652             }653         }654 655     }656 657     class Program658     {659         static void Main(string[] args)660         {661             Game game = new Game();662             game.ycgb(false);//隐藏光标663             game.start();//绘制启动画面以及隔墙664             while (true)665             {666                 game.guanka();//用来选择关卡并根据关卡设置蛇的移动速度667                 game.ycgb(false);//隐藏光标668                 if (!game.game()) break;//游戏运行669             }670         }671     }672 }
显示代码

 

 

 

转载于:https://www.cnblogs.com/AfterTheRainOfStars/p/3702581.html

你可能感兴趣的文章
Lucene中的 Query对象
查看>>
二分基础
查看>>
物流英语
查看>>
[iOS]iOS8可用的识别用户方式(idfa、UUID、idfv)
查看>>
hdu1507--二分图最大匹配
查看>>
排序(6)---------归并排序(C语言实现)
查看>>
jsp 中对jar 包的引用
查看>>
AndroidStudio怎样导入library项目开源库
查看>>
悲观锁和乐观锁使用场景
查看>>
Oracle 12c: RMAN restore/recover pluggable database
查看>>
substance新版及问题
查看>>
centOSmini安装教程
查看>>
Android开发之SoundPool使用具体解释
查看>>
【数据结构与算法】二叉树深度遍历(递归)
查看>>
iOS开发--基于AFNetWorking3.0的图片缓存分析
查看>>
使用jqMobi开发app基础:弹出内容的设计
查看>>
3.Java集合总结系列:Set接口及其实现
查看>>
ExtJs之Element.select函数
查看>>
驱动程序调试方法之printk——自制proc文件(一)
查看>>
Swift 可选类型-备
查看>>