A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李志祥 中级黑马   /  2012-4-3 19:24  /  2060 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李志祥 于 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;
                    }
                }
            }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
解决问题,调试。
回复 使用道具 举报
  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还是要加上的.

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
宋天琪 + 1
李志祥 + 6

查看全部评分

回复 使用道具 举报
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);
            }

            

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
韩艳君 发表于 2012-4-3 20:10
Console.WriteLine();具有换行的功能;二Console.Write();就负责输出,没有换行的功能
可以定义一个GetMapS ...

恩,老师后面讲的还是比较方便的
回复 使用道具 举报
徐瑞 发表于 2012-4-3 20:07
if (playerPos[0] == i && playerPos[1] == i)//判断A和B是否在一个地方
                {
             ...

说的对,我以后要多思考问题才行
回复 使用道具 举报
不行的,当你开始掷骰子之后,当A,B走到竖列的位置时,再绘制地图时就会出现问题,地图就会乱掉!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马