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

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

服务器之家 - 编程语言 - C# - C#控制台实现飞行棋游戏

C#控制台实现飞行棋游戏

2022-08-03 15:21取名字真的很难 C#

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

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

游戏截图:

C#控制台实现飞行棋游戏

管理类:

?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
 class ProgramManage
 {
  //随机数
  public static Random rd = new Random();
  //定义地图大小
  public static int[] Maps = new int[100];
 
  //
  public static bool[] PlayerPause = {false,false };
 
  //定义玩家A和玩家B的坐标,0是玩家A的坐标;1是玩家B的坐标
  public static int[] PlayerPos = new int[2];
 
  //存储两个玩家的姓名
  public static string[] PlayerName = new string[2];
 
  //定义名字错误类型
  public static string[] Error = {"正确","不能有数字","重名了","不能为空" };
 
  //画游戏头
  public static void GanmeShow()
  {
   Console.ForegroundColor = ConsoleColor.Yellow;
   Console.WriteLine("*************************");
   Console.WriteLine("********飞行棋游戏*******");
   Console.WriteLine("*************************");
   Console.ForegroundColor = ConsoleColor.Green;
  }
 
  //定义地图关卡布局
  public static void InitailMap()
  {
   int[] luckturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎
   for (int i = 0; i < luckturn.Length; i++)
   {
    Maps[luckturn[i]] = 1;
   }
 
   int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷×
   for (int i = 0; i < landMine.Length; i++)
   {
    Maps[landMine[i]] = 2;
   }
 
   int[] pause = { 9, 27, 60, 93 };//暂停▲
   for (int i = 0; i < pause.Length; i++)
   {
    Maps[pause[i]] = 3;
   }
 
   int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卍
   for (int i = 0; i < timeTunnel.Length; i++)
   {
    Maps[timeTunnel[i]] = 4;
   }
 
  }
 
  //定义地图元素。输入坐标值,方法内部判断当前坐标应当放什么符号,返回符号值
  public static string MapElement(int i)
  {
   string Element = "0";
   //如果玩家AB坐标相同并都在当前位置则画一个“<>”
   if (PlayerPos[0] == i && PlayerPos[1] == i)
   {
    Element="<>";
   }
   //有A画A,有B画B,都没有画地图
   else if (PlayerPos[0] == i)
   {
    Element="A";
   }
   else if (PlayerPos[1] == i)
   {
    Element="B";
   }
   else
   {
    switch (Maps[i])
    {
     case 0:
      Element = "□";
      break;
     case 1:
      Element = "◎";
      break;
     case 2:
      Element = "×";
      break;
     case 3:
      Element = "▲";
      break;
     case 4:
      Element = "卍";
      break;
    }
 
   }
   return Element;
  }
 
 
  //绘制地图
  public static void DrawMap()
  {
   Console.ForegroundColor = ConsoleColor.White;
   //第一横行
   for (int i = 0; i < 30; i++)
   {
    Console.Write(MapElement(i));
   }
   
   //第一竖行
   for (int i = 30; i < 35; i++)
   {
    Console.WriteLine();
    Console.Write("               ");
    Console.Write(MapElement(i));
   }
 
   //第二横行
   Console.WriteLine();
   for (int i = 64; i > 34; i--)
   {
    Console.Write(MapElement(i));
   }
 
   //第二竖行
   for (int i = 65; i < 70; i++)
   {
    Console.WriteLine();
    Console.Write(MapElement(i));
   }
 
   //第三横行
   Console.WriteLine();
   for (int i = 70; i < 100; i++)
   {
    Console.Write(MapElement(i));
   }
   Console.WriteLine();
 
  }
 
  //判断姓名是否符合要求
  public static int NameJudge(string str)
  {
   int result = 0;
 
   //判断是否为空
   if (str == "")
   {
    result = 3;
    return result;
   }
   else
   {
    result = 0;
   }
 
   //判断是否是字符串
   for (int i = 0; i < str.Length; i++)
   {
    if (char.IsNumber(str,i))
    {
     result = 1;
 
     return result;
 
    }
    else
    {
     result = 0;
    }
    
   }
 
   //判断是否重名
   for (int i = 0; i < PlayerName.Length; i++)
   {
    if (PlayerName[i]==str)
    {
     result = 2;
     return result;
    }
    else
    {
     result = 0;
    }
    
   }
 
 
   return result;
  }
 
  //投骰子
  public static void Play(int player)
  {
 
   PlayerPos[player] += rd.Next(1, 7);
 
  }
 
  //坐标不能出地图
  public static void Limit(int player)
  {
   if (PlayerPos[player] < 0)
   {
    PlayerPos[player] = 0;
   }
   else if (PlayerPos[player] > 99)
   {
    PlayerPos[player] = 99;
   }
  }
 
 
 
  //执行规则
  public static void GameRule(int player)
  {
 
   //踩到对手
   if (PlayerPos[player]==PlayerPos[1-player])
   {
    PlayerPos[1 - player] -= 6;
 
    Console.WriteLine("{0}踩到对手,对手退6格", PlayerName[player]);
   }
   //什么也没踩到
   else if (Maps[PlayerPos[player]] == 0)
   {
    Console.WriteLine("{0}玩家前进了,什么也没踩到",PlayerName[player]);
 
   }
   //幸运轮盘
   else if (Maps[PlayerPos[player]] == 1)
   {
    Console.WriteLine("1,与对手交换位置。2,让对手退回原点");
    string chose;
    while (true)
    {
     chose = Console.ReadLine();
     if (chose == "1")
     {
      int tem = PlayerPos[player];
      PlayerPos[player] = PlayerPos[1 - player];
      PlayerPos[1 - player] = tem;
      Console.WriteLine("{0}与对手交换了位置", PlayerName[player]);
      break;
     }
     else if (chose == "2")
     {
      PlayerPos[1 - player] = 0;
      Console.WriteLine("{0}把对手打回原位", PlayerName[player]);
      break;
     }
     else
     {
      Console.WriteLine("请重新输入");
     }
    }
 
   }
   //地雷
   else if (Maps[PlayerPos[player]] == 2)
   {
    PlayerPos[player] -= 6;
    Console.WriteLine("{0}踩到地雷了,倒退6格", PlayerName[player]);
   }
   //暂停
   else if (Maps[PlayerPos[player]] == 3)
   {
    PlayerPause[player] = true;
    Console.WriteLine("{0}暂停一回合", PlayerName[player]);
   }
   //时空隧道
   else if (Maps[PlayerPos[player]] == 4)
   {
    PlayerPos[player] += 10;
    Console.WriteLine("{0}前进10格", PlayerName[player]);
   }
 
  }
 
  //判断输赢
  public static string Winner()
  {
   if (PlayerPos[0]>PlayerPos[1])
   {
    return PlayerName[0];
   }
   else
   {
    return PlayerName[1];
   }
  }
 }
}

实现类:

?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
 
 class Program
 {
  static void Main(string[] args)
  {
   //初始化标题
   ProgramManage.GanmeShow();
   //初始化地图关卡
   ProgramManage.InitailMap();
 
   //输入名字
   string name;
   for (int i = 0; i < ProgramManage.PlayerName.Length; i++)
   {
    Console.WriteLine("请输入玩家{0}的名字", i+1);
    name = Console.ReadLine();
    while (ProgramManage.NameJudge(name)!=0)
    {
     Console.WriteLine("名字格式不对,{0},请重新输入", ProgramManage.Error[ProgramManage.NameJudge(name)]);
     name = Console.ReadLine();
    }
    ProgramManage.PlayerName[i] = name;
   }
 
   //刷新界面
   Console.Clear();
   ProgramManage.GanmeShow();
   Console.WriteLine("玩家A名字是{0},玩家B名字{1}", ProgramManage.PlayerName[0], ProgramManage.PlayerName[1]);
   ProgramManage.DrawMap();
 
   //游戏主循环
   //初始化玩家A开始
   int player = 0;
 
   //两个玩家都没在终点的时候不停的玩游戏
   while (ProgramManage.PlayerPos[0]<99&&ProgramManage.PlayerPos[1]<99)
   {
 
 
    //判断当前玩家是否暂停,如果暂停了就停一回合
    if (ProgramManage.PlayerPause[player]==false)
    {
     Console.WriteLine("轮到玩家{0}敲回车投骰子", ProgramManage.PlayerName[player]);
     Console.ReadKey();
     //玩家player投骰子
     ProgramManage.Play(player);
     ProgramManage.Limit(player);
 
     //清空界面
     Console.Clear();
 
     //执行规则,如果踩到了关卡,一直执行,直到踩到空白点位置
     while (true)
     {
      if (ProgramManage.Maps[ProgramManage.PlayerPos[player]] != 0)
      {
       ProgramManage.GameRule(player);
       ProgramManage.Limit(player);
      }
      ProgramManage.GameRule(player);
      break;
     }
     ProgramManage.Limit(player);
 
     //变化玩家
     player = 1 - player;
 
     //刷新地图
     ProgramManage.DrawMap();
    }
    else
    {
     //当前玩家恢复暂停
     ProgramManage.PlayerPause[player] = false;
     //下一回合让给另一个玩家
     player = 1 - player;
     continue;
    }
     
   }
   //游戏结束
   Console.WriteLine("玩家{0}赢了", ProgramManage.Winner());
   Console.ReadKey();
  }
 }
}

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

原文链接:https://blog.csdn.net/qq_20662097/article/details/89085804

延伸 · 阅读

精彩推荐
  • C#OpenXml读取word内容的实例

    OpenXml读取word内容的实例

    下面小编就为大家分享一篇OpenXml读取word内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    *飞*7762022-02-16
  • C#C#使用InstallerProjects打包桌面应用程序的完整步骤

    C#使用InstallerProjects打包桌面应用程序的完整步骤

    这篇文章主要给大家介绍了关于C#使用InstallerProjects打包桌面应用程序的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参...

    kiba5186682022-07-28
  • C#分享一个C#编写简单的聊天程序(详细介绍)

    分享一个C#编写简单的聊天程序(详细介绍)

    这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点...

    C#教程网6382021-11-05
  • C#webBrowser执行js的方法,并返回值,c#后台取值的实现

    webBrowser执行js的方法,并返回值,c#后台取值的实现

    下面小编就为大家带来一篇webBrowser执行js的方法,并返回值,c#后台取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过...

    C#教程网11102021-12-13
  • C#C#如何实现图片的剪裁并保存

    C#如何实现图片的剪裁并保存

    基于c#实现图片的裁剪并保存功能,实现方法非常简单的,前端采用的cropper插件,但是在本文中没有给大家多介绍,需要的朋友可以到脚本之家去查找这个...

    b小青青3652021-12-09
  • C#基于c#用Socket做一个局域网聊天工具

    基于c#用Socket做一个局域网聊天工具

    目前基于Internet的即时聊天工具已经做的非常完美,本文介绍了基于c#用Socket做一个局域网聊天工具,有需要的朋友可以看一下。...

    Create Chen10202021-12-08
  • C#如何通过IL了解C#类的构造函数浅析

    如何通过IL了解C#类的构造函数浅析

    这篇文章主要给大家介绍了关于如何通过IL了解C#类的构造函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    叶落劲秋3652022-03-09
  • C#C#多线程开发之任务并行库

    C#多线程开发之任务并行库

    使用线程池可以使我们在减少并行度花销时节省操作系统资源。可认为线程池是一个抽象层,其向程序员隐藏了使用线程的细节,使我们可以专心处理程序...

    Andy阿辉5372021-09-09