服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现数字华容道游戏

C#实现数字华容道游戏

2023-02-08 14:07____-7 C#

这篇文章主要为大家详细介绍了C#实现数字华容道游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#实现数字华容道游戏的具体代码,供大家参考,具体内容如下

C#实现数字华容道游戏

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
 
namespace WindowsFormsApp6
{undefined
    public partial class Form1 : Form
    {undefined
        public Form1()
        {undefined
            InitializeComponent();
        }
 
 
        const int N = 4;
        Button[,] buttons = new Button[N, N];
 
 
        private void Form1_Load(object sender, EventArgs e)
        {undefined
            //产生所有按钮
            GenerateAllButtons();
        }
 
 
        private void button1_Click(object sender, EventArgs e)
        {undefined
            Shuffle();
        }
 
 
        //打乱顺序
        void Shuffle()
        {undefined
            //多次随机交换两个按钮
            Random rnd = new Random();
            for (int i=0;i<100;i++)
            {undefined
                int a = rnd.Next(N);
                int b = rnd.Next(N);
                int c = rnd.Next(N);
                int d = rnd.Next(N);
                Swap(buttons[a, b], buttons[c, d]);
            }
        }
 
 
        //生成所有按钮
        void GenerateAllButtons()
        {undefined
            int x0 = 100, y0 = 10, w = 45, d = 50;
            for(int r=0;r<N;r++)
                for(int c = 0; c < N; c++)
                {undefined
                    int num = r * N + c;
                    Button btn = new Button();
                    btn.Text = (num + 1).ToString();
                    btn.Top = y0 + r * d;
                    btn.Left = x0 + c * d;
                    btn.Width = w;
                    btn.Height = w;
                    btn.Visible = true;
                    btn.Tag = r * N + c;//这个数据用来表示它所在的行列位置
                    //注册事件
                    btn.Click += new EventHandler(btn_Click);
                    buttons[r, c] = btn;
                    this.Controls.Add(btn);
                }
            buttons[N - 1, N - 1].Visible = false;//最后一个不可见
        }
 
 
        //交换两个按钮
        void Swap(Button btna,Button btnb)
        {undefined
            string t = btna.Text;
            btna.Text = btnb.Text;
            btnb.Text = t;
 
 
            bool v = btna.Visible;
            btna.Visible = btnb.Visible;
            btnb.Visible = v;
        }
 
 
        //按钮点击事件处理
        void btn_Click(object sender, EventArgs e)
        {undefined
            Button btn = sender as Button;//当前点中按钮
            Button blank= FindHiddenButton();//空白按钮
            //判断与空白按钮是否相邻,如果是,交换
            if (IsNeighbor(btn, blank))
            {undefined
                Swap(btn, blank);
                blank.Focus();
            }
 
 
            //判断是否完成了
            if (ResultIsOk())
            {undefined
                MessageBox.Show("ok");
            }
        }
 
 
        //查找要隐藏的按钮
        Button FindHiddenButton()
        {undefined
            for (int r = 0; r < N; r++)
                for (int c = 0; c < N; c++)
                {undefined
                    if (!buttons[r, c].Visible)
                    {undefined
                        return buttons[r, c];
                    }
                }
            return null;
        }
 
 
        //判断是否相邻
        bool IsNeighbor(Button btnA, Button btnB)
        {undefined
            int a = (int)btnA.Tag; //Tag中记录是行列位置
            int b = (int)btnB.Tag;
            int r1 = a / N, c1 = a % N;
            int r2 = b / N, c2 = b % N;
 
 
            if (r1 == r2 && (c1 == c2 - 1 || c1 == c2 + 1) //左右相邻
                || c1 == c2 && (r1 == r2 - 1 || r1 == r2 + 1))
                return true;
            return false;
        }
 
 
        //检查是否完成
        bool ResultIsOk()
        {undefined
            for (int r = 0; r < N; r++)
                for (int c = 0; c < N; c++)
                {undefined
                    if (buttons[r, c].Text != (r * N + c + 1).ToString())
                    {undefined
                        return false;
                    }
                }
            return true;
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/summoxj/article/details/79911776

延伸 · 阅读

精彩推荐
  • C#关于C#操作文件路径(Directory)的常用静态方法详解

    关于C#操作文件路径(Directory)的常用静态方法详解

    这篇文章主要给大家介绍了关于C#操作文件路径(Directory)的常用静态方法,Directory类位于System.IO 命名空间,Directory类提供了在目录和子目录中进行创建移动和列...

    小马的棺材板7642022-11-29
  • C#C#异常执行重试的实现方法

    C#异常执行重试的实现方法

    这篇文章主要介绍了C#异常执行重试的一种实现方法,重试模式可以用poll替代,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下...

    慢慢zero4912022-12-01
  • C#C# PLINQ 内存列表查询优化历程

    C# PLINQ 内存列表查询优化历程

    这篇文章主要介绍了C# PLINQ 内存列表查询优化历程的相关资料,需要的朋友可以参考下...

    qwsf011158442021-11-16
  • C#C#在PDF中绘制不同风格类型的文本方法实例

    C#在PDF中绘制不同风格类型的文本方法实例

    这篇文章主要给大家介绍了关于C#在PDF中绘制不同风格类型的文本的相关资料,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一...

    E-iceblue8062022-02-25
  • C#C#实现程序开机启动的方法

    C#实现程序开机启动的方法

    这篇文章主要介绍了C#实现程序开机启动的方法,涉及C#针对应用程序及注册表的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    冇一朵小尐尒尕尗尛尜4382021-11-24
  • C#unity3D实现三维物体跟随鼠标

    unity3D实现三维物体跟随鼠标

    这篇文章主要为大家详细介绍了unity3D实现三维物体跟随鼠标,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    萌面刺客6422022-08-15
  • C#Unity实现人物旋转和移动效果

    Unity实现人物旋转和移动效果

    这篇文章主要为大家详细介绍了Unity实现人物旋转和移动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    StupidKen7472022-08-20
  • C#C#计算程序执行过程花费时间的方法

    C#计算程序执行过程花费时间的方法

    这篇文章主要介绍了C#计算程序执行过程花费时间的方法,涉及C#简单的时间运算技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    C#教程网10872021-10-26