本帖最后由 朱传波 于 2013-3-8 15:33 编辑
按照老师的讲解,做了飞行棋画地图的代码,一切都很顺利,运行结果也很正确,接下来弹出的错误让我有点晕 求解答- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace 骑士飞行棋
- {
- class Program
- {
- //下面的数组存储我们的地图
- //数组下标0代表第一格,1代表第二格,以此类推
- //在数组中,1表示幸运轮盘:◎
- // 2表示地雷:☆
- // 3表示暂停:▲
- // 4表示时空隧道:卐
- // 0表示普通:□
- static int[] Map = new int[100];
- static int[] playerpos = { 0, 0 };//playerpos[0]存玩家A的坐标,playerpos[1]存玩家B的坐标
- static void Main(string[] args)
- {
-
-
- ShowUI();//显示游戏名称
- string[] names = new string[2];//names[0]存玩家A的姓名,names[1]存玩家B的姓名
- Console.WriteLine("请输入玩家A的姓名");
- names[0] = Console.ReadLine();
- //判断用户输入的姓名是否为空,如果为空,则重新输入
- while (names[0] == "")
- {
- Console.WriteLine("玩家A的姓名不能为空,请重新输入!");
- names[0] = Console.ReadLine();
- }
- Console.WriteLine("请输入玩家B的名称");
- names[1] = Console.ReadLine();
- while (names [1]=="" ||names [1]==names [0])
- {
- if (names[1] == "")
- {
- Console.WriteLine("玩家B的姓名不能为空");
- }
- if (names[1] == names[0])//a和b重名
- {
- Console.WriteLine("改姓名已被玩家A占用,请重新输入");
- names[1]=Console.ReadLine();
- }
-
- }
- Console.Clear();
- ShowUI();
- Console.WriteLine("对战开始……");
- Console.WriteLine("{0}用A来表示", names[0]);
- Console.WriteLine("{0}用B来表示", names[1]);
- Console.WriteLine("如果AB在同一位置,用<>来表示");
- AddMap();
- DrawMap();
- Console.ReadKey();
- }
- /// <summary>
- /// 用于绘制飞行棋的名称
- /// </summary>
- static void ShowUI()
- {
- Console.WriteLine("***********************************************");
- Console.WriteLine("* *");
- Console.WriteLine("* Bowen's 骑士飞行棋 *");
- Console.WriteLine("* *");
- Console.WriteLine("***********************************************");
- }
- static void AddMap()
- {
- //用于存储在地图中为地雷的下标
- int[] luckTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
- int[] landMine = { 5,13,17,33,38,50,64,80,94};//地雷
- int[] pause = { 9,27,60,93};//暂停
- int[] timeTunnel = { 20,25,45,63,72,88,90};//时空隧道
- for (int i=0;i<luckTurn.Length;i++)
- {
- //数组中1代表幸运轮盘
- Map[luckTurn [i]]=1;
- }
- for (int i = 0; i < landMine.Length; i++)
- {
- //数组中2代表地雷
- Map[landMine[i]] = 2;
- }
- for (int i = 0; i < pause.Length; i++)
- {
- //数组中3代表暂停
- Map [pause[i]]=3;
- }
- for (int i = 0; i < timeTunnel.Length; i++)
- {
- //数组中4代表时空隧道
- Map[timeTunnel[i]] = 4;
- }
- }
- public static void DrawMap()
- {
- //画第一行
- for (int i = 0; i < 30; i++)
- {
- Console.Write(GetMapString(i));
- }
- //第一行绘制完成
- Console.WriteLine();
- //绘制第一列
- for (int i = 30; i < 35; i++)
- {
- //绘制29个双空格
- for (int j = 0; j < 29; j++)
- {
- Console.Write(" ");
- }
- Console.Write(GetMapString(i));
- Console.WriteLine();
- }
- //绘制第二行
- for (int i = 64; i > 34; i--)
- {
- Console.Write(GetMapString(i));
- }
- Console.WriteLine();
- //绘制 第二列
- for (int i = 65; i < 70; i++)
- {
- Console.Write(GetMapString(i));
- Console.WriteLine();
- }
- //绘制第三行
- for (int i = 70; i <= 100; i++)
- {
- Console.Write(GetMapString (i));
- }
- }
- /// <summary>
- /// 获得在pos坐标上应该绘制的图案
- /// </summary>
- /// <param name="pos">要绘制的坐标</param>
- /// <returns></returns>
- static string GetMapString(int pos)
- {
- string result="";
- //先判断A和B是否在当前要画的第pos格上
- if (playerpos[0] == pos && playerpos[1] == pos)
- {
- result =("<>");
- }
- else if (playerpos[0] == pos)//判断A在当前格上
- {
- result =("A");
- }
- else if (playerpos[1] == 1)//判断B在当前格上
- {
- result =("B");
- }
- else
- {
- switch (Map[pos])
- {
- case 0:
- result =("□");
- break;
- case 1:
- result =("◎");
- break;
- case 2:
- result =("☆");
- break;
- case 3:
- result=("▲");
- break;
- case 4:
- result =("卐");
- break;
- }
- }
- return result;
- }
- }
-
- }
复制代码 |
|