C#练习题

  • 格式:doc
  • 大小:749.00 KB
  • 文档页数:5

题目:记忆力游戏“图片配对”
一、语言和环境
A、实现语言
C#/WinForms
B、环境要求
Visual Studio 2005及其联机帮助文档
二、要求
利用C#/WinForms编程,编写一个小游戏“图片配对”。

1.基本功能:
(1)窗口中有16张图片,共8种图案,每种图案有两张。

(2)游戏开始时程序向用户展示所有的图片,片刻之后图片翻过去。

(3)用户凭记忆连续单击两张自己认为是相同图案的图片,这时被单击图片翻起。

(4)如果被单击图片不相同,则自动翻回去。

(5)如果被单击图片相同,则这两张图片消失。

(6)这样不断单击,直到16张图片均配对成功消失,游戏结束。

2.扩展功能:
为游戏增加菜单、计时功能。

(1)通过菜单的“新游戏”选项可以重复进行多次游戏。

(2)通过菜单的“帮助”->“游戏规则”选项显示一个模式窗体,向用户介绍游戏规则。

(3)在每次游戏结束时,弹出对话框显示用户配对成功所花的时间。

(4)游戏所用时间越短越好,在程序中保存最高记录。

(5)在窗体上显示最高纪录和当前游戏已经进行的时间。

3.功能具体描述:
注意:以下图片中的菜单和计时功能属于扩展功能。

(1)程序开始界面如图1所示。

图1 游戏开始界面
(2)3秒后,所有图片翻过去,此时开始计时,如图2所示。

图2 所有图片翻过去
(3)用户连续单击两张图片,图片翻起,如图3所示。

图3 翻起两张图片
(4)如果两张图片相同,则图片消失,如图4所示。

图4 相同的两张图片消失
(5)游戏结束,弹出对话框提示,并显示所用时间,如图5所示。

图5 游戏结束
三、关键点提示
1.在窗体上用16个图片框控件(PictureBox)显示16张图片。

2.用图像列表控件(ImageList)来保存要显示的8张正面图和1张背面图。

3.图片翻转就是改变PictureBox的Image属性,让它对应ImageList中的不同图片。

4.为窗体增加一个整型数组字段,数组长度为16,数组的每个元素都与窗体上的一
个PictureBox对应,元素的值就是相应的PictureBox中显示的图片在ImageList中的索引。

把数组每个元素的下标(从0到16)写在每个PictureBox的Tag属性中。

5.游戏开始时,利用生成随机数的办法,循环将8张正面图随机放在2个PictureBox
中,也就是记录在相应的一维数组的两个元素中。

参考代码:
// 随机指定每个图片框显示的图片
for (int i = 1; i <= 8; i++)
{
// 每张图片都放在两个图片框中
PutIntoBox(i);
PutIntoBox(i);
}
// 将指定索引的图片随机放在一个图片框中,记录在一维数组中
private void PutIntoBox(int pictureIndex)
{
Random r = new Random();
int index = r.Next(16); // 随机找到一个图片框的数组索引
if (this.pictureIds[index] != -1) // 已经有图片了
{
// 找到一个还没有指定图片的图片框
while(this.pictureIds[index] != -1)
{
index = r.Next(16); // 随机找到一个图片框的数组索引 }
}
// 指定这个图片框对应的图片
this.pictureIds[index] = pictureIndex;
}
6.显示所有图片,需要遍历窗体上的所有PictureBox控件,参考代码:
// 显示所有图片
foreach (Control item in this.Controls)
{
if (item is PictureBox)
{
// 取得当前图片框对应的数组索引
int index = Convert.ToInt32(((PictureBox)item).Tag);
// 获得图片框中显示的图片在ImageList中的索引
int pictureIndex = this.pictureIds[index];
// 设置图片框可见
((PictureBox)item).Visible = true;
// 设置图片框显示的图片
((PictureBox)item).Image =
ilPictures.Images[pictureIndex];
}
}
7.利用计时器控件(Timer)来控制图片显示一定时间后翻转。

四、注意事项
1.仔细审题,把题目要求理解准确
2.请注意按照界面的设计要求来进行窗体设计
3.请注意代码的书写、命名符合规范和适当的注释。