繪製100格遊戲地圖(根據「傳智播客」.NET視頻:飛行棋項目 製做)數組
這個是兩個玩家的版本。ide
- using System;
- namespace GameMap
- {
- internal class Program
- {
- //數組的下標爲0的元素對應地圖上的第1格,下標爲1的元素對應第2格…下標爲n的元素對應第n+1格
- //定義一個數組存放地圖的格數
- private static int[] Map = new int[100];
- //定義一個數組存放玩家的座標,playerPos[0] 存玩家A的座標,playerPos[1] 存玩家B的座標
- private static int[] playerPos = { 0, 0 };
- private static void Main(string[] args)
- {
- InitialMap();
- DrawMap();
- Console.ReadKey();
- }
- /// <summary>
- /// 設置地圖關卡的位置
- /// </summary>
- private static void InitialMap()
- {
- //在下面的數組存儲咱們遊戲地圖各個關卡
- //在數組中用如下數字表示相關圖標
- //1:幸運×××—◎
- //2:地雷—★
- //3:暫停—▲
- //4:時空隧道—※
- //0:普通—□
- //定義相關關卡的位置
- int[] luckyTurn = { 6, 23, 40, 55, 69, 83 }; //幸運×××1
- int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; //地雷2
- int[] pause = { 9, 27, 60, 93 }; //暫停3
- int[] timeTunel = { 20, 25, 45, 63, 72, 88, 90 }; //時空隧道4
- for (int i = 0; i < luckyTurn.Length; i++)
- {
- Map[luckyTurn[i]] = 1; //把地圖Map的第luckyTurn[i]格設置爲1(幸運×××)
- }
- for (int i = 0; i < landMine.Length; i++)
- {
- Map[landMine[i]] = 2; //把地圖Map的第landMine[i]格設置爲2(地雷)
- }
- for (int i = 0; i < pause.Length; i++) //把地圖Map的第pause[i]格設置爲3(暫停)
- {
- Map[pause[i]] = 3;
- }
- for (int i = 0; i < timeTunel.Length; i++) //把地圖Map的第timeTunel[i]格設置爲4(時空隧道)
- {
- Map[timeTunel[i]] = 4;
- }
- }
- /// <summary>
- /// 判斷當前格應該繪製什麼圖標
- /// </summary>
- /// <param name="currentNumber">當前格數</param>
- private static string MapIco(int pos)
- {
- string ico = ""; //存放要繪製的圖標字符
- if (playerPos[0] == pos && playerPos[1] == pos) //判斷玩家A、B是否同時在當前格上
- {
- ico = ("<>");
- }
- else if (playerPos[0] == pos) //判斷玩家A是否在當前格上
- {
- ico = ("A");
- }
- else if (playerPos[1] == pos) //判斷玩家B是否在當前格上
- {
- ico = ("B");
- }
- else
- {
- switch (Map[pos]) //根據當前格的值來顯示相應的圖標
- {
- case 1:
- ico = ("◎"); //1:幸運×××—◎
- break;
- case 2:
- ico = ("★"); //2:地雷—★
- break;
- case 3:
- ico = ("▲"); //3:暫停—▲
- break;
- case 4:
- ico = ("※"); //4:時空隧道—※
- break;
- default:
- ico = ("□"); //0:普通—□
- break;
- }
- }
- return ico;
- }
- /// <summary>
- /// 繪製地圖
- /// </summary>
- private static void DrawMap()
- {
- //畫第一行
- for (int i = 0; i <= 29; i++)
- {
- Console.Write(MapIco(i)); //繪製當前格的圖標
- }
- Console.WriteLine(); //第一行結束,換行
- //畫第右邊列(包含5行,每行前29格爲空字符)
- for (int i = 30; i <= 34; i++) //循環繪製5行
- {
- for (int j = 0; j < 29; j++) //有圖標的字符串須要繪製在第30格,所以須要每行前29格繪製兩個空字符串
- {
- Console.Write(" ");
- }
- Console.WriteLine(MapIco(i)); ; //繪製當前格的圖標,並換行
- }
- //畫第二行
- for (int i = 64; i >= 35; i--)
- {
- Console.Write(MapIco(i)); //繪製當前格的圖標
- }
- Console.WriteLine(); //第二行結束,換行
- //畫第左邊列
- for (int i = 65; i <= 69; i++)
- {
- Console.WriteLine(MapIco(i)); //繪製當前格的圖標,並換行
- }
- //畫第三行
- for (int i = 70; i <= 99; i++)
- {
- Console.Write(MapIco(i)); //繪製當前格的圖標
- }
- }
- }
- }
效果圖:spa