c#基础---控制台应用程序飞行棋

本文分享了一款使用C#编写的控制台飞行棋游戏,详细介绍了游戏的地图绘制方法及玩家行动逻辑。通过实例帮助读者理解C#语言的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记写到这里,对c#的基础应该有所了解了,现在应该可以看懂一些c#代码,并且能写出简单的c#程序了,在这里要感谢一下传智播客.net培训的公开课,目前我所有的笔记都是边看视频教程编写的,传智播客.net培训的公开课视频确实不错,讲的很有重点,好了,废话少说,下面把我做的控制台应用程序的飞行棋的一些关键类代码贴出来,完整源码在文章最后,供大家参考,欢迎高手拍砖!

先看一下界面:

界面

图例解释:

幸运轮盘:1,与对方交换位置2,轰炸对方,使对方退后6步

地雷:踩到地雷,后退4步

暂停:暂停掷骰子一次

时空隧道:前进10步

 

先解释一下地图如何画,采用了比较笨的方法,采用一个int类型的数组,长度为100,地图上的每个点都用数字表示,0表示普通,1表示幸运轮盘,2表示地雷,3表示暂停,4表示时空隧道

用4个int数组用来存储幸运轮盘,地雷,暂停,时空隧道的坐标

获得第pos坐标上应该绘制的图案public static string GetMapString(int pos)
        {
            string result = "";
            if (playerPos[0] == pos && playerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                result = "<>";
            }
            else if (playerPos[0] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                result = "A";
            }
            else if (playerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                result = "B";
            }
            else
            {
                switch (maps[pos])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.White;
                        result = "";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Green;
                        result = "";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.DarkYellow;
                        result = "";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.Blue;
                        result = "";
                        break;
                    case 4:
                        Console.ForegroundColor = ConsoleColor.Magenta;
                        result = "";
                        break;
                }
            }
            return result;
        }

绘制地图public static void DrawMap()
        {
            Console.WriteLine("玩家   {0}:用A表示,{1}用B表示", names[0],names[1]);
            Console.WriteLine("说明   □:普通  ※:幸运轮盘  ⊙:地雷  ★:暂停  →:时空隧道");
            Console.WriteLine("{0}当前位置:{1}      {2}当前位置{3}",names[0],playerPos[0]+1,names[1],playerPos[1]+1 );
            //画第一行
            for (int i = 0; i <= 29; i++)
            {
                Console.Write(GetMapString(i));
            }
            //画右边第一列
            Console.WriteLine();
            for (int i = 30; i <= 34; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }
                Console.WriteLine(GetMapString(i));
            }
            //画第二行
            for (int i = 64; i >= 35; i--)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            //画左边第二列
            for (int i = 65; i <= 69; i++)
            {
                Console.WriteLine(GetMapString(i));
            }
            //画第三行
            for (int i = 70; i <= 99; i++)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            Console.ResetColor();
        }

解释一下如何绘制地图的,用了个比较笨的方法,GetMapString()用于获得某坐标上应该显示的图案,然后用Console.Write()输出图案

看一下地图的坐标,坐标从0开始,到99结束,总共3行2列,每一行都是30个图案,每一列5个图案,坐标点如下所示:

 

坐标

 

玩家掷骰子,并且开始行动,并判断当前关卡public static void Action(ref string firstname,ref int firstpos,ref string secname,ref int secpos)
        {
            int step = 0;//用于存放掷出的骰子数
            Console.Clear();
            DrawMap();
            Console.WriteLine("{0}按任意键开始掷骰子...", firstname);
            Console.ReadKey(true);

            Random r = new Random();//掷骰子
            step = r.Next(1, 7);
            Console.WriteLine("{0}掷出了{1}", firstname, step);
            Console.WriteLine("按任意键开始行动...");
            Console.ReadKey(true);

            firstpos = firstpos + step;
            CheckPos();//检查是否越界
            if (firstpos == secpos)//撞到对方
            {
                Console.WriteLine("{0}撞到了{1},把{1}撞到了起点!", firstname, secname);
                secpos = 0;
                Console.WriteLine("按任意键继续...");
                Console.ReadKey(true);
            }
            else//没撞到,判断玩家所在的位置是否有其它关卡
            {
                switch (maps[firstpos])
                {
                    case 0:// 普通,没有效果
                        break;
                    case 1://走到幸运轮盘
                        Console.Clear();
                        DrawMap();
                        Console.Write("{0}走到了幸运轮盘,请选择运气:", firstname);
                        Console.WriteLine("      1:与对方交换位置  2:轰炸对方");
                        int a = ReadInt(1, 2);
                        if (a == 1)
                        {
                            int temp = firstpos;
                            firstpos = secpos;
                            secpos = temp;
                            Console.WriteLine("{0}与{1}交换了位置.", firstname, secname);
                            Console.WriteLine("按任意键继续...");
                            Console.ReadKey(true);
                        }
                        else
                        {
                            secpos = secpos - 6;
                            Console.WriteLine("按任意键继续...");
                            Console.ReadKey(true);
                        }
                        break;
                    case 2://踩到地雷
                        Console.WriteLine("{0}猜到了地雷,后退4步", firstname);
                        firstpos = firstpos - 4;
                        Console.WriteLine("按任意键继续...");
                        Console.ReadKey(true);
                        break;
                    case 3://暂停一次
                        break;
                    case 4://时空隧道
                        Console.WriteLine("太爽了,{0}进入了时空隧道,前进10步...", firstname);
                        firstpos = firstpos + 10;
                        Console.WriteLine("按任意键继续...");
                        Console.ReadKey(true);
                        break;
                }
                CheckPos();
            }
            Console.Clear();
            DrawMap();
        }

基本上关键的一些代码已经完成了,剩下的就非常容易了

第一次写这么长的控制台应用程序,从学c#开始,因为比较懒,所以学的一知半解,毕业到了一个小公司,做了一个项目,B/S模式,基本上就是拖控件,随便写代码,那代码写的,估计让大牛们看到以为我是个非计算机专业的非专业人士写出来的,那个项目貌似公司也不重视,所以也没出什么问题,做了一个项目后,以为自己多牛逼了,就想到大公司看看,然后就被打击了,一直到那时候,我才开始正视自己,所以把自己当成一个从未学习过c#的菜鸟从头开始好好学,这个算是“改邪归正”后写的第一个代码,希望大家能够多多提意见!

完整源码下载  需要vs2010

转载于:https://www.cnblogs.com/zyswtwang/archive/2011/12/10/2283024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值