zoukankan      html  css  js  c++  java
  • 飞行棋小项目

    1. 飞行器代码如下:

      

    namespace棋士飞行棋
    {
    internalclassProgram
    
    {
    
    //在下面的数组存储我们游戏地图的各个关卡
    
    //数组下表为0的元素对应地图上的第一格,下标为1的元素代表地图上的第2格.....下标为n的元素对应地图上的第n+1格!
    
    //在数组中用 1:表示幸运轮盘◎
    
    // 2:地雷☆
    
    // 3:暂停▲
    
    // 4:时空隧道¤
    
    // 0:表示普通□
    
    privatestaticint[] Map=newint[100];
    
    privatestaticint[] playerPos= { 0, 0 }; //playerPos[0]存玩家A的下标!playerPos[1]存玩家B的下标!
    
    privatestaticstring[] name=newstring[2]; //name[0]存玩家a的姓名,name[1]存玩家b的姓名!
    
    privatestaticbool[] isStop= { false, false };//isStop[0]表示A是否走到了暂停,isStop[1]表示B是否走到了暂停。false表示允许通过!反之不通过!
    
    privatestaticvoidMain(string[] args)
    
    {
    
    //string input = "";//用于存储用户的输入!
    
    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的姓名不能为空,请重新输入!");
    
    }
    
    if (name[1] ==name[0]) //如果A与B重名!
    
    {
    
    Console.WriteLine("你输入的姓名与玩家A【{0}】的姓名重名!请重新输入!", name[0]);
    
    }
    
    name[1] =Console.ReadLine();
    
    }
    
    Console.Clear();
    
    ShowUI();
    
    Console.WriteLine("对战开始.....");
    
    Console.WriteLine("{0}用A来表示", name[0]);
    
    Console.WriteLine("{0}用B来表示", name[1]);
    
    Console.WriteLine("如果AB在同一位置,用<>来表示");
    
     
    
    InitialMap();//初始化地图
    
    DrawMap();//绘制度图
    
    Console.WriteLine("开始游戏......");
    
    //这个循环中让玩家A和玩家B轮流掷骰子当玩家A或玩家B>=99时,则结束循环!
    
    while (playerPos[0] <99&&playerPos[1] <99)
    
    {
    
    if (isStop[0] ==false)
    
    {
    
    //玩家A掷筛子
    
    Action(0);
    
    }
    
    else
    
    {
    
    //说明isStop[0]=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}胜利了!!!!!!",name[0]);
    
    }
    
    if (playerPos[1] ==99)
    
    {
    
    Console.WriteLine("玩家{0}胜利了!!!!!!",name[1]);
    
    }
    
    Console.WriteLine("游戏结束!");
    
    Console.ReadKey();
    
    }
    
    /// <summary>
    
    ///玩家掷骰子的方法!
    
    /// </summary>
    
    /// <param name="playerNumber"></param>
    
    privatestaticvoidAction(intplayerNumber)
    
    {
    
    //playerNumber当中存的就是当前玩家的姓名、坐标、是否暂停这三个数组的下标
    
    //1-playerNumber就是对方的姓名、坐标、是否暂停这三个数组的下标
    
    // 当前为0 对方为1
    
    // 当前为1 对方为0
    
                //定义一个能够产生随机数的随机变量
    
    Randomr=newRandom();//产生随机数
    
    stringmsg="";//用于用户踩到某个关卡,所输出的话!
    
    intstemp= 0;//用于存放产生的随机数!
    
    Console.WriteLine("玩家{0}按任意键开始掷筛子.....", name[playerNumber]);
    
                //当给Console.ReadKey()传值为True时,表明用户按任意键时,屏幕不会显示按键字符。
    
    ConsoleKeyInforec=Console.ReadKey(true);
    
    //按Control+Shift+F1走捷径!这里注意:组合剑只能是在Control、Shift、Alt这三个里面选择1||2||3个,再外加一个负键就可以!不能加多个负键!
    
    if (rec.Key==ConsoleKey.F1&&rec.Modifiers== (ConsoleModifiers.Control|ConsoleModifiers.Alt))
    
    {
    
    stemp=20;
    
    }
    
    else
    
    {
    
    stemp=r.Next(1, 7);//产生随机整数!
    
    }
    
    Console.WriteLine("玩家{0}掷了:{1}", name[playerNumber], stemp);
    
    Console.WriteLine("请按任意键开始行动.......");
    
    Console.ReadKey(true);
    
    playerPos[playerNumber] =playerPos[playerNumber] +stemp;//注意,一旦坐标放生改变就要判断坐标是否>99或者<0
    
    CheckPos();
    
    if (playerPos[0] ==playerPos[1])//玩家A踩到玩家B
    
    {
    
    playerPos[1-playerNumber] =0;
    
    msg=string.Format("{0}踩到{1},{1}退回原点!", name[playerNumber], name[1-playerNumber]);
    
    }
    
    else
    
    {
    
    //判断玩家A现在的位置是否在其他关卡!
    
    switch (Map[playerPos[playerNumber]])
    
    {
    
    case0:
    
    //普通没有效果!
    
    msg="";
    
    break;
    
    case1:
    
    //走到了幸运轮盘
    
    Console.Clear();
    
    DrawMap();
    
    Console.WriteLine("{0}走到了幸运轮盘,请选择运气!", name[playerNumber]);
    
    Console.WriteLine("1--交换位置 2--轰炸对方");
    
    intuserSelect=ReadInt(1, 2);
    
    if (userSelect==1)
    
    {
    
    //要与对方交换位置
    
    inttem=playerPos[0];
    
    playerPos[0] =playerPos[1];
    
    playerPos[1] =tem;
    
    msg=string.Format("{0}选择了与对方交换位置!", name[playerNumber]);
    
    }
    
    else
    
    {
    
    //轰炸对方
    
    playerPos[1-playerNumber] =playerPos[1-playerNumber] -6;
    
    CheckPos();
    
    msg=string.Format("{0}选择了轰炸对方,{1}退6格!", name[playerNumber], name[1-playerNumber]);
    
    }
    
    break;
    
    case2:
    
    //踩到了地雷
    
    playerPos[playerNumber] =playerPos[playerNumber] -6;
    
    CheckPos();
    
     
    
    msg=string.Format("{0}踩到了地雷退6格!", name[playerNumber]);
    
    break;
    
    case3:
    
    //暂停一次
    
    isStop[0] =true;
    
    msg=string.Format("{0}走到红灯,下次暂停一次!", name[playerNumber]);
    
    break;
    
    case4:
    
    //时空隧道
    
    playerPos[playerNumber] =playerPos[playerNumber] +10;
    
    CheckPos();
    
    msg=string.Format("{0}进入时空隧道,爽死了!", name[playerNumber]);
    
    break;
    
    }
    
    }
    
    Console.Clear();
    
    DrawMap();
    
    if (msg!="")
    
    {
    
    Console.WriteLine(msg);
    
    }
    
    Console.WriteLine("{0}掷出了{1},行动完成!", name[playerNumber], stemp);
    
    Console.WriteLine("**********玩家A和玩家B的位置***********");
    
    Console.WriteLine("玩家{0}的位置在{1}", name[0], playerPos[0] +1);
    
    Console.WriteLine("玩家{0}的位置在{1}", name[1], playerPos[1] +1);
    
    }
    
     
    
    /// <summary>
    
    ///用于绘制飞行棋的名称!
    
    /// </summary>
    
    privatestaticvoidShowUI()
    
    {
    
    Console.WriteLine("*****************************");
    
    Console.WriteLine("* *");
    
    Console.WriteLine("* 骑士飞行棋 *");
    
    Console.WriteLine("* *");
    
    Console.WriteLine("*****************************");
    
    }
    
     
    
    privatestaticvoidCheckPos()
    
    {
    
    for (inti=0; i<2; i++)
    
    {
    
    if (playerPos[i] >99)
    
    {
    
    playerPos[i] =99;
    
    Console.WriteLine("");
    
    }
    
    if (playerPos[i] <0)
    
    {
    
    playerPos[i] =0;
    
    }
    
    }
    
     
    
    }
    
     
    
    /// <summary>
    
    ///对地图中的关卡进行初始化!
    
    /// </summary>
    
    privatestaticvoidInitialMap()
    
    {
    
    //用于存储在地图中为地雷的下标
    
    int[] luckyTurn= { 6, 23, 40, 55, 59, 83 }; //幸运轮盘 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 (inti=0; i<luckyTurn.Length; i++)
    
    {
    
    intpos=luckyTurn[i];
    
    Map[pos] =1;
    
    }
    
    for (inti=0; i<landMine.Length; i++)
    
    {
    
    Map[landMine[i]] =2;
    
    }
    
    for (inti=0; i<pause.Length; i++)
    
    {
    
    Map[pause[i]] =3;
    
    }
    
    for (inti=0; i<timeTunnel.Length; i++)
    
    {
    
    Map[timeTunnel[i]] =4;
    
    }
    
    }
    
    /// <summary>
    
    ///获得pos坐标上应该绘制的图案!
    
    /// </summary>
    
    /// <param name="pos">要绘制的坐标</param>
    
    /// <returns></returns>
    
    privatestaticstringGetMapString(intpos)
    
    {
    
    stringresult="";
    
    //判断A和B是否在当前要画的第i格上
    
    if (playerPos[0] ==pos&&playerPos[1] ==pos)
    
    {
    
                //改变字符颜色!
    
    Console.ForegroundColor=ConsoleColor.Yellow;
    
    result="<>";
    
    }
    
    elseif (playerPos[0] ==pos)
    
    {
    
    Console.ForegroundColor=ConsoleColor.Yellow;
    
    result="A";
    
    }
    
    elseif (playerPos[1] ==pos)
    
    {
    
    Console.ForegroundColor=ConsoleColor.Yellow;
    
    result="B";
    
    }
    
    else
    
    {
    
    switch (Map[pos])
    
    {
    
    case0:
    
    Console.ForegroundColor=ConsoleColor.White;
    
    result="□";
    
    break;
    
    case1:
    
    Console.ForegroundColor=ConsoleColor.Red;
    
    result="◎";
    
    break;
    
    case2:
    
    Console.ForegroundColor=ConsoleColor.Green;
    
    result="☆";
    
    break;
    
    case3:
    
    Console.ForegroundColor=ConsoleColor.Blue;
    
    result="▲";
    
    break;
    
    case4:
    
    Console.ForegroundColor=ConsoleColor.DarkBlue;
    
    result="¤";
    
    break;
    
    }
    
    }
    
    returnresult;
    
    }
    
     
    
    privatestaticvoidDrawMap()
    
    {
    
    //绘制图例:
    
    Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:¤");
    
    //画第一行
    
    for (inti=0; i<=29; i++)
    
    {
    
    Console.Write(GetMapString(i));
    
    }
    
    Console.WriteLine();
    
    //绘制第一列
    
    for (inti=30; i<=34; i++)
    
    {
    
    //绘制29个空格!
    
    for (intj=0; j<29; j++)
    
    {
    
    Console.Write(" ");
    
    }
    
     
    
    Console.WriteLine(GetMapString(i));
    
    }
    
    //绘制第二行
    
    for (inti=64; i>=35; i--)
    
    {
    
    Console.Write(GetMapString(i));
    
    }
    
    Console.WriteLine();
    
    //绘制第二列
    
    for (inti=65; i<=69; i++)
    
    {
    
    Console.WriteLine(GetMapString(i));
    
    }
    
    //绘制第三行
    
    for (inti=70; i<=99; i++)
    
    {
    
    Console.Write(GetMapString(i));
    
    }
    
    Console.WriteLine();
    
                //恢复字体颜色!如果最后为非白色,那么如果去掉下面这句话,后面的语句就会和最后面的字符颜色相同!
    
    Console.ResetColor();
    
    }
    
    //只允许使用两数之间的数字!
    
    privatestaticintReadInt()
    
    {
    
    inti=ReadInt(int.MinValue, int.MaxValue);
    
    returni;
    
    }
    
     
    
    privatestaticintReadInt(intmin,intmax)
    
    {
    
    while (true)
    
    {
    
    try
    
    {
    
    intnumber=Convert.ToInt32(Console.ReadLine());
    
    if (number<min||number>max)
    
    {
    
    Console.WriteLine("只能输入{0}到{1}之间的数,请重新输入!",min,max);
    
    continue;
    
    }
    
    returnnumber;
    
    }
    
    catch ()
    
    {
    
    Console.WriteLine("只能输入数字,请重新输入!");
    
    }
    
    }
    
     
    
    }
    
    }
    

      

  • 相关阅读:
    java中的Set的使用以及各种遍历方法(较为全面)
    系统图标
    监听按钮
    GUI
    【Avalon】获取隐藏元素的尺寸
    Hooks
    特性节点Attribute
    ngCloak
    邮件
    时间
  • 原文地址:https://www.cnblogs.com/taidou/p/4673256.html
Copyright © 2011-2022 走看看