服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现飞行棋项目

C#实现飞行棋项目

2022-08-24 11:55氪金万岁~ C#

这篇文章主要为大家详细介绍了C#实现飞行棋项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#实现飞行棋项目的具体代码,供大家参考,具体内容如下

1.制作游戏头部:游戏头部介绍

2.绘制地图

使用一维数组装整个地图的路线
如果这个位置是0,绘制普通格子
如果这个位置是1,绘制幸运轮盘
如果这个位置是2,绘制地雷
如果这个位置是3,绘制暂停
如果这个位置是4,绘制时空隧道

规划幸运轮盘位置
int[] luckyturn = { 6, 23, 40, 55, 69, 83 };
规划地雷的位置
int[] landMine = { 5,13,17,33,38,50,64,80,94};
规划暂停位置
int[] pause = {9,27,60,93 };
规划时空隧道的位置
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };

3.设置特殊关卡

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace 飞行棋
{
  class Program
  {
 
    /// <summary>
    /// 整个地图数组
    /// </summary>
    static int[] Maps = new int[100];
    /// <summary>
    /// 玩家的位置
    /// </summary>
    static int[] PlayerPos = new int[2];
    /// <summary>
    /// 玩家的姓名
    /// </summary>
    static string[] PlayerName = new string[2];
    /// <summary>
    /// 记录两名玩家是否可以掷骰子
    /// </summary>
    static bool[] PlayerFlag = new bool[2];
    static void Main(string[] args)
    {
      //绘制地图头部
      ShowTitle();
 
      //输入玩家姓名
      Console.WriteLine("请输入玩家A的姓名");
      PlayerName[0]=Console.ReadLine();
      while (PlayerName[0]=="")
      {
        Console.WriteLine("玩家A姓名不能为空,请重新输入");
        PlayerName[0]=Console.ReadLine();
      }
      Console.WriteLine("请输入玩家B的姓名");
      PlayerName[1] = Console.ReadLine();
      while (PlayerName[1]=="" || PlayerName[1]==PlayerName[0])
      {
        if (PlayerName[1]=="")
        {
          Console.WriteLine("玩家B姓名不能为空,请重新输入");
          PlayerName[1] = Console.ReadLine();
        }
        if (PlayerName[1]==PlayerName[0])
        {
          Console.WriteLine("玩家B姓名与玩家A的姓名一致,请重新输入");
          PlayerName[1] = Console.ReadLine();
        }
      }
 
      //输入完姓名,清空屏幕
      Console.Clear();
      //重新绘制游戏标题与游戏说明
      ShowTitle();
      //初始化地图关卡
      InitialMap();
      //显示地图
      DrawMap();
 
      //判断如果没有一个玩家到达终点则一直轮流掷筛子
      while (PlayerPos[0]<99 && PlayerPos[1]<99)
      {
        if (PlayerFlag[0]==false)
        {
          PlayGame(0);
        }
        else
        {
          PlayerFlag[0] = false;
        }
        if (PlayerFlag[1]==false)
        {
          PlayGame(1);
        }
        else
        {
          PlayerFlag[1] = false;
        }
        if (PlayerPos[0] == 99)
        {
          Console.WriteLine("恭喜玩家【{0}】游戏获胜!", PlayerName[0]);
          break;
        }
        if (PlayerPos[1] == 99)
        {
          Console.WriteLine("恭喜玩家【{0}】游戏获胜!", PlayerName[1]);
          break;
        }
      }
      Console.ReadLine();
    }
 
    #region 游戏标题
 
    /// <summary>
    /// 设置游戏标题
    /// </summary>
    static void ShowTitle()
    {
      Console.ForegroundColor = ConsoleColor.Blue;
      Console.WriteLine("************************************");
      Console.ForegroundColor = ConsoleColor.Green;
      Console.WriteLine("************************************");
      Console.ForegroundColor = ConsoleColor.Cyan;
      Console.WriteLine("************************************");
      Console.ForegroundColor = ConsoleColor.DarkRed;
      Console.WriteLine("***************飞行棋***************");
      Console.ForegroundColor = ConsoleColor.Cyan;
      Console.WriteLine("************************************");
      Console.ForegroundColor = ConsoleColor.Green;
      Console.WriteLine("************************************");
      Console.ForegroundColor = ConsoleColor.Blue;
      Console.WriteLine("************************************");
    }
 
    #endregion
 
    #region 初始化地图关卡
 
    /// <summary>
    /// 初始化地图关卡
    /// </summary>
    static void InitialMap()
    {
      //绘制幸运轮盘的位置==1
      int[] luckyturn = { 6, 23, 40, 55, 69, 83 };
      for (int i = 0; i < luckyturn.Length; i++)
      {
        Maps[luckyturn[i]] = 1;
      }
      //绘制绘制地雷的位置==2
      int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
      for (int i = 0; i < landMine.Length; i++)
      {
        Maps[landMine[i]] = 2;
      }
      //绘制暂停的位置==3
      int[] pause = { 9, 27, 60, 93 };
      for (int i = 0; i < pause.Length; i++)
      {
        Maps[pause[i]] = 3;
      }
      //绘制时空隧道的位置==4
      int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };
      for (int i = 0; i < timeTunnel.Length; i++)
      {
        Maps[timeTunnel[i]] = 4;
      }
    }
 
    #endregion
 
    #region 绘制地图
 
    /// <summary>
    /// 绘制地图
    /// </summary>
    static void DrawMap()
    {
      Console.ForegroundColor = ConsoleColor.DarkRed;
      Console.WriteLine("玩家【{0}】使用A表示:",PlayerName[0]);
      Console.WriteLine("玩家【{0}】使用B表示:", PlayerName[1]);
      Console.WriteLine("游戏规则:");
      Console.WriteLine();
      Console.WriteLine("1.两名玩家轮流掷骰子,规定A玩家先玩掷");
      Console.WriteLine("2.踩到格子安全,没有奖惩!");
      Console.WriteLine("3.踩到幸运轮盘,可以进行两种选择:a.置换与对方玩家位置;b.进行轰炸对方,是对方倒退6步.");
      Console.WriteLine("4.踩到地雷,倒退6步!");
      Console.WriteLine("5.踩到暂停,下一回合将暂停操作!");
      Console.WriteLine("6.踩到时空隧道,直接前进10步!");
      Console.WriteLine("7.如果踩到对方,则对方直接退6步!");
 
      ///第一横行地图
      for (int i = 0; i < 30; i++)
      {
        Console.Write(DrawString(i));
      }
      Console.WriteLine();
      ///第一竖行
      for (int i = 30; i < 35; i++)
      {
        for (int j = 0; j < 29; j++)
        {
          Console.Write(" ");
        }
        Console.Write(DrawString(i));
        
        Console.WriteLine();
      }
      ///第二横行
      for (int i = 64; i > 34; i--)
      {
        Console.Write(DrawString(i));
      }
      Console.WriteLine();
      ///第二竖行
      for (int i = 65; i < 70; i++)
      {
        Console.WriteLine(DrawString(i));
      }
      ///第三横行
      for (int i = 70; i < 100; i++)
      {
        Console.Write(DrawString(i));
      }
      Console.WriteLine();
    }
 
    #endregion
 
    #region 设置地图关卡,玩家初始位置
    
    /// <summary>
    /// 设置地图关卡,玩家初识位置
    /// </summary>
    /// <param name="pos">索引</param>
    private static string DrawString(int pos)
    {
      string str = "";
      //判断两个玩家的位置一样,确定两个玩家都在地图中
      if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == pos)
      {
        Console.ForegroundColor = ConsoleColor.Cyan;
        str ="<>";
      }
      else if (PlayerPos[0] == pos)
      {
        Console.ForegroundColor = ConsoleColor.Cyan;
        str ="A";
      }
      else if (PlayerPos[1] == pos)
      {
        Console.ForegroundColor = ConsoleColor.Red;
        str = "B";
      }
      else
      {
        switch (Maps[pos])
        {
          case 0:
            Console.ForegroundColor = ConsoleColor.Blue;
            str = "";
            break;
          case 1:
            Console.ForegroundColor = ConsoleColor.Cyan;
            str = "";
            break;
          case 2:
            Console.ForegroundColor = ConsoleColor.DarkRed;
            str = "";
            break;
          case 3:
            Console.ForegroundColor = ConsoleColor.DarkCyan;
            str = "";
            break;
          case 4:
            Console.ForegroundColor = ConsoleColor.Yellow;
            str = "";
            break;
          default:
            break;
        }
      }
      return str;
    }
 
    #endregion
 
    #region 开始游戏
    
    static void PlayGame(int PlayNum)
    {
      Random r = new Random();
      Console.WriteLine("玩家【{0}】按下任意键掷骰子",PlayerName[PlayNum]);
      Console.ReadKey(true);
      int number = r.Next(1, 7);
      Console.WriteLine("玩家【{0}】掷出<{1}>点。",PlayerName[PlayNum],number);
      Console.WriteLine("玩家【{0}】按下任意键进行移动",PlayerName[PlayNum]);
      Console.ReadKey(true);
      PlayerPos[PlayNum] += number;
      Console.WriteLine("玩家【{0}】移动完成!",PlayerName[PlayNum]);
      ChangedCheck();
      //玩家踩到对方
      if (PlayerPos[PlayNum]==PlayerPos[1-PlayNum])
      {
        Console.WriteLine("玩家【{0}】踩到玩家【{1}】,玩家【{1}】退6格",PlayerName[PlayNum],PlayerName[1-PlayNum]);
        PlayerPos[1 - PlayNum] -= 6;
      }
      else
      {
        switch (Maps[PlayerPos[PlayNum]])
        {
          //踩到0普通地板,安全没有奖惩
          case 0:
            Console.WriteLine("玩家【{0}】踩到安全地带,没有奖惩!按下任意键继续游戏",PlayerName[PlayNum]);
            Console.ReadKey(true);
            break;
          //踩到1幸运轮盘,选择奖励
          case 1:
            Console.WriteLine("玩家【{0}】踩到幸运轮盘,选择奖励:a--->交换位置  b--->轰炸对方", PlayerName[PlayNum]);
            string input = Console.ReadLine();
            while (true)
            {
              if (input=="a")
              {
                Console.WriteLine("玩家【{0}】选择与玩家【{1}】交换位置。",PlayerName[PlayNum],PlayerName[1-PlayNum]);
                int temp = PlayerPos[PlayNum];
                PlayerPos[PlayNum] = PlayerPos[1 - PlayNum];
                PlayerPos[1 - PlayNum] = temp;
                Console.WriteLine("玩家【{0}】与玩家【{1}】交换位置成功!按下任意键继续游戏", PlayerName[PlayNum], PlayerName[1 - PlayNum]);
                Console.ReadKey(true);
                break;
              }
              else if (input=="b")
              {
                Console.WriteLine("玩家【{0}】选择轰炸玩家【{1}】。", PlayerName[PlayNum], PlayerName[1 - PlayNum]);
                PlayerPos[1 - PlayNum] -= 6;
                Console.WriteLine("玩家【{0}】被轰炸倒退6步!按下任意键继续游戏", PlayerName[1 - PlayNum]);
                Console.ReadKey(true);
                break;
              }
              else
              {
                Console.WriteLine("选择格式错误,请重新选择!");
                input = Console.ReadLine();
              }
            }
            Console.ReadKey(true);
            break;
          //踩到2地雷,倒退6步
          case 2:
            Console.WriteLine("玩家【{0}】踩到地雷,倒退6步!按下任意键继续游戏!",PlayerName[PlayNum]);
            PlayerPos[PlayNum] -= 6;
            Console.ReadKey(true);
            break;
          //踩到3暂停,下一回合不能掷骰子
          case 3:
            Console.WriteLine("玩家【{0}】踩到暂停,下一回合不能掷骰子!按下任意键继续游戏!", PlayerName[PlayNum]);
            PlayerFlag[PlayNum] = true;
            Console.ReadKey(true);
            break;
          //踩到4时空穿梭,直接前进10步
          case 4:
            Console.WriteLine("玩家【{0}】踩到时空穿梭,直接前进10步!按下任意键继续游戏!", PlayerName[PlayNum]);
            PlayerPos[PlayNum] += 10;
            Console.ReadKey(true);
            break;
          default:
            break;
        }
      }
      ChangedCheck();
      Console.Clear();
      ShowTitle();
      DrawMap();
      
    }
 
    #endregion
 
    static void ChangedCheck()
    {
      if (PlayerPos[0] < 0)
      {
        PlayerPos[0] = 0;
      }
      if (PlayerPos[0] > 99)
      {
        PlayerPos[0] = 99;
      }
      if (PlayerPos[1] < 0)
      {
        PlayerPos[1] = 0;
      }
      if (PlayerPos[1] > 99)
      {
        PlayerPos[1] = 99;
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/a_lllll/article/details/86547132

延伸 · 阅读

精彩推荐
  • C#浅谈C#网络编程详解篇

    浅谈C#网络编程详解篇

    在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践,需要的朋友可以参考下...

    蘑菇先生5172021-12-20
  • C#浅谈C#中的Async和Await的用法详解

    浅谈C#中的Async和Await的用法详解

    这篇文章主要介绍了浅谈C#中的Async和Await的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    依乐祝11122022-07-13
  • C#C#构建分页应用的方法分析

    C#构建分页应用的方法分析

    这篇文章主要介绍了C#构建分页应用的方法,结合实例形式分析了C#创建分页功能的具体步骤与相关实现技巧,需要的朋友可以参考下...

    pan_junbiao12312021-12-21
  • C#C#计算字符串哈希值(MD5、SHA)的方法小结

    C#计算字符串哈希值(MD5、SHA)的方法小结

    这篇文章主要介绍了C#计算字符串哈希值(MD5、SHA)的方法,以实例形式较为详细的分析总结了C#计算字符串哈希值的各种常用技巧,具有一定参考借鉴价值...

    北风其凉7952021-10-19
  • C#C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

    C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

    本文主要介绍字符串string和内存流MemoryStream及比特数组byte[]之间相互转换的方法,需要的小伙伴可以参考一下。...

    秦风10642021-11-22
  • C#C#网站生成静态页面的实例讲解

    C#网站生成静态页面的实例讲解

    今天小编就为大家分享一篇关于C#网站生成静态页面的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小...

    chenqiangdage7582022-03-08
  • C#详解c# AutoMapper 使用方式

    详解c# AutoMapper 使用方式

    本篇文章主要介绍了详解c# AutoMapper 使用方式 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    大稳·杨4222022-02-13
  • C#C#部署数据库及IIS站点

    C#部署数据库及IIS站点

    这篇文章主要为大家详细介绍了C#部署数据库及IIS站点的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    airforce0948682022-02-21