骑士飞行棋

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace _骑士飞行棋

{

class Program

{

public static int[] Map = new int[100];//声明一个长度为100的数组用来画地图

public static int[] PlayerPos = new int[2] { 0, 0 };//声明一个数组用来存玩家A和玩家B

public static string[] PlayerNames = new string[2];

public static bool[] flag = new bool[] { false,false};

static void Main(string[] args)

{

ShowUI();//游戏头

InitMap();//初始化地图

#region 玩家A和玩家B输入姓名

Console.WriteLine("请输入玩家A的姓名");

PlayerNames[0] = Console.ReadLine();

while (PlayerNames[0]=="")

{

Console.WriteLine("玩家A的姓名不能为空,请重新输入");

PlayerNames[0] = Console.ReadLine();

}

Console.WriteLine("请输入玩家B的姓名");

PlayerNames[1] = Console.ReadLine();

while (PlayerNames[1] == PlayerNames[0] || PlayerNames[1] == "")

{

if (PlayerNames[1] == PlayerNames[0])

{

Console.WriteLine("玩家B的姓名和玩家A的姓名[{0}]不能相同相同",PlayerNames[0]);

}

else

{

Console.WriteLine("玩家B的姓名为空,请重新输入");

}

PlayerNames[1] = Console.ReadLine();

}

#endregion

Console.Clear();

ShowUI();//游戏头

Console.WriteLine("对战开始......");

Console.WriteLine("{0}的士兵用A表示......",PlayerNames[0]);

Console.WriteLine("{0}的士兵用B表示......", PlayerNames[1]);

DrawMap();//画地图

#region 玩家A掷骰子

if (flag[0]==false)

{

RowTouZi(0);

}

else

{

flag[0] = false;

}

#endregion

if (PlayerPos[0]==99)

{

Console.WriteLine("恭喜玩家A胜利了");

break;

}

#region 玩家B掷骰子

if (flag[1]==false)

{

RowTouZi(1);

}

else

{

flag[1] = false;

}

#endregion

if (PlayerPos[1]==99)

{

Console.WriteLine("恭喜玩家B胜利了");

break;

}

Console.WriteLine("行动完毕...");

}

Win();

Console.ReadKey();

//画图

//如何行走-----逻辑判断

}

/// <summary>

/// 显示游戏头

/// </summary>

public static void ShowUI()

{

Console.WriteLine("************************************");

Console.WriteLine("* *");

Console.WriteLine("* 终极骑士飞行棋 10.18 *");

Console.WriteLine("* *");

Console.WriteLine("************************************");

}

/// <summary>

/// 初始化地图

/// </summary>

public static void InitMap()

{

//初始化地图

//我用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 };//时空隧道卐

//把数组中下标为6, 23, 40, 55, 69, 83的地方的值改为1

for (int i = 0; i < luckyturn.Length; i++)

{

//int temp = luckyturn[i];

Map[luckyturn[i]] = 1;

}

for (int i = 0; i < landMine.Length; i++)

{

Map[landMine[i]] = 2;

}

for (int i = 0; i < pause.Length; i++)

{

Map[pause[i]] = 3;

}

for (int i = 0; i < timeTunnel.Length; i++)

{

Map[timeTunnel[i]] = 4;

}

}

/// <summary>

/// 画地图的

/// </summary>

public static void DrawMap()

{

//图例:幸运:◎ 地雷:☆ 暂停:▲ 时空隧道:卐

Console.WriteLine("图例:幸运:◎ 地雷:☆ 暂停:▲ 时空隧道:卐");

#region 画地图第一行

DrawMapLeftToRight(0, 29);

#endregion

Console.WriteLine();

#region 画地图第一竖行

for (int i = 30; i <= 34; i++)

{

for (int j = 0; j <= 28; j++)

{

Console.Write(" ");

}

//Console.Write();

Console.WriteLine(DrawStringMap(i));

}

#endregion

#region 画第二横行

for (int i = 64; i >= 35; i--)

{

Console.Write(DrawStringMap(i));

}

#endregion

Console.WriteLine();

#region 画第二竖行

for (int i = 65; i <= 69; i++)

{

Console.WriteLine(DrawStringMap(i));

}

#endregion

#region 画第三横行

DrawMapLeftToRight(70, 99);

#endregion

Console.WriteLine();

}

/// <summary>

/// 画地图的逻辑

/// </summary>

/// <param name="pos">传过来的坐标</param>

/// <returns></returns>

public static string DrawStringMap(int pos)

{

string temp = "";

#region 画第一行的逻辑

//如果玩家A和玩家B在一起并且在地图上就画<>

if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == pos)

{

Console.ForegroundColor = ConsoleColor.Yellow;

temp = "<>";

}

else if (PlayerPos[0] == pos)//如果玩家A在地图上就画A

{

Console.ForegroundColor = ConsoleColor.Yellow;

temp = "A";

}

else if (PlayerPos[1] == pos)//如果玩家B在地图上就画B

{

Console.ForegroundColor = ConsoleColor.Yellow;

temp = "B";

}

else

{

switch (Map[pos])//如果玩家A和玩家B不在一起也不在这个坐标上就画该显示的地图图标

{

case 0: Console.ForegroundColor = ConsoleColor.Gray;

temp = "□";

break;

case 1:

Console.ForegroundColor = ConsoleColor.Red;

temp = "◎";

break;

case 2:

Console.ForegroundColor = ConsoleColor.Blue;

temp = "☆";

break;

case 3:

Console.ForegroundColor = ConsoleColor.Green;

temp = "▲";

break;

case 4:

Console.ForegroundColor = ConsoleColor.Magenta;

temp = "卐";

break;

}//end switch

}//end else

return temp;

#endregion

}

/// <summary>

/// 从某个坐标到另一个坐标画地图

/// </summary>

/// <param name="left"></param>

/// <param name="right"></param>

public static void DrawMapLeftToRight(int left, int right)

{

for (int i = left; i <= right; i++)

{

Console.Write(DrawStringMap(i));

}

}

/// <summary>

/// 根据传过来的数字,返回一个数字

/// </summary>

/// <param name="msg"></param>

/// <param name="min"></param>

/// <param name="max"></param>

/// <returns></returns>

public static int ReadInt(string msg, int min, int max)

{

while (true)

{

try

{

Console.WriteLine(msg);

int number = Convert.ToInt32(Console.ReadLine());

if (number >= min && number <= max)

{

return number;

}

else

{

Console.WriteLine("你的输入不合法!只能输入{0}到{1}之间的数字!", min, max);

continue;

}

}

catch

{

Console.WriteLine("输入有误,请重新输入!");

}

}

//程序绝对走不到这里

}

public static void RowTouZi(int playerPos)

{

Random r = new Random();

int num = r.Next(1,7);

string msg = "";

Console.WriteLine("{0}按任意键开始掷骰子", PlayerNames[playerPos]);

ConsoleKeyInfo coninfo = Console.ReadKey(true);

if (coninfo.Key == ConsoleKey.Q)

{

coninfo = Console.ReadKey(true);

if (coninfo.Key == ConsoleKey.A)

{

coninfo = Console.ReadKey(true);

if (coninfo.Key == ConsoleKey.Z)

{

num = 50;

}

}

}

Console.WriteLine("{0}掷出了{1}", PlayerNames[playerPos], num);

Console.WriteLine("{0}按任意键开始行动.....", PlayerNames[playerPos]);

Console.ReadKey(true);

PlayerPos[playerPos] += num;

CheckPos();

if (PlayerPos[playerPos] == PlayerPos[1 - playerPos])

{

msg=string.Format("玩家{0}踩到了玩家{1},玩家{2}退6格", PlayerNames[playerPos], PlayerNames[1 - playerPos], PlayerNames[1 - playerPos]);

PlayerPos[1 - playerPos] -= 6;

CheckPos();

}

else

{

switch (Map[PlayerPos[playerPos]])

{

case 0: msg="行动完了"; break;

case 1:

msg = string.Format("{0}走到了幸运,请选择 1----交换位置,2----轰炸对方", PlayerNames[playerPos]);

int number = ReadInt(msg, 1, 2);

if (number == 1)

{

int temp = 0;

temp = PlayerPos[playerPos];

PlayerPos[playerPos] = PlayerPos[1 - playerPos];

PlayerPos[1 - playerPos] = temp;

msg=string.Format("玩家{0}选择了与玩家{1}交换位置", PlayerNames[playerPos], PlayerNames[1 - playerPos]);

}

else

{

PlayerPos[1 - playerPos] = 0;

msg=string.Format("玩家{0}选择轰炸玩家{1}", PlayerNames[playerPos], PlayerNames[1 - playerPos]);

}

break;

case 2:

//踩到地雷了

msg="恭喜你,能踩到地雷,百年不遇,退6格";

PlayerPos[playerPos] -= 6;

CheckPos();

break;

case 3:

msg="踩到暂停了";

flag[playerPos] = true;

break;

case 4:

msg="恭喜你,这个猥琐家伙竟然穿越了10步";

PlayerPos[playerPos] += 10;

CheckPos();

break;

}

}

Console.Clear();

DrawMap();

Console.WriteLine(msg);

}

public static void CheckPos()

{

if (PlayerPos[0]>99)

{

PlayerPos[0] = 99;

}

if (PlayerPos[1]>99)

{

PlayerPos[1] = 99;

}

if (PlayerPos[0]<0)

{

PlayerPos[0] = 0;

}

if (PlayerPos[1]<0)

{

PlayerPos[1] = 0;

}

}

public static void Win()

{

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine(" ◆ ");

Console.WriteLine(" ■ ◆ ■ ■");

Console.WriteLine(" ■■■■ ■ ■ ◆■ ■ ■ ■");

Console.WriteLine(" ■ ■ ■ ■ ◆ ■ ■ ■ ■");

Console.WriteLine(" ■ ■ ■■■■■■ ■■■■■■■ ■ ■ ■");

Console.WriteLine(" ■■■■ ■ ■ ●■● ■ ■ ■");

Console.WriteLine(" ■ ■ ■ ● ■ ● ■ ■ ■");

Console.WriteLine(" ■ ■ ■■■■■■ ● ■ ● ■ ■ ■");

Console.WriteLine(" ■■■■ ■ ● ■ ■ ■ ■ ■");

Console.WriteLine(" ■ ■ ■ ■ ■ ■ ■ ■");

Console.WriteLine(" ■ ■ ■ ■ ■ ■ ");


特点介绍:大量运用指针,结构等C语言的特色,使用OO思想编写代码. ------------------1.对战模式------------------ 1.本游戏用C语言实现,模仿大富翁4,与电脑玩家在地图上循环行走购买房屋,以一方金钱耗尽为结束 2.玩家在游戏开始时可以设置对战的难度,不同的难度初始金钱、点卷、电脑AI等都是不同的,详情请参看[难度说明] 3.在游戏过程中可以使用道具来限制对方发展或增强自己的发展,详情请参看[道具详解] 4.在地图中有许多特殊关卡,当行走到这些关卡上的时候会触发相应的事件,详情请参看[关卡详解] 5.由于开发过程比较仓促且对C语言的很多特性还不够了解,也许游戏中还有很多BUG,尽请见谅! ------------------2.难度说明------------------ 1.买和使用任何道具,不会进行股票交易,初始金钱为20万,初始点卷为100点 2.普通难度:电脑玩家会购买和使用除了核子飞弹以外的所有道具,每五轮会利用较少比例金钱进行股票交易,初始金钱为10万,初始点卷为50点 3.困难难度:电脑玩家会购买和使用所有道具,每三轮会利用较多比例金钱进行股票交易,初始金钱为5万,初始点卷为0点 ------------------3.道具详解------------------ 1.购地卡:需要点卷10点,如果玩家当前位置是对方的地,使用此卡则可以强行购买,并支付给对方2000元购地费 2.遥控骰子:需要点卷10点,使用后可以选择1-6步的行走步数 3.请神符:需要点卷10点,使用后会在以当前位置为中心,左右各3步的范围搜索最近的神灵,并让其附身 4.送神符:需要点卷8点,清楚当前附身的任何神灵附身状态 5.核子飞弹:需要点卷100点,选择轰炸目的地后,会摧毁以该位置为中心,左右各3步范围的房屋、关卡,并让此范围内的所有玩家暂停3回合 ------------------4.关卡详解------------------ 1.∷ 普通关卡:可任意行走的关卡 2.※ 暂停关卡:若玩家行走到该关卡上会暂停一回合 3.★ 地雷关卡:若玩家行走到该关卡上会暂停一回合,并将当前位置的房屋炸掉,成为空地 4.⊙ 幸运轮盘:若玩家行走到该关卡上可以选择与对方交换位置或轰炸对方(效果同 地雷关卡) 5.¥ 幸运点卷:随机获得5-20个点卷 6.〓 时空隧道:加走(1-6)步,效果与遥控骰子相同 7.@ 神秘商店:进入后可购买道具 8.X 小衰神:附身后立即随机损失500-1000金币,走到对方地盘加倍罚款,附身3回合 9.Z 大衰神:附身后立即随机损失1000-2000金币,走到对方地盘加倍罚款,无法购买房屋,附身5回合 10.◇ 小福神:附身后立即随机获得500-1000金币,走到对方地盘免费,附身3回合 11.◆ 大福神:附身后立即随机获得1000-2000金币,走到对方地盘免费,免费买地,附身5回合 12.◎ 空地:可以被玩家购买的地 13.① 玩家的地:玩家自己的地,电脑踩上后会支付玩家500元 14.② 电脑的地:电脑玩家的地,玩家踩上后会支付电脑500元 15.A 玩家位置:玩家当前位置坐标 16.B 电脑位置:电脑当前位置坐标 ------------------5.股票系统------------------ 1.玩家在游戏中可投资股票来提升自己的金钱 2.每种股票根据基价的不同会有不同的成长率 3.每开始一轮新回合,所有股票的价值都会随机变化 4.股票的状态:上涨(状态用\"↑\"表示),下跌(状态用\"↓\"表示),涨停(状态用\"▲\"表示),跌停(状态用\"▼\"表示)") 5.任何股票连续两轮上涨会进入涨停状态,处于涨停状态的股票不能买入 6.任何股票连续两轮下跌会进入跌停状态,处于跌停状态的股票不能卖出 7.可以通过观察股票价格曲线图来帮助判断该股价格的走向,该曲线图描述的是近30个回合的股票价格走向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值