[C#]遊戲地圖繪製——雙玩家版

 繪製100格遊戲地圖(根據“傳智播客”.NET視頻:飛行棋項目 製作)

 這個是兩個玩家的版本。

 

  1. using System; 
  2.  
  3. namespace GameMap 
  4.     internal class Program 
  5.     { 
  6.         //數組的下標爲0的元素對應地圖上的第1格,下標爲1的元素對應第2格…下標爲n的元素對應第n+1格 
  7.  
  8.         //定義一個數組存放地圖的格數 
  9.         private static int[] Map = new int[100]; 
  10.  
  11.         //定義一個數組存放玩家的座標,playerPos[0] 存玩家A的座標,playerPos[1] 存玩家B的座標 
  12.         private static int[] playerPos = { 0, 0 }; 
  13.  
  14.         private static void Main(string[] args) 
  15.         { 
  16.             InitialMap(); 
  17.             DrawMap(); 
  18.  
  19.             Console.ReadKey(); 
  20.         } 
  21.  
  22.         /// <summary> 
  23.         /// 設置地圖關卡的位置 
  24.         /// </summary> 
  25.         private static void InitialMap() 
  26.         { 
  27.             //在下面的數組存儲我們遊戲地圖各個關卡 
  28.  
  29.             //在數組中用以下數字表示相關圖標 
  30.             //1:幸運輪盤—◎ 
  31.             //2:地雷—★ 
  32.             //3:暫停—▲ 
  33.             //4:時空隧道—※ 
  34.             //0:普通—□ 
  35.  
  36.             //定義相關關卡的位置 
  37.             int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };      //幸運輪盤1 
  38.             int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };      //地雷2 
  39.             int[] pause = { 9, 27, 60, 93 };        //暫停3 
  40.             int[] timeTunel = { 20, 25, 45, 63, 72, 88, 90 };      //時空隧道4 
  41.  
  42.             for (int i = 0; i < luckyTurn.Length; i++) 
  43.             { 
  44.                 Map[luckyTurn[i]] = 1;  //把地圖Map的第luckyTurn[i]格設置爲1(幸運輪盤) 
  45.             } 
  46.  
  47.             for (int i = 0; i < landMine.Length; i++) 
  48.             { 
  49.                 Map[landMine[i]] = 2;   //把地圖Map的第landMine[i]格設置爲2(地雷) 
  50.             } 
  51.  
  52.             for (int i = 0; i < pause.Length; i++)  //把地圖Map的第pause[i]格設置爲3(暫停) 
  53.             { 
  54.                 Map[pause[i]] = 3; 
  55.             } 
  56.  
  57.             for (int i = 0; i < timeTunel.Length; i++)  //把地圖Map的第timeTunel[i]格設置爲4(時空隧道) 
  58.             { 
  59.                 Map[timeTunel[i]] = 4; 
  60.             } 
  61.         } 
  62.  
  63.         /// <summary> 
  64.         /// 判斷當前格應該繪製什麼圖標 
  65.         /// </summary> 
  66.         /// <param name="currentNumber">當前格數</param> 
  67.         private static string MapIco(int pos) 
  68.         { 
  69.             string ico = "";     //存放要繪製的圖標字符 
  70.             if (playerPos[0] == pos && playerPos[1] == pos)     //判斷玩家A、B是否同時在當前格上 
  71.             { 
  72.                 ico = ("<>"); 
  73.             } 
  74.             else if (playerPos[0] == pos)        //判斷玩家A是否在當前格上 
  75.             { 
  76.                 ico = ("A"); 
  77.             } 
  78.             else if (playerPos[1] == pos)        //判斷玩家B是否在當前格上 
  79.             { 
  80.                 ico = ("B"); 
  81.             } 
  82.             else 
  83.             { 
  84.                 switch (Map[pos])     //根據當前格的值來顯示相應的圖標 
  85.                 { 
  86.                     case 1: 
  87.                         ico = ("◎");     //1:幸運輪盤—◎ 
  88.                         break
  89.  
  90.                     case 2: 
  91.                         ico = ("★");     //2:地雷—★ 
  92.                         break
  93.  
  94.                     case 3: 
  95.                         ico = ("▲");     //3:暫停—▲ 
  96.                         break
  97.  
  98.                     case 4: 
  99.                         ico = ("※");     //4:時空隧道—※ 
  100.                         break
  101.  
  102.                     default
  103.                         ico = ("□");     //0:普通—□ 
  104.                         break
  105.                 } 
  106.             } 
  107.             return ico; 
  108.         } 
  109.  
  110.         /// <summary> 
  111.         /// 繪製地圖 
  112.         /// </summary> 
  113.         private static void DrawMap() 
  114.         { 
  115.             //畫第一行 
  116.             for (int i = 0; i <= 29; i++) 
  117.             { 
  118.                 Console.Write(MapIco(i));       //繪製當前格的圖標 
  119.             } 
  120.  
  121.             Console.WriteLine();    //第一行結束,換行 
  122.  
  123.             //畫第右邊列(包含5行,每行前29格爲空字符) 
  124.             for (int i = 30; i <= 34; i++)      //循環繪製5行 
  125.             { 
  126.                 for (int j = 0; j < 29; j++)    //有圖標的字符串需要繪製在第30格,因此需要每行前29格繪製兩個空字符串 
  127.                 { 
  128.                     Console.Write("  "); 
  129.                 } 
  130.                 Console.WriteLine(MapIco(i)); ;      //繪製當前格的圖標,並換行 
  131.             } 
  132.  
  133.             //畫第二行 
  134.             for (int i = 64; i >= 35; i--) 
  135.             { 
  136.                 Console.Write(MapIco(i));     //繪製當前格的圖標 
  137.             } 
  138.  
  139.             Console.WriteLine();    //第二行結束,換行 
  140.  
  141.             //畫第左邊列 
  142.             for (int i = 65; i <= 69; i++) 
  143.             { 
  144.                 Console.WriteLine(MapIco(i));      //繪製當前格的圖標,並換行 
  145.             } 
  146.  
  147.             //畫第三行 
  148.             for (int i = 70; i <= 99; i++) 
  149.             { 
  150.                 Console.Write(MapIco(i));       //繪製當前格的圖標 
  151.             } 
  152.         } 
  153.     } 

 效果圖:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章