當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    C#實現飛行棋(Winform)

    欄目:代碼類 時間:2020-02-06 12:08

    本文實例為大家分享了C#實現飛行棋的具體代碼,供大家參考,具體內容如下

    基于Winform框架寫的
    不足之處請大佬指教

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace 飛行棋
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
      //創建一個數組裝游戲地板
      int[] mapList = new int[390];
      //創建裝圖片的數組
      PictureBox[] mappic = new PictureBox[390];
      //創建路的數組
      int[] road = new int[100];
      //創建地圖 
      Panel map = new Panel();
      int size = 30;
      //創建骰子
      PictureBox dice = new PictureBox();
      //初始位置的停放區域紅色的
      Panel plan1 = new Panel();
      //初始位置的停放區域綠色的
      Panel plan2 = new Panel();
      private void Form1_Load(object sender, EventArgs e)
      {
       this.Size = new Size(1200, 600);
       this.FormBorderStyle = FormBorderStyle.FixedSingle;
       this.Location = new Point(250, 100);
       this.BackColor = Color.Wheat;
       map.Size = new Size(30*size, 13*size);
       map.BorderStyle = BorderStyle.FixedSingle;
       map.Location = new Point(40,160);
       this.Controls.Add(map);
       //顯示圖片的方法
       Init();
    
       
       plan1.Size = new Size(100, 100);
       plan1.Location = new Point(map.Left, map.Top - 120);
       plan1.BackgroundImage = Image.FromFile("../../img/circle.png");
       plan1.BackgroundImageLayout = ImageLayout.Stretch;
       this.Controls.Add(plan1);
       
       plan2.Size = new Size(100, 100);
       plan2.Location = new Point(map.Left+120 ,map.Top - 120);
       plan2.BackgroundImage = Image.FromFile("../../img/circle.png");
       plan2.BackgroundImageLayout = ImageLayout.Stretch;
       this.Controls.Add(plan2);
    
       PictureBox redPlayer = new PictureBox();
       redPlayer.Size = new Size(80, 80);
       redPlayer.Image = Image.FromFile("../../img/red.png");
       redPlayer.Location = new Point(10, 10);
       redPlayer.SizeMode = PictureBoxSizeMode.StretchImage;
       plan1.Controls.Add(redPlayer);
    
       PictureBox greenPlayer = new PictureBox();
       greenPlayer.Size = new Size(80, 80);
       greenPlayer.Image = Image.FromFile("../../img/green.png");
       greenPlayer.Location = new Point(10, 10);
       greenPlayer.SizeMode = PictureBoxSizeMode.StretchImage;
       plan2.Controls.Add(greenPlayer);
    
       //創建對話框
       tall.Size = new Size(200, 500);
       tall.Location = new Point(map.Right + 20, 50);
       tall.ReadOnly = true;
       this.Controls.Add(tall);
       //玩家一:
       name.Size = new Size(100, 30);
       name.Location = new Point(45,10);
       this.Controls.Add(name);
       //玩家二:
       names.Size = new Size(100, 30);
       names.Location = new Point(160,10 );
       this.Controls.Add(names);
       btn.Location = new Point(300,10);
       btn.Text = "開始游戲";
       btn.Size = new Size(100, 30);
       btn.BackColor = Color.Pink;
       btn.Click += Btn_Click;
       this.Controls.Add(btn);
    
       //骰子
       dice.Size = new Size(80, 80);
       dice.Image = Image.FromFile("../../img/roll.png");
       dice.Location = new Point(map.Right-160,map.Top-120);
       dice.SizeMode = PictureBoxSizeMode.StretchImage;
       this.Controls.Add(dice);
       dice.MouseClick += Dice_MouseClick;
       
       
      }
    
      private void Btn_Click(object sender, EventArgs e)
      {
    
       //創建初始的彈框
       Tall(string.Format("請兩人投擲骰子,{0}先手,點大的先走",name.Text));
       
       playName[0] = name.Text;
       playName[1] = names.Text;
       tall.Focus();
      }
    
      TextBox name = new TextBox();
      TextBox names = new TextBox();
      Button btn = new Button();
      
      //創鍵記錄的對話框
      RichTextBox tall = new RichTextBox();
      //創建隨機
      Random r = new Random();
      // 輪流投擲骰子 0代表紅方 1代表綠方
      bool[] playStart = new bool[2] { true, false };
      //記錄雙方當前的位置
      int[] playPosition = new int[2] { -1, -1 };
      int[] playStand = new int[2] { -1, -1 };
      // 記錄骰子的點數
      int[] shaizi = new int[2];
      string[] playName = new string[2];
      //數組存儲點數
      int[] num = new int[2] ;
      //1.輪流投擲篩子決定誰先出門
      private void Dice_MouseClick(object sender, MouseEventArgs e)
      {
       PlayDice();
       PlayGame();
    
    
      }
      private void PlayDice()
      {
       //紅方投擲 紅方為true 投擲完之后變為false 綠方投擲
       if (playStart[0])
       {
        shaizi[0] = r.Next(1,7);
        Tall(String.Format("{1}投擲出{0}點", shaizi[0],playName[0]));
        playStart[0] = !playStart[0];
    
       }
       else
       {
        playStart[0] = !playStart[0];
       }
       //綠方投擲 綠方為false 綠方投擲完之后變為true .輪到紅方投擲
       if (playStart[1])
       {
        shaizi[1] = r.Next(1, 7);
        Tall(String.Format("{1}投擲出{0}點", shaizi[1],playName[1]));
        playStart[1] = !playStart[1];
    
       }
       else
       {
        playStart[1] = !playStart[1];
       }
      }
      //決定游戲誰先手
      private void OutDoor()
      {
       //紅方為true 綠方為false的時候一回合完了 一回合完之后對應的骰子數都不為0
       if (playStart[0]&&!playStart[1]&&(shaizi[0]!=0||shaizi[1]!=0))
       {
        if (shaizi[0] == shaizi[1])
        {
         Tall("雙方點數相同,請重新投擲");
        }
        else
        {
         //第二回合
         st = false;
         if (shaizi[0] > shaizi[1])
         {
          Tall(String.Format("{0}點數較大,先行一步,{0}投擲",name.Text));
          playStart[0] = true;
          playStart[1] = false;
    
         }
         if (shaizi[0] < shaizi[1])
         {
          Tall(String.Format("{0}點數較大,先行一步,{0}投擲", names.Text));
          playStart[0] = false;
          playStart[1] = true;
         }
        }
       }
    
      }
    
    
      bool st = true;
      //控制游戲誰先走
      private void PlayGame()
      {
       //判斷游戲剛開始時候比點數先行
       if (st == true)
       {
        OutDoor();
        //都為false的時候綠方投擲
        if (!playStart[0]&&playStart[1])
        {
         Tall(string.Format("請{0}投擲",names.Text));
        }//都為true的時候紅方投擲
        else if(playStart[0]&&!playStart[1])
        {
         Tall(string.Format("請{0}投擲!",name.Text));
        }
       }
       else
       {
        if (playStart[0] && !playStart[1])//如果綠方大, 綠方為true
        {
         PlayReturn(1);
        }//紅方
        else if (!playStart[0] && playStart[1])
        {
         PlayReturn(0);
        } 
       }
    
      }
      /// <summary>
      /// 雙方輪流游戲
      /// </summary>
      /// 傳入參數index0為紅方 1為綠方
      bool[] re = new bool[2] { false, false };
      private void PlayReturn(int index)
      {
       //都沒出門
       if (playPosition[index] == -1)
       {
    
        switch (shaizi[index])
        {
         case 2:
         case 4:
          Tall(String.Format("{0}可以起步", playName[index]));
          playPosition[index] = 0;
          playStand[index] = 0;
          //如果兩個位置相等
          if (playPosition[1] == playPosition[0])
          {
           mappic[road[playPosition[index]]].Image = imageList1.Images[2];
          }
          else
          {
           mappic[road[playPosition[index]]].Image = imageList1.Images[index];
          }
          break;
         case 6:
          playStart[index] = true;
          playStart[1 - index] = false;
          Tall(String.Format("{0}可以起步", playName[index]));
          playPosition[index] = 0;
          playStand[index] = 0;
          if (playPosition[1] == playPosition[0])
          {
           mappic[road[playPosition[index]]].Image = imageList1.Images[2];
          }
          else
          {
           mappic[road[playPosition[index]]].Image = imageList1.Images[index];
          }
          Tall(String.Format("請{0}投擲骰子", playName[index]));
          break;
         default:
          Tall(String.Format("很遺憾,{0}投擲出{1}點無法起步,輪到{2}投擲", playName[index], shaizi[index], playName[1 - index]));
          break;
        }
        if (playPosition[0] != -1)
        {
         plan1.Controls.Clear();
        }
        if (playPosition[1] != -1)
        {
         plan2.Controls.Clear();
        }
       }
       else
       {
        //改變位置之前記錄好之前的位置
        playStand[index] = playPosition[index];
        playPosition[index] += shaizi[index];
        if (playPosition[index] >= 99)
        {
         MessageBox.Show(playName[index] + "獲勝");
         playPosition[index] = 99;
         //改變圖片
         Change(index);
         return;
        }
        Tall(string.Format("{0}移動了{1}步", playName[index], shaizi[index]));
        //改變圖片
        Change(index);
    
        //判斷移動完成之后的位置是如何
        if (playPosition[index] == playPosition[1 - index])
        {
         playPosition[1 - index] = 0;
         playStand[1 - index] = playPosition[1 - index];
         Tall(String.Format("厲害!{0}精準的將{1}踩回原點,{0}當前的位置是{2},{1}當前的位置是{3},", playName[index], playName[1 - index], playPosition[index], playPosition[1 - index]));
         mappic[road[playPosition[index]]].Image = imageList1.Images[index];
         mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index];
         Tall(string.Format("{0}開始投擲", playName[1 - index]));
        }
    
        switch (mapList[road[playPosition[index]]])
        {
         case 1:
          Tall(string.Format("{0}安全到達!當前位置是{1}", playName[index], playPosition[index]));
          Tall(String.Format("{0}開始投擲!", playName[1-index]));
          break;
         case 2:
          Tall(string.Format("很不幸,{0}踩中了香蕉皮,后退6步,當前位置是{1}", playName[index], playPosition[index]));
          playStand[index] = playPosition[index];
          playPosition[index] -= 6;
          Change(index);
          /*Tall(string.Format("{0}當前位置是{1}", playName[index], playPosition[index]));*/
          Tall(string.Format("{0}開始投擲", playName[1 - index]));
          break;
         case 3:
          Tall(String.Format("恭喜!{0}踩中時空隧道,前進6步!當前位置是{1}", playName[index], playPosition[index]));
          playStand[index] = playPosition[index];
          playPosition[index] += 6;
          Change(index);
          /*Tall(string.Format("{0}當前位置是{1}", playName[index], playPosition[index]));*/
          Tall(string.Format("{0}開始投擲", playName[1 - index]));
          break;
         case 4:
          Tall(string.Format("好可惜,{0}踩中了陷阱,暫停一回合", playName[index]));
          re[index] = true;
          re[1 - index] =false;
          break;
         case 5:
          Tall(string.Format("真好,{0}踩中幸運星,在玩一回合!當前位置是{1}", playName[index], playPosition[index]));
          playStart[index] = true;
          playStart[1 - index] = false;
          Tall(string.Format("{0}繼續投擲!", playName[index]));
          break;
         case 6:
          Tall(string.Format("真好!{0}踩中秘籍,請選擇措施!當前位置是{1}", playName[index], playPosition[index]));
          DialogResult result = MessageBox.Show("是否與對方更換位置!", "移魂大法", MessageBoxButtons.YesNo);
          if (result == DialogResult.Yes)
          {
           int temp = playPosition[index];
           playPosition[index] = playPosition[1 - index];
           playPosition[1 - index] = temp;
           playStand[index] = playPosition[index];
           playStand[1 - index] = playPosition[1 - index];
           mappic[road[playPosition[index]]].Image = imageList1.Images[index];
           mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index];
    
          }
          Tall(string.Format("{0}當前位置是{1},{2}的位置是{3}", playName[index], playPosition[index], playName[1 - index], playPosition[1 - index]));
          Tall(string.Format("{0}開始投擲。", playName[1 - index]));
          break;
         case 7:
          Tall(string.Format("幸運!{0}獲得手槍,可選擇擊退對方3步!當前位置是{1}", playName[index], playPosition[index]));
          DialogResult res = MessageBox.Show("是否選擇擊退對方三步!", "手槍!", MessageBoxButtons.YesNo);
          if (res == DialogResult.Yes)
          {
           playStand[1 - index] = playPosition[1 - index];
           playPosition[1 - index] -= 3;
           mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index];
           Change(1 - index);
          }
          /* Tall(string.Format("{0}被擊退對方3步!當前位置是{1}", playName[1 - index], playPosition[1 - index]));*/
          Tall(string.Format("{0}開始投擲。", playName[1 - index]));
          break;
         default:
          break;
        }
        if (re[index] && !re[1 - index])
        {
         playStart[index] = true;
         playStart[1 - index] = false;
         re[index] = false;
         re[1 - index] = false;
        }
    
       }
      }
    
      private void Change( int index)
      {
       //如果移動完之后再同一個位置
       if (playPosition[1] == playPosition[0])
       {
        mappic[road[playPosition[index]]].Image = imageList1.Images[2];
       }
       else
       {//移動完成之后顯示對應玩家的圖片
        mappic[road[playPosition[index]]].Image = imageList1.Images[index];
       }
       //原本位置圖片的顯示,如果兩人在同一個位置站著,并且都在路上自己離開之后,留下對方的圖片在原地在起點的時候
       if (playStand[0]==playStand[1]&&playStand[0]!=-1&&playStand[1]!=-1&&playPosition[1-index]==0)
       {
        mappic[road[playStand[index]]].Image = imageList1.Images[1 - index];
        mappic[road[playPosition[index]]].Image = imageList1.Images[ index];
       }
       else //如果兩人不再同一位置判斷之前的腳下是什么
       {
        switch (mapList[road[playStand[index]]])
        {
         //整個地圖的圖片
         case 0:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/water.gif");
          break;
         //游戲區域的路
         case 1:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/grass.png");
          break;
         case 2:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/sk.jpg");
          break;
         case 3:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xj.jpg");
          break;
         case 4:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xianjing.jpg");
          break;
         case 5:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xx.jpg");
          break;
         case 6:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/jh.jpg");
          break;
         case 7:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/sq.jpg");
          break;
         case 10:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/start.png");
          break;
         case 11:
          mappic[road[playStand[index]]].Image = Image.FromFile("../../img/end.bmp");
          break;
        
        }
       }
      }
    
      void Tall(string str)
      {
       MessageBox.Show(str);
       tall.AppendText(str+"\r\n");
      }
    
      //創建一個顯示所有圖片的方法
      void Init()
      {
       //先調用地圖的
       CreateMap();
       //在調用道具的 先有地圖再有道具
       CreateGear();
       for (int i = 0; i < mapList.Length; i++)
       {
        //創建圖片每循環一次創建一個
        PictureBox pic = new PictureBox();
        //圖片的大小等于30
        pic.Size = new Size(size, size);
        //判斷mapList索引對應的東西
        switch (mapList[i])
        {
         //整個地圖的圖片
         case 0:
         pic.Image = Image.FromFile("../../img/water.gif");
         break;
         //游戲區域的路
         case 1:
         pic.Image = Image.FromFile("../../img/grass.png");
         break;
         case 2:
         pic.Image = Image.FromFile("../../img/sk.jpg");
         break;
         case 3:
         pic.Image = Image.FromFile("../../img/xj.jpg");
         break;
         case 4:
         pic.Image = Image.FromFile("../../img/xianjing.jpg");
         break;
         case 5:
         pic.Image = Image.FromFile("../../img/xx.jpg");
         break;
         case 6:
         pic.Image = Image.FromFile("../../img/jh.jpg");
         break;
         case 7:
         pic.Image = Image.FromFile("../../img/sq.jpg");
         break;
         case 10:
         pic.Image = Image.FromFile("../../img/start.png");
         break;
         case 11:
         pic.Image = Image.FromFile("../../img/end.bmp");
         break;
    
        }
        //拉伸圖片
        pic.SizeMode = PictureBoxSizeMode.StretchImage;
        mappic[i] = pic;
        //算出圖片的坐標
        pic.Left = i % 30 * size;
        pic.Top = i / 30 * size;
        map.Controls.Add(pic);
       }
      }
      //給整個地圖添加圖片
      void CreateMap()
      {
       //調用鋪路的方法
       CreateRoad();
       for (int i = 0; i < road.Length; i++)
       {
        mapList[road[i]] = 1;
       }
       //起始圖片的索引位置
       mapList[0] = 10;
       //結束圖片對應的索引位置
       mapList[mapList.Length - 1] = 11;
      } 
      //算出路怎么鋪
      void CreateRoad()
      {
       //111111
       //  1
       //111111
       //1
       //111111
       //第一行鋪的路30個
       for (int i = 0; i < 30; i++)
       {
        road[i] = i;
       }
       //第2個列的路
       for (int i = 30; i <= 35; i++)
       {
        road[i] = road[i - 1] + 30;
       }
       //第三個路
       for (int i = 36; i <65; i++)
       {
        road[i] = road[i - 1] - 1;
       }
       //第4列的路
       for (int i = 65; i <=70; i++)
       {
        road[i] = road[i - 1] + 30;
       }
       //第五行的數
       for (int i =71; i <100; i++)
       {
        road[i] = road[i - 1] + 1;
       }
      }
    
      //定義道具的數組
      int[] back = { 7, 27, 42, 62, 73, 96 };
      int[] forword = { 10, 25, 33, 65, 80, 88 };
      int[] stop = { 3, 20, 35, 50, 60, 70, 90 };
      int[] star = { 5, 28, 45, 71, 85 };
      int[] change = { 4, 55, 75, 98 };
      int[] gun = { 11, 32, 66, 83 };
      //定義一個道具放置位置的方法
      void CreateGear()
      {
       for (int i = 0; i < back.Length; i++)
       {
        //將地圖對應的路然后將索引換成對應的道具
        mapList[road[back[i]]] = 2;
       }
       for (int i = 0; i < forword.Length; i++)
       {
        mapList[road[forword[i]]] = 3;
       }
       for (int i = 0; i < stop.Length; i++)
       {
        mapList[road[stop[i]]] = 4;
       }
       for (int i = 0; i <star.Length; i++)
       {
        mapList[road[star[i]]] = 5;
       }
       for (int i = 0; i < change.Length; i++)
       {
        mapList[road[change[i]]] = 6;
       }
       for (int i = 0; i < gun.Length; i++)
       {
        mapList[road[gun[i]]] = 7;
       }
      }
     }
    }
    
    下一篇:沒有了
777亚洲人成视频免费视频