黑马程序员技术交流社区

标题: 骑士飞行棋中一个小问题 [打印本页]

作者: 李志祥    时间: 2012-4-3 19:24
标题: 骑士飞行棋中一个小问题
本帖最后由 李志祥 于 2012-4-18 15:05 编辑

  骑士飞行棋/画第一列        
      for (int i = 30; i <= 34; i++)
            {
                //绘制29个双空格
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }
                if (playerPos[0] == i && playerPos[1] == i)//判断A和B是否在一个地方
                {
                    Console.WriteLine("<>");此处我用Write不用WriteLine执行的时候输出没有出错,这么用Write写,合理吗,还是我没有发现错误?

                }
                else if (playerPos[0] == i)
                {
                    Console.WriteLine("A");//此处我用Write不用WriteLine执行的时候输出没有出错,这么用Write写,合理吗,还是我没有发现错误?

                }
                else if (playerPos[1] == i)
                {
                    Console.WriteLine("B");此处我用Write不用WriteLine执行的时候输出没有出错,这么用Write写,合理吗,还是我没有发现错误?


                }
                else
                {
                    switch (Map)//switch-case语句的基本语法需要再熟悉下
                    {
                        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;
                    }
                }
            }

作者: 陆亚    时间: 2012-4-3 19:31
解决问题,调试。
作者: 徐瑞    时间: 2012-4-3 20:07
  if (playerPos[0] == i && playerPos[1] == i)//判断A和B是否在一个地方
                {
                    Console.WriteLine("<>");此处我用Write不用WriteLine执行的时候输出没有出错,这么用Write写,合理吗,还是我没有发现错误?

                }
                else if (playerPos[0] == i)
                {
                    Console.WriteLine("A");//此处我用Write不用WriteLine执行的时候输出没有出错,这么用Write写,合理吗,还是我没有发现错误?

                }
                else if (playerPos[1] == i)
                {
                    Console.WriteLine("B");

以下为新手的判断,不足之处请指正.

这三个<>AB 判断情况,playerpos[0]中此时的的值 应为你当时初始设置的值,不在i的30-34之间

,所以这三个判断情况都用不上,然后程序进入switch 语句进行判断

而你switch语句中.都加入了writeline,自然在竖列上输出没有错误.因为没有<>AB在竖列上的情况.

可以试着把playerpos[0]的值设为i所在的区间,就明白了.

writeline还是要加上的.
作者: 韩艳君    时间: 2012-4-3 20:10
Console.WriteLine();具有换行的功能;二Console.Write();就负责输出,没有换行的功能
可以定义一个GetMapString()方法
static string GetMapString(int pos)
        {

            string result = "";
            //判断A和B是否在当前要画的第i格上
            if (playerPos[0] == pos && playerPos[1] == pos)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                result = "<>";
            }
            else if (playerPos[0] == pos)//A在当前画的格上
            {
                result = "A";
            }
            else if (playerPos[1] == pos)//B在当前画的格上
            {
                result = "B";
            }
            else
            {
                switch (Map[pos])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.White;
                        result = "□";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Red;
                        result = "◎";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.Green;
                        result = "★";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.Blue;
                        result = "▲";
                        break;
                    case 4:
                        Console.ForegroundColor = ConsoleColor.DarkBlue;
                        result = "卐";
                        break;
                }
            }
            return result;
        }

接下来再绘制第一列

//绘制第一列
            for (int i = 30; i <= 34; i++)
            {
                //绘制29个双空格
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }

                string str = GetMapString(i);
                Console.WriteLine(str);
            }

            
作者: 李志祥    时间: 2012-4-3 20:45
韩艳君 发表于 2012-4-3 20:10
Console.WriteLine();具有换行的功能;二Console.Write();就负责输出,没有换行的功能
可以定义一个GetMapS ...

恩,老师后面讲的还是比较方便的
作者: 李志祥    时间: 2012-4-3 20:47
徐瑞 发表于 2012-4-3 20:07
if (playerPos[0] == i && playerPos[1] == i)//判断A和B是否在一个地方
                {
             ...

说的对,我以后要多思考问题才行
作者: 徐刚    时间: 2012-4-3 21:00
不行的,当你开始掷骰子之后,当A,B走到竖列的位置时,再绘制地图时就会出现问题,地图就会乱掉!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2