⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 vs2005下用c#写的八数码游戏,目标状态是固定的
💻 CS
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace _sm
{
   
    public partial class Form1 : System.Windows.Forms.Form
    {
        private int[,] pos ={ { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };
        private int row = 2, col = 2;//空白label的位置
        private int Hits = 0;//记录移动次数
        public Form1()
        {
            InitializeComponent();
                  
            label10.Text = "已走" + Hits.ToString()+"步";
        }
 
        private void Fix()
        {
            int r = 30, c = 10, i = 0;
            row = 0; col = 0;
            int val;
                int[] v ={ 8, 3, 6, 2, 5, 7, 1, 4 };//游戏初始化
                while (i < 8)
                {
                    val = v[i];
                    pos[row, col] = val;
                        //根据val的值来对label们定位
                        switch (val)
                        {
                            case 1:
                                label1.Text = "1";
                                label1.Location = new Point(c, r);
                                break;
                            case 2:
                                label2.Text = "2";
                                label2.Location = new Point(c, r);
                                break;
                            case 3:
                                label3.Text = "3";
                                label3.Location = new Point(c, r);
                                break;
                            case 4:
                                label4.Text = "4";
                                label4.Location = new Point(c, r);
                                break;
                            case 5:
                                label5.Text = "5";
                                label5.Location = new Point(c, r);
                                break;
                            case 6:
                                label6.Text = "6";
                                label6.Location = new Point(c, r);
                                break;
                            case 7:
                                label7.Text = "7";
                                label7.Location = new Point(c, r);
                                break;
                            case 8:
                                label8.Text = "8";
                                label8.Location = new Point(c, r);
                                break;
                            default: break;
                        }
                        c += 100;  //横向坐标加100
                        col++;
                        //换行
                        if (col > 2)
                        {
                            col = 0;
                            row++;
                        }
                        if (c > 300)
                        {
                            c = 10;
                            r += 100;
                        }
                        i++;
                }
                //定位空白label9
                label9.Location = new Point(c, r);
                pos[2, 2] = 9;
            }
        
        private void RandomPlace()
        {
            //r、c是象素
            int r = 30, c = 10, i = 0; 
            row = 0; col = 0;
            Random rand = new Random();
                int val;
                while (i < 8)
                {
                    val = (int)rand.Next(9);
                    if (numExists(val) == true && val > 0)
                    {
                        pos[row, col] = val;
                        //根据val的值来对label们定位
                        switch (val)
                        {
                            case 1:
                                label1.Text = "1";
                                label1.Location = new Point(c, r);
                                break;
                            case 2:
                                label2.Text = "2";
                                label2.Location = new Point(c, r);
                                break;
                            case 3:
                                label3.Text = "3";
                                label3.Location = new Point(c, r);
                                break;
                            case 4:
                                label4.Text = "4";
                                label4.Location = new Point(c, r);
                                break;
                            case 5:
                                label5.Text = "5";
                                label5.Location = new Point(c, r);
                                break;
                            case 6:
                                label6.Text = "6";
                                label6.Location = new Point(c, r);
                                break;
                            case 7:
                                label7.Text = "7";
                                label7.Location = new Point(c, r);
                                break;
                            case 8:
                                label8.Text = "8";
                                label8.Location = new Point(c, r);
                                break;
                            default: break;
                        }
                        c += 100;  //横向坐标加100
                        col++;
                        //换行
                        if (col > 2)
                        {
                            col = 0;
                            row++;
                        }
                        if (c > 300)
                        {
                            c = 10;
                            r += 100;
                        }
                        i++;
                    }
                    else
                        continue;
                }
                //定位空白label9
                label9.Location = new Point(c, r);
                pos[2, 2] = 9;
            }
            
        
        
        private Boolean numExists(int num)
        { 
            for(int i=0;i<3;i++)
                for (int j = 0; j < 3; j++)
                {
                    if (pos[i, j] == num)
                        return false;     //
                }
            return true;
        }

  
        private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs s)
        {
            int turn;
            if (guding.Checked==true || suiji.Checked==true)
            {
                switch ((int)s.KeyCode)
                {
                    case 38:  //按动上键
                        if (row < 2)
                        {
                            turn = pos[row, col];
                            pos[row, col] = pos[row + 1, col];
                            pos[row + 1, col] = turn;
                            Swap(pos[row, col], turn);
                            row++;
                            Hits++;
                        }
                        break;
                    case 37:  //按动左键
                        if (col < 2)
                        {
                            turn = pos[row, col];
                            pos[row, col] = pos[row, col + 1];
                            pos[row, col + 1] = turn;
                            Swap(pos[row, col], turn);
                            col++;
                            Hits++;
                        }
                        break;
                    case 39:  //按动右键
                        if (col > 0)
                        {
                            turn = pos[row, col];
                            pos[row, col] = pos[row, col - 1];
                            pos[row, col - 1] = turn;
                            Swap(pos[row, col], turn);
                            col--;
                            Hits++;
                        }
                        break;
                    case 40:  //按动下键
                        if (row > 0)
                        {
                            turn = pos[row, col];
                            pos[row, col] = pos[row - 1, col];
                            pos[row - 1, col] = turn;
                            Swap(pos[row, col], turn);
                            row--;
                            Hits++;
                        }
                        break;
                }
            }
            else
                MessageBox.Show("请先进行游戏再按方向键!", "提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            label10.Text = "已走" + Hits.ToString() + "步";
            //判断8个数字的排列是否满足胜利要求
            Boolean same = true;
            string arr = "";
            for(int ctr=1,i=0;i<3;i++)
            {
                for(int j=0;j<3;j++,ctr++)
            {
                if (pos[i, j] != ctr)
                {
                    same = false;
                    break;
                }
                arr = arr + "\t" + pos[i, j];
            }
            arr = arr + "\n";
            }
            if (same == true)
            {
                if (MessageBox.Show("共移动了" + Hits.ToString() + "步,游戏结束!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
                {
                    this.Close();
                }
            }

        }

        private void Swap(int vNum, int blank)
        {
            Point turn;
            switch (vNum)
            {
                case 1:
                    turn = label1.Location;
                    label1.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 2:
                    turn = label2.Location;
                    label2.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 3:
                    turn = label3.Location;
                    label3.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 4:
                    turn = label4.Location;
                    label4.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 5:
                    turn = label5.Location;
                    label5.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 6:
                    turn = label6.Location;
                    label6.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 7:
                    turn = label7.Location;
                    label7.Location = label9.Location;
                    label9.Location = turn;
                    break;
                case 8:
                    turn = label8.Location;
                    label8.Location = label9.Location;
                    label9.Location = turn;
                    break;
            }
        }

        private void Clear()
        {
            int i, j;
            for(i=0;i<3;i++)
                for (j=0; j < 3; j++)
                {
                    pos[i, j] = 0;
                }
            Hits = 0;
            label10.Text = "已走" + Hits.ToString() + "步";
        }

        private void guding_Click(object sender, EventArgs e)
        {

            Clear();
            suiji.Checked = false;
            guding.Checked = true;
            Fix();         
                      
        }

        private void suiji_Click(object sender, EventArgs e)
        {
            Clear();
            guding.Checked = false;
            suiji.Checked = true;
            RandomPlace();            
       
        }  

        

       
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -