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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱传波 中级黑马   /  2013-3-8 13:58  /  2146 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 朱传波 于 2013-3-8 15:33 编辑

按照老师的讲解,做了飞行棋画地图的代码,一切都很顺利,运行结果也很正确,接下来弹出的错误让我有点晕  求解答
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 骑士飞行棋
  6. {
  7.     class Program
  8.     {
  9.         //下面的数组存储我们的地图
  10.         //数组下标0代表第一格,1代表第二格,以此类推
  11.         //在数组中,1表示幸运轮盘:◎
  12.         //          2表示地雷:☆
  13.         //          3表示暂停:▲
  14.         //          4表示时空隧道:卐
  15.         //          0表示普通:□
  16.         static int[] Map = new int[100];

  17.         static int[] playerpos = { 0, 0 };//playerpos[0]存玩家A的坐标,playerpos[1]存玩家B的坐标


  18.         static void Main(string[] args)
  19.         {
  20.            
  21.             

  22.             ShowUI();//显示游戏名称
  23.             string[] names = new string[2];//names[0]存玩家A的姓名,names[1]存玩家B的姓名


  24.             Console.WriteLine("请输入玩家A的姓名");
  25.             names[0] = Console.ReadLine();
  26.             //判断用户输入的姓名是否为空,如果为空,则重新输入
  27.             while (names[0] == "")
  28.             {
  29.                 Console.WriteLine("玩家A的姓名不能为空,请重新输入!");
  30.                 names[0] = Console.ReadLine();
  31.             }
  32.             Console.WriteLine("请输入玩家B的名称");
  33.             names[1] = Console.ReadLine();
  34.             while (names [1]=="" ||names [1]==names [0])
  35.             {
  36.                 if (names[1] == "")
  37.                 {
  38.                     Console.WriteLine("玩家B的姓名不能为空");
  39.                 }
  40.                 if (names[1] == names[0])//a和b重名
  41.                 {
  42.                     Console.WriteLine("改姓名已被玩家A占用,请重新输入");
  43.                     names[1]=Console.ReadLine();
  44.                 }
  45.             
  46.             }
  47.             Console.Clear();

  48.             ShowUI();
  49.             Console.WriteLine("对战开始……");
  50.             Console.WriteLine("{0}用A来表示", names[0]);
  51.             Console.WriteLine("{0}用B来表示", names[1]);
  52.             Console.WriteLine("如果AB在同一位置,用<>来表示");
  53.             AddMap();
  54.             DrawMap();
  55.             Console.ReadKey();
  56.         }
  57.         /// <summary>
  58.         /// 用于绘制飞行棋的名称
  59.         /// </summary>
  60.         static void ShowUI()
  61.         {
  62.             Console.WriteLine("***********************************************");
  63.             Console.WriteLine("*                                             *");
  64.             Console.WriteLine("*           Bowen's 骑士飞行棋                *");
  65.             Console.WriteLine("*                                             *");
  66.             Console.WriteLine("***********************************************");
  67.         }
  68.         static void AddMap()
  69.         {
  70.         //用于存储在地图中为地雷的下标
  71.             int[] luckTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
  72.             int[] landMine = { 5,13,17,33,38,50,64,80,94};//地雷
  73.             int[] pause = { 9,27,60,93};//暂停
  74.             int[] timeTunnel = { 20,25,45,63,72,88,90};//时空隧道

  75.             for (int i=0;i<luckTurn.Length;i++)
  76.             {
  77.                 //数组中1代表幸运轮盘
  78.                 Map[luckTurn [i]]=1;
  79.             }
  80.             for (int i = 0; i < landMine.Length; i++)
  81.             {
  82.                 //数组中2代表地雷
  83.                 Map[landMine[i]] = 2;
  84.             }
  85.             for (int i = 0; i < pause.Length; i++)
  86.             {
  87.                 //数组中3代表暂停
  88.             Map [pause[i]]=3;
  89.             }
  90.             for (int i = 0; i < timeTunnel.Length; i++)
  91.             {
  92.             //数组中4代表时空隧道
  93.                 Map[timeTunnel[i]] = 4;
  94.             }

  95.                       }
  96.         public static void DrawMap()
  97.         {
  98.         //画第一行
  99.             for (int i = 0; i < 30; i++)
  100.             {
  101.                 Console.Write(GetMapString(i));     
  102.             }
  103.             //第一行绘制完成
  104.             Console.WriteLine();
  105.             //绘制第一列
  106.             for (int i = 30; i < 35; i++)
  107.             {
  108.             //绘制29个双空格
  109.                 for (int j = 0; j < 29; j++)
  110.                 {
  111.                     Console.Write("  ");
  112.                 }
  113.                 Console.Write(GetMapString(i));
  114.                 Console.WriteLine();
  115.             }
  116.              //绘制第二行
  117.             for (int i = 64; i > 34; i--)
  118.             {
  119.                 Console.Write(GetMapString(i));
  120.             }
  121.             Console.WriteLine();
  122.            //绘制 第二列
  123.             for (int i = 65; i < 70; i++)
  124.             {
  125.                 Console.Write(GetMapString(i));
  126.                 Console.WriteLine();
  127.             }
  128.             //绘制第三行
  129.             for (int i = 70; i <= 100; i++)
  130.             {
  131.                 Console.Write(GetMapString (i));
  132.             }
  133.         }
  134.         /// <summary>
  135.         /// 获得在pos坐标上应该绘制的图案
  136.         /// </summary>
  137.         /// <param name="pos">要绘制的坐标</param>
  138.         /// <returns></returns>
  139.         static string GetMapString(int pos)
  140.         {
  141.             string result="";
  142.             //先判断A和B是否在当前要画的第pos格上
  143.             if (playerpos[0] == pos && playerpos[1] == pos)
  144.             {
  145.                 result =("<>");
  146.             }
  147.             else if (playerpos[0] == pos)//判断A在当前格上
  148.             {
  149.                   result =("A");
  150.             }
  151.             else if (playerpos[1] == 1)//判断B在当前格上
  152.             {
  153.                 result =("B");
  154.             }
  155.             else
  156.             {
  157.                 switch (Map[pos])
  158.                 {
  159.                     case 0:
  160.                         result =("□");
  161.                         break;
  162.                     case 1:
  163.                         result =("◎");
  164.                         break;
  165.                     case 2:
  166.                         result =("☆");
  167.                         break;
  168.                     case 3:
  169.                         result=("▲");
  170.                         break;
  171.                     case 4:
  172.                         result =("卐");
  173.                         break;
  174.                 }
  175.             }
  176.             return result;
  177.         }
  178.     }
  179.    
  180. }
复制代码

20130308135826.png (28.95 KB, 下载次数: 57)

20130308135826.png

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 杞文明 于 2013-3-8 15:09 编辑

你好! 你的问题是这样的,你在绘制第三行时 出错了,
Map这个数组只有100个元素, 就是Map[0]------Map[99]
这是你的:

你的做法是数组是101个元素了,
这里的for循环应该是这样的
  1. <FONT color=red>//绘制第三行
  2. for (int i = 70; i < 100; i++)
  3. {
  4.      Console.Write(GetMapString(i));
  5. }</FONT>
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
我已经做过飞行棋了 呵呵额,可以一起讨论讨论呵呵呵
回复 使用道具 举报
杞文明 发表于 2013-3-8 15:07
你好! 你的问题是这样的,你在绘制第三行时 出错了,
Map这个数组只有100个元素, 就是Map[0]------Map[99]
这 ...

看到了,呵呵。谢谢:)
回复 使用道具 举报
朱传波 发表于 2013-3-8 15:33
看到了,呵呵。谢谢

呵呵呵   
回复 使用道具 举报
朱传波 发表于 2013-3-8 15:33
看到了,呵呵。谢谢

加我吧  呵呵 qq564965823 (奋斗的菜鸟)
回复 使用道具 举报
孔健 中级黑马 2013-6-29 16:59:33
7#
{:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马