利用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 游戏结束 3.主要实验方法 1.设置窗体的“BackgroundImage”属性为“bg.jpg”; 2.添加菜单:从工具框中拖入“MenuStrip”并正确设置其各菜单项。 3.最高记录“、“0秒”、“已用时”、“20秒”等内容为“Label”控件。 4.在窗体上用16个图片框控件(PictureBox)显示16张图片。注意设置每个图片框控件的Tag属性为(0~15),设置其“BackColor”属性为Transparent(透明)。 5.用图像列表控件(ImageList)来保存要显示的8张正面图和1张背面图。(该图像列表控件已经设置好,在示例程序中名为:ilPictures,可以直接复制到自己的项目中。 6.图片翻转就是改变PictureBox的Image属性,让它对应ImageList中的不同图片。 7.为窗体增加一个整型数组字段,数组长度为16,数组的每个元素都与窗体上的一个PictureBox对应,元素的值就是相应的PictureBox中显示的图片在ImageList中的索引。把数组每个元素的下标(从0到16)写在每个PictureBox的Tag属性中。 8.游戏开始时,利用生成随机数的办法,循环将8张正面图随机放在2个PictureBox中,也就是记录在相应的一维数组的两个元素中。参考代码: // 随机指定每个图片框显示的图片 for (int i = 1; i <= 8; 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] 指定这个图片框对应的图片 this.pictureids[index]="pictureIndex;" 9.显示所有图片,需要遍历窗体上的所有picturebox控件,参考代码: 显示所有图片 foreach (control item in this.controls) (item is picturebox) 取得当前图片框对应的数组索引 获得图片框中显示的图片在imagelist中的索引 pictureindex="this.pictureIds[index];" 设置图片框可见 ((picturebox)item).visible="true;" 设置图片框显示的图片 ((picturebox)item).image="ilPictures.Images[pictureIndex];" 10.单击每一张图片后,都进入同一个事件处理函数。可以用下面代码获取以下信息。 当前点中的图片框在数组中的索引 newindex="Convert.ToInt32(((PictureBox)sender).Tag);" 当前点中的图片框显示的图片的索引 newpictureid="this.pictureIds[newIndex];" 11.两张图片匹配成功应满足条件 this.firstindex && this.firstpictureid="=" this.secondpictureid12.将指定索引的图片框设为不可见 (convert.toint32(((picturebox)item).tag)="=" index) 13.程序应有3个计时器控件(timer) (1)一个计时器用来控制在开始游戏前显示所有图片3秒钟后翻转(3秒显示计数器); (2)一个计时器,用来计算用户已用总时间 (3)一个计时器用来控制延时0.5s计时器,当用户选择了两张图片后,0.5秒后决定是否配对成功(消除这两张图片)或配对不成功(翻转这两张图片)。 (4)计时器的停止和起动可以使用stop()和start()方法。 14.程序流程如下所示: style="width:347px;height:184px" src="http://static.jiandati.com/c35bb8c-chaoxing2016-1051888.jpeg">图6 程序流程图 15.说明:以上实验方法只供参考,其设计方法和算法不是唯一方法也并不是最优方法,鼓励学生们对该设计的算法进行改进和创新。
第4题
患者男,56岁,缺失,双侧第一前磨牙做基牙,远中支托,三臂卡环,舌杆大连接体,义齿戴用1周后,主诉基托压痛,基牙咬合痛,检查见,舌系带根部有一个小溃疡,左侧下颌舌隆凸处黏膜红肿,双侧下颌第一前磨牙叩痛,义齿各部分密合,咬合不高
基牙疼痛的原因是()
A. 牙髓炎
B. 根尖炎
C. 牙周炎
D. 受力过大
E. 牙本质过敏
第9题
找第k小问题的分治算法. 算法开始将n个数分成5个1组,共个组,然后取每组的中位数构成集合M,递归利用找第k小算法,计算M的中位数,用作为标准划分数组,得到子问题和. 递归求解其中一个子问题即可. 如果开始分组时是3个元素一组,算法在最坏情况下的时间复杂度将达到,如果开始分组时取7个元素一组,那么用划分数组后产生的子问题最大规模将达到( ),算法在最坏情况下的时间复杂度是( ),两个括号里分别应该填:
A、
B、
C、
D、
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!