我是靠谱客的博主 有魅力西装,这篇文章主要介绍使用C#编写15子游戏,现在分享给大家,希望可以做个参考。

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

所需控件:一个Button,拖入Form1中即可。
源码:

复制代码
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
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 ShiWuZhiGame { public partial class Form1 : Form { public Form1() { InitializeComponent(); } const int N = 4; //按钮的行、列数 Button[,] buttons = new Button[N, N]; //按钮的数组 private void Form1_Load(object sender, EventArgs e) { //产生所有按钮 GenerateAllButtons(); } //打乱顺序 void Shuffle() { //多次随机交换两个按钮 Random rnd = new Random(); for (int i = 0; i < 100; i++) { 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() { int x0 = 100, y0 = 10, w = 45, d = 50; for (int r = 0; r < N; r++) for (int c = 0; c < N; c++) { 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) { 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) { Button btn = sender as Button; //当前点中的按钮 Button blank = FindHiddenButton(); //空白按钮 //判断是否与空白块相邻,如果是,则交换 if (IsNeighbor(btn, blank)) { Swap(btn, blank); blank.Focus(); } //判断是否完成了 if (ResultIsOk()) { MessageBox.Show("ok"); } } //查找要隐藏的按钮 Button FindHiddenButton() { for (int r = 0; r < N; r++) for (int c = 0; c < N; c++) { if (!buttons[r, c].Visible) { return buttons[r, c]; } } return null; } //判断是否相邻 bool IsNeighbor(Button btnA, Button btnB) { 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() { for (int r = 0; r < N; r++) for (int c = 0; c < N; c++) { if (buttons[r, c].Text != (r * N + c + 1).ToString()) { return false; } } return true; } private void button1_Click_1(object sender, EventArgs e) { //打乱顺序 Shuffle(); } } }

运行效果如下:

程序启动时:


点击开始后:


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

最后

以上就是有魅力西装最近收集整理的关于使用C#编写15子游戏的全部内容,更多相关使用C#编写15子游戏内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(109)

评论列表共有 0 条评论

立即
投稿
返回
顶部