C# 基础之飞行棋

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

namespace 飞行棋
{
    class Program
    {
        //地图
        //0代表普通方块□
        //1代表选择盘◎
        //2代表地雷☆
        //3代表暂停▲
        //4代表通道卍
        static int[] map = new int[100];
        static int[] playerPos = {0,0 };
        static int step = 0; //存放骰子数
        static bool[] isStop = {false,false}; //0是A,1是B,true暂停
        static Random r = new Random(); //r产生随机数
        static string[] names = new string[2];//string[0]为A的姓名,string[1]为B的姓名
        static string msg = "";
        static void Main(string[] args)
        {
            //显示游戏名称
            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的姓名不可为空,请重新输入:");
                else
                    Console.WriteLine("B的姓名不可与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();
            DrowMap();
            Console.WriteLine("游戏开始...");
            //A B玩家轮流掷骰子
            while(playerPos[0]<99&&playerPos[1]<99)
            {

                //A 掷骰子
                if (isStop[0]) //上次走到暂停
                {
                    isStop[0] = false;
                }else{
                    #region
                    Action(0);
                    #endregion
                }

                if (playerPos[0] >= 99)
                {
                    break;
                }

                //B 掷骰子
                if (isStop[1])//上次走到暂停
                {
                    isStop[1] = false;
                }
                else
                {
                    #region
                    Action(1);
                    #endregion
                }
                if (playerPos[1] >= 99)
                {
                    break;
                }
            }
            //判断胜负条件
            Console.Clear();
            ShowUI();
            if (playerPos[0] >= 99)
            {
                Console.WriteLine("{0}胜利了", names[0]);
            }
            else {
                Console.WriteLine("{0}胜利了", names[1]);
            }
            Console.ReadKey();
        }
        //掷骰子方法,传0为A掷,传1为B掷,
        static void Action(int i)
        {
            int now = i;
            int other = 1 - i; //1-i为对方坐标
            Console.WriteLine("{0}按任意键开始掷骰子", names[now]);
            Console.ReadKey(true);
            step = r.Next(1, 7);//产生一个随机整数
            Console.WriteLine("{0}掷出了{1}", names[now], step);
            Console.WriteLine("{0}按任意键行动", names[now]);
            playerPos[now] = playerPos[now] + step;
            CheckPos();
            if (playerPos[now] == playerPos[other])
            {
                playerPos[other] = 0;
                msg = string.Format("{0}踩到了{1},{1}退回原点", names[now], names[other]);
            }
            else
            {
                switch (map[playerPos[now]])
                {
                    case 0://普通
                        msg = "";
                        break;
                    case 1://选择盘
                        Console.Clear();
                        DrowMap();
                        Console.WriteLine("{0}请选择操作:", names[now]);
                        Console.WriteLine("1 - 交换位置  2 - 炸弹");
                        int input = ReadInt(1, 2);
                        if (input == 1)
                        {
                            int temp = playerPos[0];
                            playerPos[0] = playerPos[1];
                            playerPos[1] = temp;
                            msg = string.Format("{0}交换了{1}", names[now], names[other]);
                        }
                        else
                        {
                            playerPos[other] -= 6;
                            msg = string.Format("{0}选择{1}退6格", names[now], names[other]);
                        }

                        break;
                    case 2://地雷
                        playerPos[now] -= 6;
                        msg = string.Format("{0}踩炸弹,退6格", names[now]);
                        break;
                    case 3:
                        msg = string.Format("{0}暂停一次", names[now]);
                        isStop[now] = true;
                        break;
                    case 4://通道
                        playerPos[now] += 6;
                        msg = string.Format("{0}进通道,进6格", names[now]);
                        break;
                    default:
                        break;
                }
            }
            CheckPos();//越界判断
            Console.ReadKey(true);
            Console.Clear();
            DrowMap();
            if (msg != "")
                Console.WriteLine(msg);
            Console.WriteLine("{0}的位置为{1},{2}的位置为{3}", names[0], playerPos[0] + 1, names[1], playerPos[1] + 1);
            Console.ReadKey();
        }
        static int ReadInt(int min, int max)
        {
            while (true)
            {
                try
                {
                    int num = Convert.ToInt32(Console.ReadLine());
                    if (num < min || num > max)
                    {
                        Console.WriteLine("只能输入{0}和{1}之间", min, max);
                        continue;
                    }
                    return num;
                }
                catch (Exception)
                {
                    Console.WriteLine("只能输入数字");
                }
            }
        }
        /// <summary>
        /// 根据map数组画地图
        /// </summary>
        static void DrowMap()
        {
            Console.WriteLine("图例:选择盘◎,  地雷☆,  暂停▲,  通道卍");
            //第一行30个图形
            for (int i = 0; i < 30; i++)
            {
                Console.Write(GetMapString(i));
            }
            Console.Write("\n"); //换行
            //5行开头为空格,画图形后换行
            for (int i = 30; i < 35; i++)
            {
                Console.Write("                                                          ");
                Console.Write(GetMapString(i));
                Console.Write("\n");
            }
            //中间30个图形
            for (int i = 64; i >= 35; i--)
            {
                Console.Write(GetMapString(i));
            }
            Console.Write("\n"); //换行
            //这5行后边为空格,并换行
            for (int i = 65; i < 70; i++)
            {
                Console.Write(GetMapString(i));
                Console.Write("\n");
            }
            //下边30个图形
            for (int i = 70; i < 100; i++)
            {
                Console.Write(GetMapString(i));
            }
            Console.Write("\n");
            Console.ResetColor();
        }
        //根据位置返回要画的图形
        static string GetMapString(int pos)
        {
            string result = "";
            if (playerPos[0] == pos && playerPos[1]==pos)
            {
                Console.ForegroundColor = ConsoleColor.White;
                result = "<>";
            }
            else if (playerPos[0] == pos)
            {
                Console.ForegroundColor = ConsoleColor.White;
                result = "Α";
            }
            else if (playerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.White;
                result = "Β";
            }
            else
            {
                switch (map[pos])
                {
                    case 0: Console.ForegroundColor = ConsoleColor.White; result = "□"; break;
                    case 1: Console.ForegroundColor = ConsoleColor.DarkYellow; result = "◎"; break;
                    case 2: Console.ForegroundColor = ConsoleColor.DarkRed; result = "☆"; break;
                    case 3: Console.ForegroundColor = ConsoleColor.DarkGreen; result = "▲"; break;
                    case 4: Console.ForegroundColor = ConsoleColor.Yellow;  result = "卍"; break;
                    default: break;
                }
            }
            return result;
        }
        static void CheckPos()
        {
            for (int i = 0; i < 2; i++)
            {
                if (playerPos[i] > 99)
                    playerPos[i] = 99;
                else if (playerPos[i] < 0)
                {
                    playerPos[i] = 0;
                }
            }

        }
        /// <summary>
        /// 用于绘制飞行棋名称
        /// </summary>
        static void ShowUI()
        {
            Console.WriteLine("****************************************************");
            Console.WriteLine("*                                                  *");
            Console.WriteLine("*                   飞行棋                         *");
            Console.WriteLine("*                                                  *");
            Console.WriteLine("****************************************************");
        }
        /// <summary>
        /// 游戏开始时初始化地图
        /// </summary>
        static void InitialMap() {
            int[] selectNum = { 6, 23, 40, 55, 69, 83 }; //选择盘位置
            int[] backNum = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷位置
            int[] parseNum = { 9, 27, 60, 93 };//暂停位置
            int[] goNum = { 20, 25, 45, 63, 72, 88, 90 };//通道位置
            foreach (int i in selectNum)
            {
                map[i] = 1;
            }
            foreach (int i in backNum)
            {
                map[i] = 2;
            }
            foreach (int i in parseNum)
            {
                map[i] = 3;
            }
            foreach (int i in goNum)
            {
                map[i] = 4;
            }
        }
    }
}

C# 基础之飞行棋,布布扣,bubuko.com

时间: 2024-09-29 16:51:31

C# 基础之飞行棋的相关文章

C#基础:飞行棋游戏

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pachee { class Program { #region 静态字段 // 关卡数量 public static int[] Maps = new int[100]; // 玩家坐标 public static int[] PlayerPos

007 飞行棋小项目

2016-01-16 1.画游戏头2.初始化地图(加载地图所需要的资源)将整数数组中的数字编程控制台中显示的特殊字符串的这个过程 就是初始化地图3.画地图 4.玩游戏 游戏规则:如果玩家A踩到了玩家B  玩家B退6格  踩到了地雷 退6格踩到了时空隧道 进10格踩到了幸运轮盘 1交换位置  2 轰炸对方 使对方退6格踩到了暂停  暂停一回合  踩到了方块  神马都不干 主要引用用的方法 1 Map[50] 2 if(map[40]==1) 3 { 4 Console.WriteLine("◎&q

传智的光辉岁月-C#基础篇六飞行棋

飞行棋业务:我们要能够让2个玩家 在地图上 按照游戏规则 进行游戏 玩家类 变量:玩家位置,玩家名称,玩家标识,玩家是否在陷阱中 方法:投骰子,移动 地图类 变量:地图数据数组 方法:初始化地图数据,绘制地图,显示Logo 游戏规则类 变量: 方法:第一次游戏说明,判断玩家位置是否有障碍物,根据不同障碍物执行不同操作,判断游戏是否结束 using System; using System.Collections.Generic; using System.Linq; using System.T

0505.Net基础班第八天(飞行棋)

1.画游戏头 2.初始化地图(加载地图所需要的资源) 将整数数组中的数字编程控制台中显示的特殊字符串的这个过程 就是初始化地图 3.画地图 4.玩游戏 游戏规则: 如果玩家A踩到了玩家B  玩家B退6格  踩到了地雷 退6格 踩到了时空隧道 进10格 踩到了幸运轮盘 1交换位置  2 轰炸对方 使对方退6格 踩到了暂停  暂停一回合  踩到了方块  神马都不干 Map[50] if(map[40]==1) {  Console.WriteLine("◎"); } //初始化地图   M

飞行棋2.0--输完姓名后全自动,可修改为人机交互模式

1 // 2 // main.m 3 4 #import <Foundation/Foundation.h> 5 #import "GameController.h" 6 int main(int argc, const char * argv[]) 7 { 8 GameController *ctl = [GameController new]; 9 [ctl startGame]; 10 11 // GameMap *map = [GameMap new]; 12 //

纠正飞行棋的错误

错误1:在运行暂停功能时,这个暂停功能可以实现,但无法显示提示信息. 改正如下: case 3: Console.Clear(); Program.drawmap(); isstop[0] = true; Console .WriteLine ("{0}走到了暂停,暂停一次!", name[0]); Console.WriteLine("按任意键继续...");  Console.ReadKey(true); 原因:缺少Console.WriteLine("

骑士飞行棋第三版(上色)

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 骑士飞行棋 8 { 9 class Program 10 { 11 12 //在下面的数组存储我们游戏地图各个关卡 13 //数组的小标为0的元素对应地图上的第一格 下标为1的元素对应第二格...下标为n的元素对应n+1

局域网多人对战飞行棋的实现

在项目之间有段“空项期”,上个项目刚刚完成,下个项目还没落实,时间比较充裕.去年9月份就经历了这么一次短暂的“空项期”,那时偶还是一名前端工作者,C#使用起来毫不含糊,还自己整过一个类SCSF的MVP框架AngelFrame(详见之前博客:http://www.cnblogs.com/wgp13x/p/99c2adc52d8f0dff30a038841ac32872.html).在那段“空项期”之前,有位朋友托我做个小游戏,偶也满口的答应,只可惜之前项目太忙没时间做,就一直耽搁了,正好有这段“空

骑士飞行棋第二版(已完善)

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 骑士飞行棋 8 { 9 class Program 10 { 11 12 //在下面的数组存储我们游戏地图各个关卡 13 //数组的小标为0的元素对应地图上的第一格 下标为1的元素对应第二格...下标为n的元素对应n+1