C#控制台实现飞行棋游戏

作者:取名字真的很难 时间:2022-03-12 04:18:40 

本文实例为大家分享了C#实现飞行棋游戏的具体代码,供大家参考,具体内容如下

游戏截图:

C#控制台实现飞行棋游戏

管理类:


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

namespace ConsoleApp1
{
class ProgramManage
{
 //随机数
 public static Random rd = new Random();
 //定义地图大小
 public static int[] Maps = new int[100];

//
 public static bool[] PlayerPause = {false,false };

//定义玩家A和玩家B的坐标,0是玩家A的坐标;1是玩家B的坐标
 public static int[] PlayerPos = new int[2];

//存储两个玩家的姓名
 public static string[] PlayerName = new string[2];

//定义名字错误类型
 public static string[] Error = {"正确","不能有数字","重名了","不能为空" };

//画游戏头
 public static void GanmeShow()
 {
  Console.ForegroundColor = ConsoleColor.Yellow;
  Console.WriteLine("*************************");
  Console.WriteLine("********飞行棋游戏*******");
  Console.WriteLine("*************************");
  Console.ForegroundColor = ConsoleColor.Green;
 }

//定义地图关卡布局
 public static void InitailMap()
 {
  int[] luckturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎
  for (int i = 0; i < luckturn.Length; i++)
  {
   Maps[luckturn[i]] = 1;
  }

int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷×
  for (int i = 0; i < landMine.Length; i++)
  {
   Maps[landMine[i]] = 2;
  }

int[] pause = { 9, 27, 60, 93 };//暂停▲
  for (int i = 0; i < pause.Length; i++)
  {
   Maps[pause[i]] = 3;
  }

int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卍
  for (int i = 0; i < timeTunnel.Length; i++)
  {
   Maps[timeTunnel[i]] = 4;
  }

}

//定义地图元素。输入坐标值,方法内部判断当前坐标应当放什么符号,返回符号值
 public static string MapElement(int i)
 {
  string Element = "0";
  //如果玩家AB坐标相同并都在当前位置则画一个“<>”
  if (PlayerPos[0] == i && PlayerPos[1] == i)
  {
   Element="<>";
  }
  //有A画A,有B画B,都没有画地图
  else if (PlayerPos[0] == i)
  {
   Element="A";
  }
  else if (PlayerPos[1] == i)
  {
   Element="B";
  }
  else
  {
   switch (Maps[i])
   {
    case 0:
     Element = "□";
     break;
    case 1:
     Element = "◎";
     break;
    case 2:
     Element = "×";
     break;
    case 3:
     Element = "▲";
     break;
    case 4:
     Element = "卍";
     break;
   }

}
  return Element;
 }

//绘制地图
 public static void DrawMap()
 {
  Console.ForegroundColor = ConsoleColor.White;
  //第一横行
  for (int i = 0; i < 30; i++)
  {
   Console.Write(MapElement(i));
  }

//第一竖行
  for (int i = 30; i < 35; i++)
  {
   Console.WriteLine();
   Console.Write("               ");
   Console.Write(MapElement(i));
  }

//第二横行
  Console.WriteLine();
  for (int i = 64; i > 34; i--)
  {
   Console.Write(MapElement(i));
  }

//第二竖行
  for (int i = 65; i < 70; i++)
  {
   Console.WriteLine();
   Console.Write(MapElement(i));
  }

//第三横行
  Console.WriteLine();
  for (int i = 70; i < 100; i++)
  {
   Console.Write(MapElement(i));
  }
  Console.WriteLine();

}

//判断姓名是否符合要求
 public static int NameJudge(string str)
 {
  int result = 0;

//判断是否为空
  if (str == "")
  {
   result = 3;
   return result;
  }
  else
  {
   result = 0;
  }

//判断是否是字符串
  for (int i = 0; i < str.Length; i++)
  {
   if (char.IsNumber(str,i))
   {
    result = 1;

return result;

}
   else
   {
    result = 0;
   }

}

//判断是否重名
  for (int i = 0; i < PlayerName.Length; i++)
  {
   if (PlayerName[i]==str)
   {
    result = 2;
    return result;
   }
   else
   {
    result = 0;
   }

}

return result;
 }

//投骰子
 public static void Play(int player)
 {

PlayerPos[player] += rd.Next(1, 7);

}

//坐标不能出地图
 public static void Limit(int player)
 {
  if (PlayerPos[player] < 0)
  {
   PlayerPos[player] = 0;
  }
  else if (PlayerPos[player] > 99)
  {
   PlayerPos[player] = 99;
  }
 }

//执行规则
 public static void GameRule(int player)
 {

//踩到对手
  if (PlayerPos[player]==PlayerPos[1-player])
  {
   PlayerPos[1 - player] -= 6;

Console.WriteLine("{0}踩到对手,对手退6格", PlayerName[player]);
  }
  //什么也没踩到
  else if (Maps[PlayerPos[player]] == 0)
  {
   Console.WriteLine("{0}玩家前进了,什么也没踩到",PlayerName[player]);

}
  //幸运轮盘
  else if (Maps[PlayerPos[player]] == 1)
  {
   Console.WriteLine("1,与对手交换位置。2,让对手退回原点");
   string chose;
   while (true)
   {
    chose = Console.ReadLine();
    if (chose == "1")
    {
     int tem = PlayerPos[player];
     PlayerPos[player] = PlayerPos[1 - player];
     PlayerPos[1 - player] = tem;
     Console.WriteLine("{0}与对手交换了位置", PlayerName[player]);
     break;
    }
    else if (chose == "2")
    {
     PlayerPos[1 - player] = 0;
     Console.WriteLine("{0}把对手打回原位", PlayerName[player]);
     break;
    }
    else
    {
     Console.WriteLine("请重新输入");
    }
   }

}
  //地雷
  else if (Maps[PlayerPos[player]] == 2)
  {
   PlayerPos[player] -= 6;
   Console.WriteLine("{0}踩到地雷了,倒退6格", PlayerName[player]);
  }
  //暂停
  else if (Maps[PlayerPos[player]] == 3)
  {
   PlayerPause[player] = true;
   Console.WriteLine("{0}暂停一回合", PlayerName[player]);
  }
  //时空隧道
  else if (Maps[PlayerPos[player]] == 4)
  {
   PlayerPos[player] += 10;
   Console.WriteLine("{0}前进10格", PlayerName[player]);
  }

}

//判断输赢
 public static string Winner()
 {
  if (PlayerPos[0]>PlayerPos[1])
  {
   return PlayerName[0];
  }
  else
  {
   return PlayerName[1];
  }
 }
}
}

实现类:


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

namespace ConsoleApp1
{

class Program
{
 static void Main(string[] args)
 {
  //初始化标题
  ProgramManage.GanmeShow();
  //初始化地图关卡
  ProgramManage.InitailMap();

//输入名字
  string name;
  for (int i = 0; i < ProgramManage.PlayerName.Length; i++)
  {
   Console.WriteLine("请输入玩家{0}的名字", i+1);
   name = Console.ReadLine();
   while (ProgramManage.NameJudge(name)!=0)
   {
    Console.WriteLine("名字格式不对,{0},请重新输入", ProgramManage.Error[ProgramManage.NameJudge(name)]);
    name = Console.ReadLine();
   }
   ProgramManage.PlayerName[i] = name;
  }

//刷新界面
  Console.Clear();
  ProgramManage.GanmeShow();
  Console.WriteLine("玩家A名字是{0},玩家B名字{1}", ProgramManage.PlayerName[0], ProgramManage.PlayerName[1]);
  ProgramManage.DrawMap();

//游戏主循环
  //初始化玩家A开始
  int player = 0;

//两个玩家都没在终点的时候不停的玩游戏
  while (ProgramManage.PlayerPos[0]<99&&ProgramManage.PlayerPos[1]<99)
  {

//判断当前玩家是否暂停,如果暂停了就停一回合
   if (ProgramManage.PlayerPause[player]==false)
   {
    Console.WriteLine("轮到玩家{0}敲回车投骰子", ProgramManage.PlayerName[player]);
    Console.ReadKey();
    //玩家player投骰子
    ProgramManage.Play(player);
    ProgramManage.Limit(player);

//清空界面
    Console.Clear();

//执行规则,如果踩到了关卡,一直执行,直到踩到空白点位置
    while (true)
    {
     if (ProgramManage.Maps[ProgramManage.PlayerPos[player]] != 0)
     {
      ProgramManage.GameRule(player);
      ProgramManage.Limit(player);
     }
     ProgramManage.GameRule(player);
     break;
    }
    ProgramManage.Limit(player);

//变化玩家
    player = 1 - player;

//刷新地图
    ProgramManage.DrawMap();
   }
   else
   {
    //当前玩家恢复暂停
    ProgramManage.PlayerPause[player] = false;
    //下一回合让给另一个玩家
    player = 1 - player;
    continue;
   }

}
  //游戏结束
  Console.WriteLine("玩家{0}赢了", ProgramManage.Winner());
  Console.ReadKey();
 }
}
}

来源:https://blog.csdn.net/qq_20662097/article/details/89085804

标签:C#,控制台,飞行棋
0
投稿

猜你喜欢

  • android事件总线EventBus3.0使用方法详解

    2022-02-17 16:30:41
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    2022-02-10 19:38:49
  • Java8 CompletableFuture runAsync学习总结submit() execute()等

    2023-05-25 04:13:43
  • 深入理解Java高级特性——注解

    2021-05-23 20:28:54
  • java与微信小程序实现websocket长连接

    2021-09-10 11:32:11
  • idea项目的左侧目录没了如何设置

    2022-03-21 15:45:43
  • Java数据机构中关于并查集的详解

    2022-09-05 13:23:53
  • android RecyclerView实现条目Item拖拽排序与滑动删除

    2023-03-20 20:50:36
  • Java中遍历ConcurrentHashMap的四种方式详解

    2023-11-17 08:54:41
  • Android AndBase框架内部封装实现进度框、Toast框、弹出框、确认框(二)

    2022-01-14 12:18:38
  • 详解使用Docker搭建Java Web运行环境

    2023-10-24 15:32:58
  • Android实现移动小球和CircularReveal页面切换动画实例代码

    2023-03-03 03:45:50
  • 详解C#用new和override来实现抽象类的重写区别

    2022-12-02 01:50:51
  • C#对多个集合和数组的操作方法(合并,去重,判断)

    2021-12-11 14:02:44
  • Java实现五子棋(附详细源码)

    2023-10-19 15:20:54
  • unity 切换场景不销毁物体问题的解决

    2022-04-29 11:26:06
  • Android中.9.png图片的使用及制作

    2023-04-05 02:50:36
  • c#解压文件的实例方法

    2022-04-25 09:49:40
  • Android EditText实现关键词批量搜索示例

    2022-12-09 06:20:21
  • Android实现秒表功能

    2023-08-21 02:15:41
  • asp之家 软件编程 m.aspxhome.com