C#学习笔记 08.01
(学习视频来自bilibili的传智播客赵老师基础教学视频)
飞行棋游戏
这就是个比较大的东西了。。。。
大概就是,有个标题,给玩家起名。
有个地图,掷骰子,走路玩。。。
详细规则
踩到对方 可以让对方退6个格子(踩中对方的话可以躲避当前格子的判定)
普通格子。。。就是普通格子
幸运圆盘,与对方交换位置,或者将对方轰退6个格子
地雷。。退6步
时空隧道。。进10步
暂停。。定身一局
大概这样。。。。
源代码太长了,本想传资源上去,结果发现不会整,就很尴尬,附在后面了。。。
实现方法肯定不止这一种,大家有好的想法欢迎批评指教
using System;
namespace _12_FeiXingQi
{
class Program
{
public static int[] _Maps = new int[100];//新建数组,确定地图大小
public static int[] _WeiZhi = new int[2];//存储A,B两个玩家的坐标
public static Random ra = new Random();
public static bool _JiaoHuan = false;
public static bool _HongZha = false;
public static bool[] _ZanTing = new bool[2];
static void Main(string[] args)
{
int n = 0;//回合数
int dianShu;//骰子的点数
YouXiTou();
#region 输入玩家姓名
string name_A, name_B;
Console.WriteLine("请输入玩家A姓名");
while (true)
{
name_A = Console.ReadLine();
if (name_A != null)
{
break;
}
Console.WriteLine("玩家A姓名不能为空!");
}
Console.WriteLine("请输入玩家B姓名");
while (true)
{
name_B = Console.ReadLine();
if (name_B != null)
{
break;
}
Console.WriteLine("玩家B姓名不能为空!");
}
#endregion
HuiZhiTuLi(name_A, name_B);
ChuShiHua();
if (_WeiZhi[0] == _WeiZhi[1])
{
_Maps[_WeiZhi[0]] = 7;
}
else
{
_Maps[_WeiZhi[0]] = 5;
_Maps[_WeiZhi[1]] = 6;
}
HuiZhiChangJing();
while (_WeiZhi[0] < 99 && _WeiZhi[1] < 99)
{
n++;
Console.WriteLine("第{0}回合,由{1}(A)掷骰子(按下键盘任意键)……", n, name_A);
Console.ReadKey(false);
ChuShiHua();
dianShu = ZhiTouZi();
_Maps[_WeiZhi[1]] = 6;
_WeiZhi[0] = QianJin(ref _WeiZhi[0], dianShu, ref _ZanTing[0]);
if (_JiaoHuan)
{
_JiaoHuan = false;
int temp = _WeiZhi[0];
_WeiZhi[0] = _WeiZhi[1];
_WeiZhi[1] = temp;
}
if (_HongZha)
{
_HongZha = false;
_WeiZhi[1] -= 6;
ChuShiHua();
FanWeiXianDing(ref _WeiZhi[1]);
}
if (_WeiZhi[0] == _WeiZhi[1])
{
_Maps[_WeiZhi[0]] = 7;
}
else
{
_Maps[_WeiZhi[0]] = 5;
_Maps[_WeiZhi[1]] = 6;
}
Console.WriteLine("{0}(A)的行动结束(按任意键继续)", name_A);
Console.ReadKey(false);
HuiZhiTuLi(name_A, name_B);
HuiZhiChangJing();
Console.WriteLine("第{0}回合,由{1}(B)掷骰子(按下键盘任意键)……", n, name_B);
Console.ReadKey(false);
ChuShiHua();
_Maps[_WeiZhi[0]] = 5;
dianShu = ZhiTouZi();
_WeiZhi[1] = QianJin(ref _WeiZhi[1], dianShu, ref _ZanTing[1]);
if (_JiaoHuan)
{
_JiaoHuan = false;
int temp = _WeiZhi[0];
_WeiZhi[0] = _WeiZhi[1];
_WeiZhi[1] = temp;
}
if (_HongZha)
{
_HongZha = false;
_WeiZhi[0] -= 6;
FanWeiXianDing(ref _WeiZhi[0]);
ChuShiHua();
}
if (_WeiZhi[0] == _WeiZhi[1])
{
_Maps[_WeiZhi[0]] = 7;
}
else
{
_Maps[_WeiZhi[0]] = 5;
_Maps[_WeiZhi[1]] = 6;
}
Console.WriteLine("{0}(B)的行动结束(按任意键继续)", name_B);
Console.ReadKey(false);
HuiZhiTuLi(name_A, name_B);
HuiZhiChangJing();
}
if (_WeiZhi[0]==99)
{
Console.WriteLine("{0}(A)获胜!",name_A);
}
else
{
Console.WriteLine("{0}(B)获胜!",name_B);
}
Console.ReadKey();
}
/// <summary>
/// 游戏头
/// </summary>
public static void YouXiTou()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("*************************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*************************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("*************************************");
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("**************飞行棋游戏*************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("*************************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*************************************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("*************************************");
Console.ResetColor();
}
/// <summary>
/// 接下来为数组赋值(初始化地图,为不同位置设定场景)
/// </summary>
public static void ChuShiHua()
{
// 0 表示普通 □
// 1 表示幸运轮盘 ◎
// 2 表示地雷 ☆
// 3 代表暂停 ▲
// 4 代表时空隧道 卐
for (int i = 0; i < _Maps.Length; i++)
{
_Maps[i] = 0;
}
int[] xingYunLunPan = { 6, 23, 40, 55, 59, 83 };
foreach (var item in xingYunLunPan)
{
_Maps[item] = 1;
}
int[] diLei = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
foreach (var item in diLei)
{
_Maps[item] = 2;
}
int[] zanTing = { 9, 27, 60, 93 };
foreach (var item in zanTing)
{
_Maps[item] = 3;
}
int[] shiKongSuiDao = { 20, 25, 45, 63, 72, 88, 90 };
foreach (var item in shiKongSuiDao)
{
_Maps[item] = 4;
}
}
/// <summary>
/// 根据点位置的数据,判断某一点该画啥
/// </summary>
/// <param name="i"></param>
public static void HuiZhiDanGe(int i)
{
switch (i)
{
case 0:
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("□");
Console.ResetColor();
break;
case 1:
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("◎");
Console.ResetColor();
break;
case 2:
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("☆");
Console.ResetColor();
break;
case 3:
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("▲");
Console.ResetColor();
break;
case 4:
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.Write("卐");
Console.ResetColor();
break;
case 5:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("A");
Console.ResetColor();
break;
case 6:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("B");
Console.ResetColor();
break;
case 7:
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("<>");
Console.ResetColor();
break;
default:
break;
}
}
/// <summary>
/// 根据数组绘制局面
/// </summary>
public static void HuiZhiChangJing()
{
//第一横
for (int i = 0; i <= 29; i++)
{
HuiZhiDanGe(_Maps[i]);
}
//第一竖
for (int i = 30; i <= 34; i++)
{
Console.WriteLine();
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
HuiZhiDanGe(_Maps[i]);
}
//第二横
Console.WriteLine();
for (int i = 64; i >= 35; i--)
{
HuiZhiDanGe(_Maps[i]);
}
//第二竖
for (int i = 65; i <= 69; i++)
{
Console.WriteLine();
HuiZhiDanGe(_Maps[i]);
}
//第三横
Console.WriteLine();
for (int i = 70; i <= 99; i++)
{
HuiZhiDanGe(_Maps[i]);
}
Console.WriteLine();
}
/// <summary>
/// 掷骰子,返回一个1~6的随机数
/// </summary>
/// <returns></returns>
public static int ZhiTouZi()
{
int s;
s = ra.Next(1, 7);
Console.WriteLine("掷出了 " + s);
return s;
}
/// <summary>
/// 游戏过程
/// </summary>
/// <param name="weiZhi"></param>
/// <param name="buShu"></param>
/// <param name="zanTing"></param>
/// <returns></returns>
public static int QianJin(ref int weiZhi, int buShu, ref bool zanTing)
{
if (zanTing)
{
Console.WriteLine("但是被定身了!");
zanTing = false;
return weiZhi;
}
weiZhi = weiZhi + buShu;
Label_PanDing:
FanWeiXianDing(ref weiZhi);
switch (_Maps[weiZhi])
{
case 0:
return weiZhi;
case 1:
Console.WriteLine("踩中幸运轮盘,请按任意键开始!");
Console.ReadKey(false);
if (ra.Next(1, 3) == 1)
{
Console.WriteLine("交换位置!");
_JiaoHuan = true;
break;
}
else
{
Console.WriteLine("轰炸对方!");
_HongZha = true;
break;
}
case 2:
Console.WriteLine("你踩雷了!");
weiZhi -= 6;
goto Label_PanDing;
case 3:
Console.WriteLine("定身一局!");
zanTing = true;
break;
case 4:
Console.WriteLine("时空隧道,前进10步!");
weiZhi += 10;
goto Label_PanDing;
case 5:
Console.WriteLine("哈哈,踩你!(将对方踩退6步)");
_WeiZhi[0] -= 6;
FanWeiXianDing(ref _WeiZhi[0]);
break;
case 6:
Console.WriteLine("哈哈,踩你!(将对方踩退6步)");
_WeiZhi[1] -= 6;
FanWeiXianDing(ref _WeiZhi[1]);
break;
default:
Console.WriteLine("恭喜你触发了游戏 bug!");
break;
}
FanWeiXianDing(ref weiZhi);
return weiZhi;
}
/// <summary>
/// 打印地图提示信息
/// </summary>
/// <param name="name_A"></param>
/// <param name="name_B"></param>
public static void HuiZhiTuLi(string name_A, string name_B)
{
Console.Clear();
YouXiTou();
Console.WriteLine("!!!对战开始!!!");
Console.WriteLine("{0} 的士兵用 A 表示", name_A);
Console.WriteLine("{0} 的士兵用 B 表示", name_B);
Console.WriteLine("图例:两人在同一位置<> 幸运轮盘 ◎ 地雷 ☆ 暂停 ▲ 时空隧道 卐");
}
/// <summary>
/// 将位置限定在棋盘内
/// </summary>
/// <param name="weiZhi"></param>
public static void FanWeiXianDing(ref int weiZhi)
{
weiZhi = weiZhi < 0 ? 0 : weiZhi;
weiZhi = weiZhi > 99 ? 99 : weiZhi;
}
}
}