本人刚学C#,把苏坤老师视频中的代码分享下,跟新手一起学习~- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 苏坤方法_飞行棋
- {
- class Program
- {
- static int[] Map = new int[100];
- static int[] playerPos = { 0, 0 };//playerPos[0]存玩家A的下标,playerPos[1]存玩家B的下标
- static string[] names = new string[2];//names[0]存储玩家A的姓名,names[1]存储玩家B的姓名
- static bool[] isStop = { false, false };//isStop[0]表示A是否上一次走到了暂停,isStop[1]表示B上一次是否走到暂停,如果走到暂停,则设置其值为true
- static void Main(string[] args)
- {
- //在下面的数组存储我们游戏地图各个关卡
- //数组的下标为0的元素对应地图上的第1格,下标为1的元素对应第2格...下标为n的元素对应n+1格
- //在数组中用 1:表标幸运轮盘◎
- // 2:地雷☆
- // 3:暂停▲
- // 4:时空隧道卐
- // 5:表示普通□
-
- ShowUI();//显示游戏的名称
- Console.WriteLine("请输入玩家A的姓名?");
- names[0] = Console.ReadLine();
- //判断用户输入的内容是否为空,如果为空,则让用户重新输入
- while (names[0] == "")
- {
- Console.WriteLine("玩家A的姓名不能为空,请重新输入!");
- names[0] = Console.ReadLine();
- }
- Console.WriteLine("请输入玩家B的姓名?");
- names[1] = Console.ReadLine();
- while (names[1] == "" || names[1] == names[0])
- {
- if (names[1] == "")
- {
- Console.WriteLine("玩家B的姓名不能为空,请重新输入!");
- }
- if (names[1] == names[0]) //a和b重名
- {
- Console.WriteLine("该姓名已被玩家A占用,请重新输入!");
- }
- names[1] = Console.ReadLine();
- }
- Console.Clear();
- ShowUI();
- Console.WriteLine("对战开始......");
- Console.WriteLine("{0}用A来表示", names[0]);
- Console.WriteLine("{0}用B来表示", names[1]);
- Console.WriteLine("如果AB在同一位置,用<>来表示");
- InitialMap();//初始化地图
- DrawMap();//绘制地图
- Console.WriteLine("开始游戏......");
- //这个循环中让玩家A和玩家B轮流掷骰子,当玩家A或者玩家B的坐标>=99时,则结束循环.
- //那么循环条件就是
- while (playerPos[0] < 99 && playerPos[1] < 99)
- {
- if (isStop[0] == false)
- {
- Action(0);
- }
- else
- {
- //说明isStop=true
- isStop[0] = false;
- }
- if (playerPos[0] >= 99)
- {
- break;
- }
- if (isStop[1] == false)
- {
- Action(1);
- }
- else
- {
- isStop[1] = false;
- }
- }
- //判断谁胜利,谁失败
- Console.Clear();
- ShowUI();
- if (playerPos[0] >= 99)
- {
- Console.WriteLine("{0}胜利了!!!!!!", names[0]);
- }
- else
- {
- Console.WriteLine("{0}胜利了!!!!!!", names[1]);
- }
- Console.ReadKey();
- }
- /// <summary>
- /// A或B掷骰子的方法
- /// </summary>
- /// <param name="playerNumber">A掷骰子传0过来,B掷骰子传1过来</param>
- static void Action(int playerNumber)
- {
- //playerNumber中存的就是当前玩家 姓名 坐标 是否暂停 这三个数组的下标
- //1-playNumber就是对方的姓名 坐标 是否暂停 的下标
- //当前 0,对方1
- //当前 1, 对方0
- Random r = new Random();//r是产生随机数用的 类的对象
- string msg = "";//用于存储用户踩到某关卡,输出的话
- int step = 0;//用于存放产生的随机数
- Console.WriteLine("{0}按任意键开始掷骰子......", names[playerNumber]);
- ConsoleKeyInfo rec = Console.ReadKey(true);//定义一个ConsoleKeyInfo型的变量,接收Console.ReadKey(true)返回的结构体信息
- step = r.Next(1, 7);//产生一个1-6之间的随机整数
- if (rec.Key == ConsoleKey.Tab &&rec.Modifiers ==(ConsoleModifiers.Control | ConsoleModifiers.Shift))
- {
- ConsoleKeyInfo cc = Console.ReadKey( );
- if (cc.Key == ConsoleKey.F1)
- {
- step = ReadInt(1, 100);
- }
- }
- Console.WriteLine("{0}掷出了:{1}", names[playerNumber], step);
- Console.WriteLine("按任意键开始行动......");
- Console.ReadKey(true);
- playerPos[playerNumber] = playerPos[playerNumber] + step;//注意:一旦坐标发生改变,就该判断 坐标值是否>99或者<0
- CheckPos();//检测坐标是否越界
- if (playerPos[0] == playerPos[1])//玩家A踩到玩家B
- {
- playerPos[1-playerNumber] = 0;
- msg = string.Format("{0}踩到了{1},{1}退回原点", names[playerNumber], names[1-playerNumber]);
- }
- else
- {//没踩到,要判断玩家A现在所在的位置是否有其他关卡
- switch (Map[playerPos[playerNumber]])
- {
- case 0:
- //普通,没有效果.
- msg = "";
- break;
- case 1:
- //走到了 幸运轮盘关卡.
- Console.Clear();
- DrawMap();
- Console.WriteLine("{0}走到了幸运轮盘,请选择运气?", names[playerNumber]);
- 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}选择了与对方交换位置!", names[playerNumber]);
- }
- else
- {
- //轰炸对方
- playerPos[1-playerNumber] = playerPos[1-playerNumber] - 6;
- CheckPos();
- msg = string.Format("{0}轰炸了{1},{1}退6格", names[playerNumber], names[1-playerNumber]);
- }
- break;
- case 2:
- //踩到了地雷.
- playerPos[playerNumber] = playerPos[playerNumber] - 6;
- CheckPos();
- msg = string.Format("{0}踩到了地雷,退6格", names[playerNumber]);
- break;
- case 3:
- //暂停一次.
- isStop[playerNumber] = true;
- msg = string.Format("{0}走到红灯,下次暂停一次!", names[playerNumber]);
- break;
- case 4:
- //时空隧道.
- playerPos[playerNumber] = playerPos[playerNumber] + 10;
- CheckPos();
- msg = string.Format("{0}进入时空隧道,爽死了,进10步!", names[playerNumber]);
- break;
- }
- }
- Console.Clear();
- DrawMap();
- if (msg != "")
- {
- Console.WriteLine(msg);
- }
- Console.WriteLine("{0}掷出了{1},行动完成!", names[playerNumber], step);
- Console.WriteLine("**********************玩家A和玩家B的位置如下***************************");
- Console.WriteLine("{0}的位置为{1}", names[0], playerPos[0] + 1);
- Console.WriteLine("{0}的位置为{1}", names[1], playerPos[1] + 1);
- }
复制代码 |