C#记忆游戏的简单实现
2015-05-21 22:21
381 查看
三国无双做背景,三国杀的将牌当卡牌。
先看看效果:
游戏胜利:
游戏失败:
更换背景(钟会真帅,这个武将攻击很酷~):
游戏设置:
来说一下实现的基本方法:
(1)12个picturebox,用随机函数随机选取6个图片,后6个根据前六个进行随机,然后用数组保存索引。
这个最有看点的是保证随机数不重复的算法,我用的第三种。
(2)用两个picturebox来保存并判断两次点击的卡牌信息,点够两次触发一次判断。
(3)用变量保存消除的对数,==6就结束游戏,显示胜利。时间用尽或错误次数达到限制就结束游戏,显示失败。
———————————————————————————————————————————————————-
其他杂七杂八的功能很好实现,不再赘述,比如音效,游戏设置什么的(用类保存)。
先看看效果:
游戏胜利:
游戏失败:
更换背景(钟会真帅,这个武将攻击很酷~):
游戏设置:
来说一下实现的基本方法:
(1)12个picturebox,用随机函数随机选取6个图片,后6个根据前六个进行随机,然后用数组保存索引。
这个最有看点的是保证随机数不重复的算法,我用的第三种。
方法一: //存放1-100个数 int[] num = new int[100]; //indexNum[0]=1;…indexNum[99]=100;(不重复) for (int i = 0; i < num.Length; i++) { num[i] = i + 1; } Random r = new Random(); //存放最终结果 int[] result = new int[100]; int max = 100;//设置随机数最大值 for (int j = 0; j < result.Length; j++) { //计算出随机产生的数组索引(0-99) 注:上界值:100 无法取到 int index = r.Next(0, max); //取出该索引位置所存的数 result[j] = num[index]; //用最后一个数替换掉已被放入result中的数 //这样num数组中从0到max-1又都是未被存放入result而且不重复的数了 num[index] = num[max - 1]; //随机产生的数组索引最大值减一 max--; } //打印结果 for (int i = 0; i < 100; i++) { if (i % 10 == 0) { Console.WriteLine("/r/n"); } Console.Write(result[i] + " "); } Console.Read(); 方法二: Dictionary result = new Dictionary(); Random r = new Random((int)DateTime.Now.Ticks); int temp; for (int i = 0; i < 100; i++) { do { temp = r.Next(1, 101); } while (result.ContainsValue(temp)); result.Add(i, temp); } foreach (var item in result) { if (item.Key % 10 == 0) { Console.WriteLine("/r/n"); } Console.Write(item.Value + " "); } Console.Read(); #endregion 方法三: int[] num = new int[100]; int temp; Random r = new Random(); for (int i = 0; i < 100; i++) { temp = r.Next(1, 101); num[i]=GetNumber(num, i, 1, 101, temp,r); } for (int i = 0; i < num.Length; i++) { if (i%10==0) { Console.Write("/r/n"); } Console.Write(num[i] + " "); } Console.Read(); /// /// 递归对比重复值 /// static int GetNumber(int[] a, int index, int minValue, int maxValue, int temp, Random r) { for (int i = 0; i < index; i++) { if (a[i] == temp) { int newTemp = r.Next(minValue, maxValue); a[index] = newTemp; return GetNumber(a, index, minValue, maxValue, newTemp, r); } } return temp; }
(2)用两个picturebox来保存并判断两次点击的卡牌信息,点够两次触发一次判断。
(3)用变量保存消除的对数,==6就结束游戏,显示胜利。时间用尽或错误次数达到限制就结束游戏,显示失败。
———————————————————————————————————————————————————-
其他杂七杂八的功能很好实现,不再赘述,比如音效,游戏设置什么的(用类保存)。
相关文章推荐
- 用C#实现简单的打字闯关游戏
- 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景
- 猜数字游戏(简单C#实现)
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第五部分:公用类<后续会提供源码下载链接>
- 自定义线程池-c#的简单实现
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第七部分:僵尸类<后续会提供源码下载链接>
- C#名单:一个简单的实现
- WinForm实现简单的拖拽功能(C#)
- C# 网络编程之网页简单下载实现
- xmlHTTP xmlDOC 与 C#中DataSet的结合 实现AJAX简单示例
- [每天一个demo]用c#实现简单的上传文件程序
- 使用React来实现一个简单的贪吃蛇游戏
- C#利用DesignSurface如何实现简单的窗体设计器
- [C# 网络编程系列]专题十二:实现一个简单的FTP服务器
- 经典游戏,计算24点,简单实现
- C#简单实现显示中文格式星期几的方法
- C# 实现简单状态机(参考代码)
- 自我复制的简单实现(C#)
- [导入]C#内容分页简单实现代码及祥解
- C#实现一个简单的HTTP服务器