语法基础-方案一:C#阶段项目

2017-08-07  本文已影响65人  元宇宙协会

项目名称:制作一款窗口程序的飞行棋项目
项目需求:要求至少两人对战
开发周期:两天

1.创建窗口程序

2.显示UI面板

显示UI 代码实现

3.创建游戏玩家

创建玩家代码

4.输入完毕后,进入第二个页面

清楚屏幕,重新绘制信息 这是重新绘制后的控制台程序

5.绘制地图

绘制地图前应该看到的是我们的需求,利用数组,对应下标的内容显示为1:表示暂停格▲,2:表示地雷格☆,3:表示幸运格●,4:表示穿越格∞,0:表示普通格□

image.png image.png

6.设置地图数组Map的数据

for循环 添加监视 通过循环发现已经设置好了

7.将所有特殊格写入Map数组地图中

循环遍历赋值 最终Map里面的值

8.根据数据绘制地图

先声明玩家初始位置,即复活点

设置出生点 image.png

9.完善地图

绘制第二条地图

// 画第二行
            for (int i = 30; i < 34; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }
                // 判断玩家1和玩家2 是否在当前要画的第i格上
                if (playerPos[0] == i && playerPos[1] == i)
                {
                    Console.Write("〓"); // 如果在一起就绘制此图形
                }
                else if (playerPos[0] == i)
                {
                    Console.Write("1"); // 如果不在一起,那玩家1所在i格绘制1
                }
                else if (playerPos[1] == i)
                {
                    Console.Write("2");// 如果不在一起,那玩家2所在的i格绘制2
                }
                else  // 绘制完玩家和重合位置,那么其余的格子绘制根据Map数组的下标来绘制
                {
                    switch (map[i])
                    {
                        case 0:
                            Console.WriteLine("□");
                            break;
                        case 1:
                            Console.WriteLine("▲");
                            break;
                        case 2:
                            Console.WriteLine("☆");
                            break;
                        case 3:
                            Console.WriteLine("●");
                            break;
                        case 4:
                            Console.WriteLine("∞");
                            break;
                    }
                }
             }

这里会出现两个问题:
就是在绘制第二行的时候,会出现偏差

错误问题

这是源自你在绘制第一行结束后,要进行换行

换行即可

10.抽取封装

通过对上面第一行与第二行的绘制,我们发现里面的代码重复性太大

 static string ReturnMapData(int pos)
        {
            string r = "";
            if (playerPos[0] == pos && playerPos[1] == pos)
            {
                r = "〓"; // 如果在一起就绘制此图形
            }
            else if (playerPos[0] == pos)
            {
                r = "1"; // 如果不在一起,那玩家1所在i格绘制1
            }
            else if (playerPos[1] == pos)
            {
                r = "2";// 如果不在一起,那玩家2所在的i格绘制2
            }
            else  // 绘制完玩家和重合位置,那么其余的格子绘制根据Map数组的下标来绘制
            {
                switch (map[pos])
                {
                    case 0:
                        r = "□";
                        break;
                    case 1:
                        r ="▲";
                        break;
                    case 2:
                        r ="☆";
                        break;
                    case 3:
                       r ="●";
                        break;
                    case 4:
                        r="∞";
                        break;
                }
            }
            return r;
        }
抽取方法 绘制调用抽取方法
     static void DrawMap()
        {
            // 画第一行
            for (int i = 0; i < 30; i++)
            {
                Console.Write(ReturnMapData(i));
            }
            // 第一行绘制完毕换行
            Console.WriteLine();
            // 画第二行
            for (int i = 30; i < 34; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }
                Console.WriteLine(ReturnMapData(i)); 
            }  
            // 绘制第三行,从左边往右边绘制
            for (int i = 64;  i >34 ;  i--)
            {
                Console.Write(ReturnMapData(i));
            }
            Console.WriteLine();
            // 绘制第四行
            for (int i = 65; i < 69; i++)
            {
                Console.WriteLine(ReturnMapData(i));
            }
            // 绘制第五行
            for (int i = 70; i < 100; i++)
            {
                Console.Write(ReturnMapData(i));
            }
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;
        }

11.玩家选择

玩家位置判断 玩家选择
上一篇下一篇

猜你喜欢

热点阅读