美文网首页
13.飞行棋面向过程

13.飞行棋面向过程

作者: Joe_Game | 来源:发表于2018-05-19 13:39 被阅读0次
    • 步骤
    1. 棋盘玩家A在起点
    2. 指定玩家A的位置
    3. 读入玩家A的位置
    4. 从键盘输入玩家A走几步
    5. 棋盘显示玩家B
    6. 提取显示棋盘方法
    7. 玩家B向前走几步
    8. 判断输赢
    9. 添加地雷
    10. 踩地雷
    11. 显示火箭
    12. 坐上火箭
    13. 提取Go方法
    14. 踩到地雷坐上飞机
    15. 3个地雷3个火箭
    16. 连续踩地雷或火箭
    17. 自画棋盘设置地雷和火箭
    18. 检查自画地图是否死循环
    19. 向前步数为随机
    • 代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _01飞行棋面向过程
    {
        class Program
        {
            static int[] array = new int[20];
    
            static bool isSetFly = true;
            static void Main(string[] args)
            {
                int posA = 0;//玩家A的位置
                int posB = 0;//玩家B的位置
                
                int step = 0;//玩家走的步数
    
                int userInputPos = 0;//玩家输入的位置
    
                Console.WriteLine("请输入放置地雷的位置(输入负数结束):");
                userInputPos = int.Parse(Console.ReadLine());
                while (userInputPos > 0 && userInputPos < array.Length)
                {
                    array[userInputPos] = 1;
                    userInputPos = int.Parse(Console.ReadLine());
                }
    
                Console.WriteLine("请输入放置火箭的位置(输入负数结束):");
                userInputPos = int.Parse(Console.ReadLine());
                while (userInputPos > 0 && userInputPos < array.Length)
                {
                    if (array[userInputPos] != 1)
                    {
                        //判断火箭放上去之后会不会死循环
                        Go(userInputPos, 3);
                        if (isSetFly)
                        {
                            array[userInputPos] = 2;
                        }
                        else
                        {
                            Console.WriteLine("造成死循环,不能在该位置设置火箭");
                        }
                    }
                    else
                    {
                        Console.WriteLine("该位置不能被重复设置。");
                    }
                    userInputPos = int.Parse(Console.ReadLine());
                }
                
    
    
                Show(array.Length, posA, posB);
    
                while (posA < array.Length - 1 && posB < array.Length - 1)
                {//玩家A和玩家B都没到终点,继续走
                    Console.WriteLine("请玩家A按回车键投掷骰子:");
                    Console.ReadLine();
                    Random r = new Random();
                    step = r.Next(1, 7);
                    Console.WriteLine("玩家A走了{0}步", step);
    
                    posA = Go(posA, step);
                    Show(array.Length, posA, posB);
                    if (posA >= array.Length - 1)
                    {
                        break;
                    }
    
                    Console.WriteLine("请玩家B按回车键投掷骰子:");
                    Console.ReadLine();
                    step = r.Next(1, 7);
                    Console.WriteLine("玩家B走了{0}步", step);
    
                    posB = Go(posB, step);
    
                    Show(array.Length, posA, posB);
                }
                if (posA >= array.Length - 1)
                {//玩家A到达终点
                    Console.WriteLine("玩家A赢了!!!!");
                }
                else if (posB >= array.Length - 1)
                {//玩家B到达终点
                    Console.WriteLine("玩家B赢了!!!!");
                }
                Console.Read();
            }
            //口 => 口 ● => ● 口 ●
            private static int Go(int pos, int step)
            {
                int oldPos = pos;
                pos = pos + step;//玩家A新的位置 = 玩家A现在的位置 + 要走的步数
                if (pos >= array.Length)
                {//玩家到达终点或超出终点
                    return pos;
                }
                while (array[pos] == 1 || array[pos] == 2)
                {
                    if (array[pos] == 1)
                    {//踩到地雷
                        pos = pos - 2;
                        Console.WriteLine("踩到地雷,后退2步");
                    }
                    else if (array[pos] == 2)
                    {//坐上火箭
                        pos = pos + 3;
                        Console.WriteLine("做上火箭,加3步");
                    }
                   // Console.WriteLine("oldPos:" + oldPos + "  pos:" + pos);
                    if (pos == oldPos)
                    {
                        isSetFly = false;
                    }
                }
                return pos;
            }
    
            /// <summary> 显示棋盘 </summary>
            private static void Show(int length, int posA, int posB)
            {
                for (int i = 0; i < length; i++)
                {
                    if (i == posA && i == posB)
                    {
                        Console.Write("AB");
                    }
                    else if (i == posA)//如果等于玩家输入的位置
                    {
                        Console.Write("A");
                    }
                    else if (i == posB)
                    {
                        Console.Write("B");
                    }
                    else if (array[i] == 1)
                    {
                        Console.Write("●");
                    }
                    else if (array[i] == 2) 
                    {
                        Console.Write("=>");
                    }
                    else
                    {
                        Console.Write("口");
                    }
                }
                Console.WriteLine();
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:13.飞行棋面向过程

          本文链接:https://www.haomeiwen.com/subject/jxgodftx.html