当前位置:
文档之家› 7游戏设计俄罗斯方块实验报告
7游戏设计俄罗斯方块实验报告
} lblmodel.Invalidate();
游戏界面截图如下:
分析:这里通过重绘,以及定时器来实现整个游戏的流程。给定时器设置一个时间间隔,每过多少秒就 刷新一次,并同时实现砖块的下落。因为会涉及到同样的数据,所以在这里也用到了锁。点击开始后, 程序读取配置信息,同时时钟开始运作,产生砖块,直到不满足条件才将其归入已经不能移动的砖块中, 再产生新的砖块。暂停的功能可以通过让定时器启动和停止来实现。在使用设置按钮时,会进入到配置 窗体。 实现暂停功能的代码如下:
<BlockSet> <Type> <ID>0000001100011000000000000</ID> </Type> <Key> <DownKey>83</DownKey> </Key> <Surface> <CoorWidth>15</CoorWidth> </Surface> </BlockSet>
添加、修改、删除、保存按钮的实现。首先将已经存在的信息写入到 listview 中,然后通 过选择 listview 的项目来更改具体项目中的值,使用不同的按钮来实现对 listview 中项目不 同的操作,最后将相应的数值装换为对应的颜色码和编码。需要注意的是,应该判断当前 色块是否已经存在。 代码如下:砖块样式配置截图窗体如下:
通过鼠标单击来实现选择不同的色块,用重绘来实现实时显示配置的砖块样式。 具体代码如下:
if (e.Button != MouseButtons.Left) return;
int x, y; x = e.X / 31; //x轴 y = e.Y / 31; //y轴 strArr[x, y] = !strArr[x, y]; //1 0 转换 bool b = strArr[x, y]; Graphics draw = lblmodel.CreateGraphics(); SolidBrush shuazi = new SolidBrush(b ? blockColor : Color.Black); draw.FillRectangle(shuazi, 31 * x + 1, 31 * y + 1, 30, 30);//填充 draw.Dispose();//释放 draw 使用一个内容为空的标签,用这个标签来显示选择的颜色并及时的刷新改变色块的颜色。 具体代码如下: //改变颜色 ColorDialog ColorDialog1 = new ColorDialog(); ColorDialog1.ShowDialog(); blockColor = ColorDialog1.Color; labelColor.BackColor = ColorDialog1.Color; lblmodel.Invalidate();//刷新色块的颜色
} bool pd = false; //判断图案是否为空 foreach (bool i in strArr) {
if (i) {
pd = true; break; } } //如果为空则提示 if (!pd) { MessageBox.Show("当前图案为空,请在窗口左侧区域绘制图案!", "信息", MessageBoxButtons.OK, rmation); return; } //将逻辑值转换为字符值,判断哪些方块被填充了 StringBuilder strb = new StringBuilder(25); foreach (bool i in strArr) { strb.Append(i ? "1" : "0"); } string blockString = strb.ToString(); foreach (ListViewItem it in lsvBlockSet.Items) { if (it.SubItems[0].Text == blockString) { MessageBox.Show("当前图案已存在!", "信息", MessageBoxButtons.OK, rmation); return; } }//检查是否有重复的图案 lsvBlockSet.SelectedItems[0].SubItems[0].Text = strb.ToString(); lsvBlockSet.SelectedItems[0].SubItems[1].Text = Convert.ToString(blockColor.ToArgb());
2. 实验相关理论: C#程序设计、窗体程序设计、多线程、锁、数据读写。
3. 实验设备和环境: 软件环境:Windows server2008 操作系统:Visual Studio 2008
4. 实验步骤: 1) 分析并设计软件结构。 2) 划分软件模块。 3) 实现具体模块。 4) 调试并修改软件。 5) 优化软件。
//修改按钮的代码 if (lsvBlockSet.SelectedItems.Count == 0)
{ MessageBox.Show("请选择任意一个选项进行修改", "信息", MessageBoxButtons.OK,
rmation); return;
if (reader.NodeType == XmlNodeType.Element) {
if ( == "ID") {
key = reader.ReadElementString().Trim(); info.Add(key, ""); } } } } 写数据到XML文件中: XmlDocument doc = new XmlDocument(); doc.LoadXml("<BlockSet></BlockSet>"); XmlNode root = doc.SelectSingleNode("BlockSet");
//添加按钮的代码 bool pd = false;
//判断图案是否为空 foreach (bool i in strArr) {
if (i) {
pd = true; break; } } if (!pd) { MessageBox.Show("当前图案为空,请在窗口左侧区域绘制图案!", "信息", MessageBoxButtons.OK, rmation); //如果为空则提示 return; } //将逻辑值转换为字符值,判断哪些方块被填充了 StringBuilder strb = new StringBuilder(25); foreach (bool i in strArr) { strb.Append(i ? "1" : "0"); } //赋值 string blockString = strb.ToString(); //检查是否有重复的图案 foreach (ListViewItem it in lsvBlockSet.Items) { if (it.SubItems[0].Text == blockString) { MessageBox.Show("当前图案已存在!", "信息", MessageBoxButtons.OK, rmation); return; } } //添加信息到listview ListViewItem item = new ListViewItem(); item = lsvBlockSet.Items.Add(blockString); item.SubItems.Add(Convert.ToString(blockColor.ToArgb()));
5.游戏流程展示:
开始
进入配置窗 体,配置游戏 信息。
开始游戏
配置热键、 环境设置
配置砖块 样式
6.实验数据记录及分析: 环境配置截图窗体如下:
在参数配置这个窗体中主要用到了热键、以及数据的读写,这里使用的是 XML 文 件的数据读写。将参数的配置信息写入到 XML 文件中,需要使用的时候在从 XML 文件中读取。 首先编写一个基本的 XML 文档,用于存放默认的设置用户可以不经过配置直接进入 游戏。 示例代码如下:
江 苏 省 惠 山 中等专业 学校 实验报告
课程名称:
C#程序设计
实验名称: 游戏设计:俄罗斯方块
班级 : 姓 名:
G1241 鲍顺亮
日 期:
2014.6
指导教师:
卫洛斌
成绩
1. 实验目的: 俄罗斯方块是一个经典的游戏,要完成这个项目需要设计的面也十分广。通过完成这个项 目可以了解自己的知识掌握程度以及对知识点的灵活运用程度,并且能让我们充分了解软 件开发的具体流程。对在校生来说,这是一个让我们融会贯通的好机会,也是为以后的程 序学习打好了一个坚实的基础。
lsvBlockSet.Items.Remove(lsvBlockSet.SelectedItems[0]); btnClear.PerformClick();
//删除按钮的实现 for (int i = 0; i < 5; i++)
{ for (int j = 0; j < 5; j++) { strArr[i, j] = false; }
//保存
XmlElement xelCoorWidth = doc.CreateElement("CoorWidth"); xelCoorWidth.InnerText = _coorWidth.ToString(); xelSurface.AppendChild(xelCoorWidth);