中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何基于C#的winform實現數字華容道游戲

發布時間:2022-02-20 11:48:59 來源:億速云 閱讀:332 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關如何基于C#的winform實現數字華容道游戲的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

數字華容道游戲類似于拼圖游戲,只需將數字1~15按順序排好即可。該游戲邏輯比較簡單,易于編程實現。

游戲界面如圖:

如何基于C#的winform實現數字華容道游戲

編程準備:

如何基于C#的winform實現數字華容道游戲

所需控件:label 用于顯示時間, 一個重新開始的button,一個panel容器來存放數字塊(按鈕),再加一個timer來計時及判斷游戲是否結束。

主要代碼:

variables類:

class variables
    {
        public static int[] a = new int[16] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
             14, 15,16 };
        public static Button[,] buttons = new Button[4, 4];
    }

數組a用于存放數字,隨機打亂順序并分配給buttons。buttons即游戲中的方塊。

Methods類:

 class Method
    {
        //數組打亂順序
        public int[] NewSorting(int[]a)
        {
            Random r = new Random();
            for(int i=0;i<a.Length;i++)
            {
                int temp = a[i];
                int randomindex = r.Next(0, a.Length);
                a[i] = a[randomindex];
                a[randomindex] = temp;
            }
            return a;
        }
 
        //向容器中添加16個按鈕
        public void AddButtons(Panel panel,Button[,] buttons)
        {
            //數組隨機打亂順序
            int[] s = NewSorting(a);
            //每個按鈕的寬度及高度
            int width = 32;
            int height = 32;
            int x0 = panel.Location.X;
            int y0 = panel.Location.Y;
            for(int i=0;i<buttons.GetLength(0);i++)
                for(int j=0;j<buttons.GetLength(1);j++)
                {
                    Button butt = new Button();
                    //設置按鈕相關屬性
                    butt.Size = new System.Drawing.Size(width, height);
                    butt.Location = new System.Drawing.Point(x0 + (j + 1) * width, y0 + (i + 1) * height);
                    butt.Visible = true;
                    //打亂順序的數組分配給每個button
                    butt.Text = s[i * buttons.GetLength(0) + j].ToString();
                    if (butt.Text=="16")
                     {
                        butt.Hide();
                      }
                    variables.buttons[i, j] = butt;
                    
                    //手動添加點擊事件
                    butt.Click += new EventHandler(butt_Click);
                    //按鈕添加到容器
                    panel.Controls.Add(butt);
                }
        }
 
        //自定義點擊事件
        public void butt_Click(Object sender,EventArgs e)
        {
            Button butt = sender as Button;
            Button butt_16 = Find_Button16();
 
            //判斷是否相鄰,如果相鄰則交換
            if(Neighboor(butt,butt_16))
            {
                swap(butt, butt_16);
                butt_16.Focus();
            }
        }
 
        //找出隱藏的按鈕 即16所在的按鈕
        public Button Find_Button16()
        {
            for(int i=0;i<buttons.GetLength(0);i++)
                for(int j=0;j<buttons.GetLength(1);j++)
                {
                    if (buttons[i, j].Visible == false)
                        return buttons[i, j];
                }
            return null;
        }
 
        //判斷兩個按鈕是否相鄰   即兩個按鈕的坐標位置是否差一個寬度或者高度
        public bool Neighboor(Button butt1, Button butt2)
        {
            int x1 = butt1.Location.X;
            int y1 = butt1.Location.Y;
 
            int x2 = butt2.Location.X;
            int y2 = butt2.Location.Y;
 
            if(((x1==x2)&&(Math.Abs(y1-y2)==butt1.Height))||((y1==y2)&&(Math.Abs(x1-x2)==butt1.Width)))
             {
                return true;
              }
            return false;
        }
 
        //交換兩個按鈕   交換text 與visible
        public void swap(Button butt1,Button butt2)
        {
            string s = butt1.Text;
            butt1.Text = butt2.Text;
            butt2.Text = s;
 
            bool a = butt1.Visible;
            butt1.Visible = butt2.Visible;
            butt2.Visible = a;
        }
 
        //判斷游戲是否完成
        public bool GameoverOrNot()
        {
            for (int i = 0; i < buttons.GetLength(1); i++)
                for (int j = 0; j < buttons.GetLength(0); j++)
                {
                    if (int.Parse(variables.buttons[i, j].Text) != (i * buttons.GetLength(0) + j + 1))
                        return false;
                }
            return true;
        }
    }

游戲中的數字方塊為Methods類中的AddButtons方法自動生成的,數字方塊總共有16個,其中15個的visible屬性為true,1個為false。

窗體界面代碼:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
                   
        Method method = new Method();
        int count;
        private void Form1_Load(object sender, EventArgs e)
        {
            method.AddButtons(panel1, buttons);
            label2.Text = "0"+"S";  //初始時間
            timer1.Start();  //啟動計時器
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            //默認100毫秒刷新一次
            count += 1;
            label2.Text = (count/10).ToString()+"S";
            if (method.GameoverOrNot())
            {
                timer1.Stop();
                MessageBox.Show("挑戰成功!");
            }
        }
 
        private void ButtonR_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            for (int i = 0; i < buttons.GetLength(0); i++)
                for (int j = 0; j < buttons.GetLength(1); j++)
                {
                    buttons[i, j].Hide();
                }
 
            method.AddButtons(panel1, buttons);
            count = 0;
            timer1.Start();
        }
    }

感謝各位的閱讀!關于“如何基于C#的winform實現數字華容道游戲”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西峡县| 静海县| 卢氏县| 荆州市| 海南省| 岑巩县| 吴堡县| 永寿县| 分宜县| 棋牌| 涟源市| 潜山县| 峨边| 项城市| 鄯善县| 荔波县| 彰武县| 永修县| 比如县| 唐海县| 平果县| 邢台市| 呼伦贝尔市| 新昌县| 钦州市| 三台县| 米脂县| 天柱县| 青铜峡市| 前郭尔| 波密县| 文山县| 嘉峪关市| 织金县| 长沙县| 克山县| 敦煌市| 砚山县| 临西县| 英德市| 孟村|