---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 骑士飞行棋
{
    class Program
    {
        //数组的下标为0的元素对应地图上的第1格,下标为1的元素对应第二格...下标为n的元素对应n+1格。
        //在数组中用:1.表示幸运轮盘◎1
        //          2.地雷☆2
        //          3.暂停▲3
        //          4.时空隧道卐4
        //          0.表示普通
        static int[] Map = new int[100];//放在外面以便Initial方法访问到.并需要加static修饰.
        static int[] playerPos = { 0, 0 };//用于存储玩家位置,playerPos[0]表示玩家A的位置,playerPos[1]表示玩家B的位置.
        static void Main(string[] args)
        {

Random r = new Random();//r是产生随机数用的
            int step = 0;           //step用于存储产生的随机数
            string msg = "";//用于存储用户踩到某位置输出的话
            bool[] isStop = { false, false };//isStop[0]表示A是否上次走到了暂停 isStop[1]表示B
            //如果走到暂停,则设置为true
            string[] name = new string[2];
            ShowUI();
            Console.WriteLine("请输入玩家A的姓名:");
            name[0] = Console.ReadLine();
            while (name[0] == "")
            {
                Console.WriteLine("玩家A的姓名不能为空,请重新输入!");
                name[0] = Console.ReadLine();
            }
            Console.WriteLine("请输入玩家B的姓名:");
            name[1] = Console.ReadLine();
            while (name[1] == "" || name[1] == name[0])
            {
                if (name[1] == "")
                {
                    Console.WriteLine("玩家B的姓名不能为空,请重新输入!");
                }
                else
                {
                    Console.WriteLine("该姓名已被玩家A占用,请重新输入!");
                }
                name[1] = Console.ReadLine();
            }
            Console.Clear();
            ShowUI();
            Console.WriteLine("对战开始......");
            Console.WriteLine("{0}用A来表示", name[0]);
            Console.WriteLine("{0}用B来表示", name[1]);
            Console.WriteLine("如果A与B在同一位置,用<>表示");
            InitialMap();
            drawMap();
            Console.WriteLine("开始游戏...");
            while (playerPos[0] < 99 && playerPos[1] < 99)
            {
                if (isStop[0] == false)
                {
                    #region 玩家A掷骰子
                    Console.WriteLine("{0}按任意键掷骰子...", name[0]);
                    ConsoleKeyInfo rec = Console.ReadKey(true);//加true后按任意键不会被显示出来.
                    if (rec.Key == ConsoleKey.Tab)
                    {
                        step = 20;//设置的外挂!
                    }
                    else
                    {
                        step = r.Next(1, 7);
                    }

Console.WriteLine("{0}掷出了{1}", name[0], step);
                    Console.WriteLine("按任意键行动...");
                    Console.ReadKey(true);
                    playerPos[0] += step;//一旦坐标发生改变,就要判断 playerPos[0]是否>99.
                    CheckPos();//检查玩家是否越界.
                    if (playerPos[0] == playerPos[1])
                    {
                        playerPos[1] = 0;
                        msg = string.Format("{0}踩到了{1},{1}退回原点", name[0], name[1]);

}
                    else
                    {
                        switch (Map[playerPos[0]])
                        {

case 0: msg = ""; //必须清空字符串
                                break;//普通,没有效果.
                            case 1: //幸运轮盘
                                Console.Clear();
                                drawMap();
                                Console.WriteLine("{0}走到了幸运,请选择运气:", name[0]);
                                Console.WriteLine("1--交换位置    2--轰炸对方");
                                int userSelect = ReadInt(1, 2);
                                if (userSelect == 1)//交换位置
                                {
                                    int temp = playerPos[0];
                                    playerPos[0] = playerPos[1];
                                    playerPos[1] = temp;
                                    msg = string.Format("{0}选择了与对方交换位置! ", name[0]);
                                }
                                else
                                {
                                    //轰炸对方
                                    playerPos[1] -= 6;
                                    CheckPos();
                                    msg = string.Format("{0}轰炸了{1},{1}退6格! ", name[0], name[1]);
                                }
                                break;
                            case 2://踩到地雷
                                playerPos[0] -= 6;
                                CheckPos();
                                msg = string.Format("{0}踩到了地雷,退6格! ", name[0]);
                                break;
                            case 3: //暂停一次
                                isStop[0] = true;
                                msg = string.Format("{0}走到红灯,暂停一次掷骰子", name[0]);
                                break;
                            case 4://时空隧道
                                playerPos[0] += 10;
                                msg = string.Format("{0}进入时空隧道,爽死了,进10格! ", name[0]);
                                break;
                        }

}
                    Console.Clear();//不清屏的话,上面还会有
                    drawMap();
                    if (msg != "")
                    {
                        Console.WriteLine(msg);
                    }
                    Console.WriteLine("{0}掷出了{1},行动完成!", name[0], step);
                    Console.WriteLine("************玩家A和玩家B的位置如下************");
                    Console.WriteLine("{0}的位置为{1}", name[0], playerPos[0] + 1);
                    Console.WriteLine("{0}的位置为{1}", name[1], playerPos[1] + 1);

#endregion
                }
                else
                {
                    //说明isStop[0] == true;
                    isStop[0] = false;
                }

if (playerPos[0] >= 99)//要进行判断,以防A已经胜利了,B还可以掷一次骰子
                {
                    break;
                }

//开始轮到B掷骰子
                if (isStop[1] == false)
                {
                    #region 玩家B掷骰子
                    Console.WriteLine("{0}按任意键掷骰子...", name[1]);
                    Console.ReadKey(true);//加true后按任意键不会被显示出来.
                    step = r.Next(1, 7);
                    Console.WriteLine("{0}掷出了{1}", name[1], step);
                    Console.WriteLine("按任意键行动...");
                    Console.ReadKey(true);
                    playerPos[1] += step;//一旦坐标发生改变,就要判断 playerPos[0]是否>99.
                    CheckPos();//检查玩家是否越界.
                    if (playerPos[0] == playerPos[1])
                    {
                        playerPos[0] = 0;//玩家B踩到A
                        msg = string.Format("{0}踩到了{1},{1}退回原点", name[1], name[0]);

}
                    else
                    {
                        switch (Map[playerPos[1]])
                        {

case 0: msg = ""; //必须清空字符串
                                break;//普通,没有效果.
                            case 1: //幸运轮盘
                                Console.Clear();
                                drawMap();
                                Console.WriteLine("{0}走到了幸运,请选择运气:", name[1]);
                                Console.WriteLine("1--交换位置    2--轰炸对方");
                                int userSelect = ReadInt(1, 2);
                                if (userSelect == 1)//交换位置
                                {
                                    int temp = playerPos[0];
                                    playerPos[0] = playerPos[1];
                                    playerPos[1] = temp;
                                    msg = string.Format("{0}选择了与对方交换位置! ", name[1]);
                                }
                                else
                                {
                                    //轰炸对方
                                    playerPos[0] -= 6;
                                    CheckPos();
                                    msg = string.Format("{0}轰炸了{1},{1}退6格! ", name[1], name[0]);
                                }
                                break;
                            case 2://踩到地雷
                                playerPos[1] -= 6;
                                CheckPos();
                                msg = string.Format("{0}踩到了地雷,退6格! ", name[1]);
                                break;
                            case 3: //暂停一次
                                isStop[1] = true;
                                msg = string.Format("{0}走到红灯,暂停一次掷骰子", name[1]);
                                break;
                            case 4://时空隧道
                                playerPos[1] += 10;
                                msg = string.Format("{0}进入时空隧道,爽死了,进10格! ", name[1]);
                                break;
                        }

}
                    Console.Clear();//不清屏的话,上面还会有
                    drawMap();
                    if (msg != "")
                    {
                        Console.WriteLine(msg);
                    }
                    Console.WriteLine("{0}掷出了{1},行动完成!", name[1], step);
                    Console.WriteLine("************玩家A和玩家B的位置如下************");
                    Console.WriteLine("{0}的位置为{1}", name[0], playerPos[0] + 1);
                    Console.WriteLine("{0}的位置为{1}", name[1], playerPos[1] + 1);

#endregion
                }
                else
                {
                    //说明isStop[1] == true;
                    isStop[1] = false;
                }
            }
            Console.Clear();
            ShowUI();
            if (playerPos[0] >= 99)
            {
                Console.WriteLine("{0}胜利了!!!!!!!!!!", name[0]);
            }
            else
            {
                Console.WriteLine("{0}胜利了!!!!!!!!!!", name[1]);
            }

Console.ReadKey();

}
        static void ShowUI()
        {
            Console.WriteLine("***********************************************");
            Console.WriteLine("*                                                        *");
            Console.WriteLine("*       骑      士     飞    行    棋              *");
            Console.WriteLine("*                                                        *");
            Console.WriteLine("***********************************************");
        }
        /// <summary>
        /// 用于地图的初始化.
        /// </summary>
        static void InitialMap()
        {
            // 用于存储在地图中为地雷的下标
            int[] luckyTurn = { 6, 23, 40, 55, 69, 83, 98 };//幸运轮盘◎ 1
            int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ 2
            int[] pause = { 9, 27, 60, 93 };//暂停的坐标▲ 3
            int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卐 4
            for (int i = 0; i < luckyTurn.Length; 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>
        /// 获得第pos坐标上位置上的图标
        /// </summary>
        /// <param name="pos">要绘制的坐标</param>
        /// <returns></returns>
        static string GetMapString(int pos)
        {
            string result = "";
            if (playerPos[0] == pos && playerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                result = "<>";
            }
            else if (playerPos[0] == pos)//判断A的位置
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                result = "A";
            }
            else if (playerPos[1] == pos)//判断B的位置
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                result = "B";
            }
            else
            {
                switch (Map[pos])
                {   //在数组中用:1.表示幸运轮盘◎1
                    //                     2.地雷☆2
                    //                     3.暂停▲3
                    //                     4.时空隧道卐4
                    //                     0.表示普通
                    case 0: Console.ForegroundColor = ConsoleColor.White; result = "□"; break;
                    case 1: Console.ForegroundColor = ConsoleColor.Green; result = "◎"; break;
                    case 2: Console.ForegroundColor = ConsoleColor.Blue; result = "☆"; break;
                    case 3: Console.ForegroundColor = ConsoleColor.Magenta; result = "▲"; break;
                    case 4: Console.ForegroundColor = ConsoleColor.Cyan; result = "卐"; break;
                }
            }
            return result;
        }
        /// <summary>
        /// 分行分列分别画出地图.
        /// </summary>
        static void drawMap()
        {
            Console.WriteLine("图例:幸运轮盘◎   地雷☆   暂停▲   时空隧道卐    普通□");
            //画第一行
            for (int i = 0; i <= 29; i++)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            for (int i = 30; i <= 34; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    //输入2个半角空格,一共28*2个
                    Console.Write("  ");
                }
                Console.WriteLine(GetMapString(i));
            }
            for (int i = 64; i >= 35; i--)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            for (int i = 65; i <= 69; i++)
            {
                Console.WriteLine(GetMapString(i));
            }
            for (int i = 70; i <= 99; i++)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            Console.ResetColor();//地图绘制完成以后,重置颜色,因为如果最后一个图标如果有颜色会有BUG.
        }
        /// <summary>
        /// 判断玩家位置是否越界
        /// </summary>
        static void CheckPos()
        {
            for (int i = 0; i < 2; i++)
            {
                if (playerPos[i] > 99)
                {
                    playerPos[i] = 99;
                }
                if (playerPos[i] < 0)
                {
                    playerPos[i] = 0;
                }
            }
        }
        //static int ReadInt()
        //{
        //    int i = ReadInt(int.MinValue, int.MaxValue);
        //    return i;
        //}
        static int ReadInt(int min, int max)
        {
            while (true)
            {
                try
                {
                    int number = Convert.ToInt32(Console.ReadLine());
                    if (number < min || number > max)
                    {
                        Console.WriteLine("输入的数只能在{0}-{1}之间,请重新输入!", min, max);
                        continue;
                    }
                    return number;
                }
                catch
                {
                    Console.WriteLine("输入的只能是数字,请重新输入!");
                }
            }

}

}
}

运行效果如下:

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima/

黑马程序员_c#基础综合练习:骑士飞行棋相关推荐

  1. 黑马程序员----小游戏代码之“骑士飞行棋”

    ----------------------  ASP.Net+Android+IO开发S .  .Net培训.期待与您交流! ---------------------- 骑士飞行棋代码如下: cl ...

  2. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  3. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  4. 黑马程序员 python 基础版 哪个老师_(看黑马程序员Python基础班视频挺好,犹豫该不该报班?)...

    看黑马程序员Python基础班视频挺好,犹豫该不该报班? 如果看视频比较好的话,还是建议自学吧,毕竟录制视频的老师不一定参与实质的讲课,且能自学也省一笔培训费用了.我是看的bilibili上黑马程序员 ...

  5. 黑马程序员-黑马程序员训练营基础测试

    ---------------------- ASP.Net+Unity开发. .Net培训.期待与您交流! ---------------------- 为了帮助更多的人了解黑马,让更多想知道黑马测 ...

  6. 黑马程序员_基础测试

    -------android培训.java培训.期待与您交流! ---------- 黑马程序员训练营基础测试题及个人代码(包含思路.步骤和基本注释) 1. 编写程序计算12+22+32+....+1 ...

  7. 黑马程序员-iOS基础-Objective-C基础(六)内存管理

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...

  8. 黑马程序员 C#基础_骑士飞行棋

    ------- Windows Phone 7手机开发..Net培训.期待与您交流! ------- 骑士飞行棋代码实现: using System; using System.Collections ...

  9. 黑马程序员——JavaScript基础1(初识 JavaScript)

    文章目录 一.初识 JavaScript 1.1 JavaScript 是什么 1.2 JavaScript 的作用 1.3 HTML/CSS/JS 的关系 1.4 浏览器执行 JS 简介 1.5 J ...

最新文章

  1. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例
  2. Yii “CDbConnection failed to open the DB connection: could not find driver解决办法
  3. 玩转Mixly – 5、Arduino AVR编程 之 逻辑
  4. 【图像处理opencv】_Jupyter基本操作
  5. jieba分词提取小说人名
  6. 这份免费AI论文太强了,我肝了!
  7. linux+有趣的指令,6个有趣的Linux命令(乐趣终端) - 第二部分
  8. 2120: 数颜色(带修莫队)
  9. pytorch学习笔记(十一):pytorch实现多层感知机
  10. 云之讯 亿美 短信的三方接口
  11. 小米路由器R1D改造记录-安装MIXBOX
  12. 手机上怎么打开md格式的文件_手机解压专家app下载
  13. GT传奇3服务器架设全攻略~!(新手篇)(转)
  14. 关于wordcloud安装
  15. C++ Awkward Digits
  16. 如何为你的APP瘦身
  17. android 键盘偶现收起之后又弹出
  18. Pytorch —— nn.Module类(nn.sequential)
  19. 运营商大数据 精准 实时为企业营销助力
  20. 微信小程序Timeline时间线效果实现

热门文章

  1. 2022/4/4-web前锋笔记p49
  2. 月入14万!字节女技术员薪资曝光:是金子总会发光!
  3. 最大公司诞生字节跳动人数突破10万!1000亿人工成本是不是硬撑?
  4. js设置背景视频全屏显示
  5. Vue路由传参和接收参数
  6. dbus总线通信的原理和使用
  7. 电脑系统崩溃怎么修复教程
  8. STM32F10xxx系统RCC讲解
  9. 数学之美_马尔科夫模型01
  10. 打脸苹果,三星新品电视“国行”售价低于“美版”