zoukankan      html  css  js  c++  java
  • 飞行棋程序(附源码)

    下面是自己写的飞行棋的小程序,代码写的简单,希望各路大神多多指教----话不多说,直接上代码

    一共有三个类,第一个GameManager:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace GameDemo
      7 {
      8     class GameManager
      9     {
     10         Random r = new Random();
     11         int[] playerPos = { 0,0 };
     12 
     13         string[] playerName = new string[2];
     14         public void Start()
     15         {
     16             
     17             GameMap myMap = new GameMap();
     18             int step = 0;       //这个变量用于存放要走的步数
     19             
     20             myMap.GameSet();  
     21       
     22             myMap.ShowTitle();
     23 
     24             Console.WriteLine("请输入玩家A的姓名:");
     25             while ((playerName[0] = Console.ReadLine()) == "")
     26             {
     27                 Console.WriteLine("您输入的玩家A的姓名无效,请重新输入!");
     28             }
     29            
     30             Console.WriteLine ("请输入玩家B的姓名:");
     31             while ((playerName[1] = Console.ReadLine()) == "")
     32             {
     33                 Console.WriteLine("您输入的玩家A的姓名无效,请重新输入!");
     34             }
     35            
     36             while (playerName[0] == playerName[1])
     37             {
     38                 Console.WriteLine("你输入的玩家B的姓名与玩家A的姓名相同,请重新输入!");
     39                 playerName[1] = Console.ReadLine();
     40             }
     41 
     42             myMap.ShowTitle();
     43             Console.WriteLine("对战开始:");
     44             Console.WriteLine("{0}士兵用A来表示",playerName[0]);
     45             Console.WriteLine("{0}士兵用A来表示", playerName[1]);
     46             myMap.DrawMap(playerPos[0], playerPos[1]);
     47 
     48             //假如我们的游戏谁先到最后一格,就胜利
     49             
     50             bool isStopA = false;
     51             bool isStopB = false;
     52             while (playerPos[0] < 99 && playerPos[1] < 99)  //玩家A所走的位置和玩家B所走的位置都要小于99
     53             {
     54                 string msg = "";
     55                 //A开始掷骰子的代码
     56                 #region//A开始掷骰子的代码
     57                 if (isStopA==false  )
     58                 {
     59                     Console.WriteLine("{0}请按任意键开始掷骰子。。。", playerName[0]);
     60                     Console.ReadKey(true);
     61                     step = r.Next(1, 7);
     62                     Console.WriteLine("{0}掷出了:{1}", playerName[0], step);
     63                     Console.WriteLine("按任意键开始行动。。。");
     64                     Console.ReadKey(true);
     65 
     66                     playerPos[0] = playerPos[0] + step;
     67                    
     68                     if (playerPos[0] == playerPos[1])
     69                     {
     70                         msg = string.Format("{0}踩到{1}了,{1}退回到原点", playerName[0], playerName[1]);
     71                         playerPos[1] = 0;
     72                     }
     73                     else
     74                     {
     75                         switch (myMap.Map[playerPos[0]])
     76                         {
     77                             case 1://幸运轮盘
     78                                 Console.WriteLine("1----交换位置  2----轰炸");
     79                                 int userSelect = myMap.ReadInt(1, 2);
     80                                 switch (userSelect)
     81                                 {
     82                                     case 1:
     83                                         int temp = 0;
     84                                         temp = playerPos[0];
     85                                         playerPos[0] = playerPos[1];
     86                                         playerPos[1] = temp;
     87                                         msg = string.Format("{0}和{1}交换位置", playerName[0], playerName[1]);
     88                                         break;
     89                                     case 2:
     90                                         playerPos[1] = playerPos[1] - 6;
     91                                         if (playerPos[1] < 0)
     92                                             playerPos[1] = 0;
     93                                         msg = string.Format("{0}轰炸了{1},{1}向后倒退6步", playerName[0], playerName[1]);
     94                                         break;
     95                                 }
     96                                 break;
     97                             case 2://地雷
     98                                 playerPos[0] = playerPos[0] - 10;
     99                                 if (playerPos[0] < 0)
    100                                     playerPos[0] = 0;
    101                                 msg = string.Format("{0}踩到地雷了!退后10步,oh~~no", playerName[0]);
    102                                 break;
    103                             case 3://暂停
    104                                 isStopA = true;
    105                                 msg = string.Format("{0}玩家停止一次掷骰子",playerName[0]);
    106                                 break;
    107                             case 4://时空隧道
    108                                 playerPos[0] = playerPos[0] + 10;
    109                                 msg = string.Format("{0}玩家进入了时空隧道,向前飞了10步", playerName[0]);
    110                                 break;
    111                             default://普通
    112                                 break;
    113                         }
    114                     }
    115                    
    126                     Console.Clear();
    127                     
    128                     myMap.DrawMap(playerPos[0], playerPos[1]);
    129                     Console.WriteLine(msg);
    130                     Console.WriteLine("{0}玩家的位置为:{1}", playerName[0], playerPos[0]);
    131                     Console.WriteLine("{0}玩家的位置为:{1}", playerName[1], playerPos[1]);
    132 
    133                     Console.WriteLine();
    134                 }
    135                 else
    136                 {
    137                     isStopA = false  ;
    138                 }
    139                 #endregion
    140                 endGame();
    141 
    142 
    143                 //B开始掷骰子的代码
    144                 #region//B开始掷骰子的代码
    145                 if (isStopB == false)
    146                 {
    147                     msg = "";
    148                     Console.WriteLine("{0}请按任意键开始掷骰子。。。", playerName[1]);
    149                     Console.ReadKey(true);
    150                     step = r.Next(1, 7);
    151                     Console.WriteLine("{0}掷出了:{1}", playerName[1], step);
    152                     Console.WriteLine("按任意键开始行动。。。");
    153                     Console.ReadKey(true);
    154 
    155                     playerPos[1] = playerPos[1] + step;
    156                   //  if (playerPos[1] >= 99)
    157                    // {
    158                         endGame();
    159                     //}
    160                     if (playerPos[0] == playerPos[1])
    161                     {
    162                         msg = string.Format("{0}踩到{1}了,{1}退回到原点", playerName[1], playerName[0]);
    163                         playerPos[0] = 0;
    164                     }
    165                     else
    166                     {
    167                         switch (myMap.Map[playerPos[1]])
    168                         {
    169                             case 1://幸运轮盘
    170                                 Console.WriteLine("1----交换位置  2----轰炸");
    171                                 int userSelect = myMap.ReadInt(1, 2);
    172                                 switch (userSelect)
    173                                 {
    174                                     case 1:
    175                                         int temp = 0;
    176                                         temp = playerPos[0];
    177                                         playerPos[0] = playerPos[1];
    178                                         playerPos[1] = temp;
    179                                         msg = string.Format("{0}和{1}交换位置", playerName[1], playerName[0]);
    180                                         break;
    181                                     case 2:
    182                                         playerPos[0] = playerPos[0] - 6;
    183                                         if (playerPos[0] < 0)
    184                                             playerPos[0] = 0;
    185                                         msg = string.Format("{0}轰炸了{1},{1}向后倒退6步", playerName[1], playerName[0]);
    186                                         break;
    187                                 }
    188                                 break;
    189                             case 2://地雷
    190                                 playerPos[1] = playerPos[1] - 10;
    191                                 if (playerPos[1] < 0)
    192                                     playerPos[1] = 0;
    193                                 msg = string.Format("{0}踩到地雷了!退后10步,oh~~no", playerName[1]);
    194                                 break;
    195                             case 3://暂停
    196                                 isStopB = true;
    197                                 msg = string.Format("{0}玩家停止一次掷骰子", playerName[1]);
    198                                 break;
    199                             case 4://时空隧道
    200                                 playerPos[1] = playerPos[1] + 10;
    201                                 msg = string.Format("{0}玩家进入了时空隧道,向前飞了10步", playerName[1]);
    202                                 break;
    203                             default://普通
    204                                 break;
    205                         }
    206                     }
    207                     #region//没用的代码
    208                     //playerPos[0] = playerPos[0] + JudgeGame(step,playerPos[0],playerPos[1]);
    209                     //if (step!= JudgeGame(step, playerPos[0], playerPos[1]))
    210                     //{
    211                     //    playerPos[0] = playerPos[0] + JudgeGame(step, playerPos[0], playerPos[1]);
    212                     //    if (playerPos[0] < 0)
    213                     //        playerPos[0] = 0;
    214                     //}
    215 
    216                     //playerPos[1]=stepOtherAtoB(ref playerPos[0], ref playerPos[1]);
    217                     #endregion
    218                     Console.Clear();
    219                     
    220                     myMap.DrawMap(playerPos[0], playerPos[1]);
    221                     Console.WriteLine(msg);
    222                     Console.WriteLine("{0}玩家的位置为:{1}", playerName[0], playerPos[0]);
    223                     Console.WriteLine("{0}玩家的位置为:{1}", playerName[1], playerPos[1]);
    224 
    225                     Console.WriteLine();
    226                 }
    227                 else
    228                 {
    229                     isStopB = false;
    230                 }
    231                 #endregion
    232 
    233                 endGame();
    234 
    235             }
    236             
    237 
    238         }
    239         /// <summary>
    240         /// 游戏结束的代码
    241         /// </summary>
    242         public void endGame()
    243         {
    244             if (playerPos[0] >= 99 || playerPos[1] >= 99)
    245             {
    246                 if (playerPos[0] >= 99)
    247                 {
    248                     Console.Clear();
    249                     Console.WriteLine("{0}玩家赢得了比赛!", playerName[0]);
    250                 }
    251                 else
    252                 {
    253                     Console.Clear();
    254                     Console.WriteLine("{0}玩家赢得了比赛!", playerName[1]);
    255                 }
    256                 Console.WriteLine("*************************************************");
    257                 Console.WriteLine("*                                               *");
    258                 Console.WriteLine("*               GAME     OVER                   *");
    259                 Console.WriteLine("*                                               *");
    260                 Console.WriteLine("*************************************************");
    261                 return;
    262             }
    263            
    264         }
    265          
    357     }
    358 }

    第二个类:GameMap

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 
      6 namespace GameDemo
      7 {
      8     class GameMap
      9     {
     10         //在这个数组,存储我们的每一格的地图类型(机关)
     11         //数组中的每一格,对应游戏地图上的一格.
     12         //下标为[0]的数组元素,对应游戏地图上的第一格
     13 
     14         // 1:幸运轮盘◎ 2:地雷☆  3: 暂停▲ 4:时空隧道卐 0:普通□
     15 
     16         int[] map = new int[100];
     17 
     18         public int[] Map
     19         {
     20             get { return map; }
     21             set { map = value; }
     22         }
     23 
     24         //public int[] Map
     25         //{
     26         //    get { return map; }
     27         //    set { map = value; }
     28         //}
     29    
     30 
     31         public GameMap()
     32         {
     33             this.InitalMap();
     34         }
     35         public int[] luckTurn = new int[6] { 6, 23, 40, 55, 69, 83 };   //声明数组
     36         public int[] landMine = new int[9] { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
     37         public int[] pause = new int[4] { 9, 27, 60, 93 };
     38         public int[] timeTunnel = new int[7] { 20, 25, 45, 63, 72, 88, 90 };
     39         public int InitalMap()
     40         {
     41             //用于存储在地图中为地雷的下标
     42             //int[] luckTurn = { 6, 23, 40, 55, 69, 83 }; // 幸运轮盘◎
     43             //int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆
     44             //int[] pause = { 9, 27, 60, 93 };//暂停▲
     45             //int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐
     46 
     47             //初始化地图中的幸运轮盘位置
     48             for (int i = 0; i < luckTurn.Length; i++)
     49             {
     50                 Map[luckTurn[i]]=1;
     51             }
     52             //初始化地图中的地雷位置
     53             for (int i = 0; i < landMine.Length; i++)
     54             {
     55                 Map[landMine[i]]=2;
     56             }
     57             //初始化地图中的暂停位置
     58             for (int i = 0; i < pause.Length; i++)
     59             {
     60                 Map[pause[i]] = 3;
     61             }
     62             //初始化地图中的时空隧道位置
     63             for (int i = 0; i < timeTunnel.Length; i++)
     64             {
     65                 Map[timeTunnel[i]] = 4;
     66             }
     67             return 0;
     68         }
     69 
     70 
     71         //        //画地图时注意,我们是从0-99依次画地图.
     72         //以画第一格为例,需要考虑到的情况如下:
     73         //1. A和B 是否同时都在这一格上.如果在,则画一个    <>
     74         //2. A是否在当前要画的这一格上,如果在,则画一个     A
     75         //3. B是否在当前要画的这一格上,如果在,则画一个     B
     76         //4.如果上面的都不成立,我们就要考虑这一格是什么机关.比如我们当前画的是第一格,那么我们就看一下
     77         //map[0]中存的值是几.如果是0,表示普通,则画一个□  如果是1,表示轮盘,则画一个◎ 
     78         // 如果是2,则表示地雷,画一个☆   如果是3,则表示暂停,画一个▲
     79         //如果是4,则表示时空隧道,则画一个卐
     80 
     81 
     82         /// <summary>
     83         /// 得到第pos个位置应该画的图型
     84         /// </summary>
     85         /// <param name="pos">我们要画的地图的那一格的下标</param>
     86         /// <param name="player1Pos">玩家A当前所在的地址位置,下标</param>
     87         /// <param name="player2Pos">玩家B当前所在的地址位置,下标</param>
     88         /// <returns></returns>
     89 
     90         public string GetMapString(int pos, int player1Pos, int player2Pos)
     91         {
     92             string mystring = "";
     93             if (player1Pos == player2Pos && player1Pos == pos)
     94             {
     95                 mystring="<>";
     96             }
     97             else if (player1Pos == pos)
     98             {
     99                 mystring="";
    100             }
    101             else if (player2Pos == pos)
    102             {
    103                 mystring = "";
    104             }
    105             else
    106             {
    107                 switch (Map[pos])
    108                 {
    109                     case 1:
    110                         mystring = "";
    111                         break;
    112                     case 2:
    113                         mystring = "";
    114                         break;
    115                     case 3:
    116                         mystring = "";
    117                         break;
    118                     case 4:
    119                         mystring = "";
    120                         break;
    121                     default:
    122                         mystring = "";
    123                         break;
    124                 }
    125             }
    126             return mystring;
    127 
    128         }
    129         
    130         /// <summary>
    131         /// 
    132         /// </summary>
    133         /// <param name="player1Pos">A所在地图的下标</param>
    134         /// <param name="player2Pos">B所在地图的下标</param>
    135         public void DrawMap(int player1Pos, int player2Pos)
    136         {
    137             //输出示例
    138             Console.WriteLine("图例:幸运轮盘--◎  地雷--☆  暂停--▲ 时空隧道--卐  普通--□");
    139             //输出第一行
    140             for (int i = 0; i <= 29; i++)
    141             {
    142                 Console.Write(GetMapString(i,player1Pos,player2Pos));
    143             }
    144             Console.WriteLine();
    145 
    146             //输出第一列
    147             for(int i=30;i<=34;i++)
    148             {
    149                 for(int j=0;j<29;j++)
    150                 {
    151                     Console.Write("  ");
    152                 }
    153                 Console.WriteLine(GetMapString(i,player1Pos,player2Pos));
    154             }
    155             
    156 
    157             //输出第二行
    158             for (int i = 64; i >= 35; i--)
    159             {
    160                 Console.Write(GetMapString(i,player1Pos,player2Pos));
    161             }
    162             Console.WriteLine();
    163 
    164             //输出第二列
    165                 for (int j = 65; j <= 69; j++)
    166                 {
    167                     Console.WriteLine(GetMapString(j, player1Pos, player2Pos));
    168                 }
    169               
    170             
    171             //输出第三行
    172             for (int i = 70; i <= 99; i++)
    173             {
    174                 Console.Write(GetMapString(i,player1Pos,player2Pos));
    175             }
    176             Console.WriteLine();
    177         }
    178 
    179         /// <summary>
    180         /// 调用此方法,清屏,然后输出有戏名称
    181         /// </summary>
    182         public void ShowTitle()
    183         {
    184             //绘制欢迎界面
    185             Console.Clear();
    186             Console.WriteLine("*************************************************");
    187             Console.WriteLine("*                                               *");
    188             Console.WriteLine("*               骑   士  飞  行  棋             *");
    189             Console.WriteLine("*                                               *");
    190             Console.WriteLine("*************************************************");
    191         }
    192 
    193         /// <summary>
    194         ///游戏设置,包括开始,背景色,前景色,字体等等 
    195         /// </summary>
    196         public void GameSet()
    197         {
    198             int userInput = 0;
    199             Console.WriteLine("1-----------游戏开始");
    200             Console.WriteLine("2-----------设置背景色");
    201             Console.WriteLine("3-----------设置字体");
    202             Console.WriteLine("请选择:");
    203             userInput = ReadInt(1, 3);
    204             //userInput = ReadInt(Console.Read(),Console.Read());
    205             switch (userInput)
    206             {
    207                 case 2:
    208                     Console.WriteLine("1-------------白色");
    209                     Console.WriteLine("2-------------红色");
    210                     Console.WriteLine("3-------------黑色");
    211                     userInput = ReadInt(1, 3);
    212                     //userInput = ReadInt(Console.Read(), Console.Read());
    213                     switch (userInput)
    214                     {
    215                         case 1:
    216                             Console.BackgroundColor = ConsoleColor.White;
    217                             break;
    218                         case 2:
    219                             Console.BackgroundColor = ConsoleColor.Red;
    220                             break;
    221                         case 3:
    222                             Console.BackgroundColor = ConsoleColor.Black;
    223                             break;
    224                     }
    225                     break;
    226                 case 3:
    227                     Console.WriteLine("1-------------白色");
    228                     Console.WriteLine("2-------------红色");
    229                     Console.WriteLine("3-------------黑色");
    230                     userInput=ReadInt(1,3);
    231                     //userInput = ReadInt(Console.Read(), Console.Read());
    232                     userInput = ReadInt(Console.Read(), Console.Read());
    233                     switch (userInput)
    234                     {
    235                         case 1:
    236                             Console.ForegroundColor = ConsoleColor.White;
    237                             break;
    238                         case 2:
    239                             Console.ForegroundColor = ConsoleColor.Red;
    240                             break;
    241                         case 3:
    242                             Console.ForegroundColor = ConsoleColor.Black;
    243                             break;
    244                     }
    245                     break;
    246                 default :
    247                     break;
    248 
    249             }
    250 
    251         }
    252 
    253         public int ReadInt(int min, int max)
    254         {
    255             int userInput = 0;
    256             while (int.TryParse(Console.ReadLine(), out userInput) == false //把输入的字符转换成32位有符号整数,并把值赋给userInput,然后返回它。
    257                 || (userInput >= min && userInput <= max) == false)          
    258             {
    259                 Console.WriteLine("输入有误,请重新输入!");
    260             }
    261             return userInput;
    262             
    263         }
    264 
    265          
    266     }
    267 }

    第三个类Program

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace GameDemo
     7 {
     8     class Program
     9     {
    10         static void Main(string[] args)
    11         {
    12             GameManager gm = new GameManager();
    13             gm.Start();
    14             Console.ReadKey();
    15             
    16         }
    17     }
    18 }

  • 相关阅读:
    Windows | Linux/Ubuntu 16.04 安装编辑器 Sublime Text 3
    Linux/Ubuntu 16.04 好用的视频播放器 SMPlayer
    Webpack实战(二):webpack-dev-server的介绍与用法
    Webpack实战(一):Webpack打包工具安装及参数配置
    第一天开通博客
    Spring Cloud Eureka 服务注册与发现中心
    使用 Docker Compose 部署 Nginx 配置虚拟主机
    Spring Boot 中 Redis 的使用
    Linux 安装 Docker Compose 及常用命令汇总
    Spring Boot 集成 Swagger2 构建 RESTful API 文档
  • 原文地址:https://www.cnblogs.com/daban/p/2546634.html
Copyright © 2011-2022 走看看