7游戏设计俄罗斯方块实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} lblmodel.Invalidate();
游戏界面截图如下:
分析:这里通过重绘,以及定时器来实现整个游戏的流程。给定时器设置一个时间间隔,每过多少秒就 刷新一次,并同时实现砖块的下落。因为会涉及到同样的数据,所以在这里也用到了锁。点击开始后, 程序读取配置信息,同时时钟开始运作,产生砖块,直到不满足条件才将其归入已经不能移动的砖块中, 再产生新的砖块。暂停的功能可以通过让定时器启动和停止来实现。在使用设置按钮时,会进入到配置 窗体。 实现暂停功能的代码如下:
if (reader.NodeType == XmlNodeType.Element) {
if (reader.Name == "ID") {
key = reader.ReadElementString().Trim(); info.Add(key, ""); } } } } 写数据到XML文件中: XmlDocument doc = new XmlDocument(); doc.LoadXml("<BlockSet></BlockSet>"); XmlNode root = doc.SelectSingleNode("BlockSet");
砖块样式配置截图窗体如下:
通过鼠标单击来实现选择不同的色块,用重绘来实现实时显示配置的砖块样式。 具体代码如下:
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();//刷新色块的颜色
if (timeBlock.Enabled == true) timeBlock.Enabled = false;
7.实验总结: 1)软件设计书的重要性。在软件设计的过程中,一个清晰的思路将会起到很大的作用, 所以在软件设计的最初就应该写好一份足够完善并且足够清晰的软件设计书。只有这样才 能时刻保持头脑清晰,抓住实现软件功能的每一个关键点。 2)掌握一个编译器。编译器是程序员的好朋友,只有熟悉掌握一种编译器,才能让软件 设计的整个过程更加流畅,要相信编译器,因为它是你最好的朋友。 2)冷静。编码是一个极其枯燥的过程,有可能你写的十行代码中会蹦出二十个错误。这 个时候你就应该相信你的编译器,不应该有急躁的心理,保持一颗冷静的心态才能找出隐 藏在代码中的 BUG。 3)代码的可读性。我相信在现在这个社会,程序设计不是一个人的独角戏,在这个需要 团队配合的时代,代码是否具有良好的可读性会成为成败的关键。所以养成良好的代码风 格是每一个程序员应该做的事情。 4)模块化。在这个项目的整个实现过程中,运用到了模块化的设计思想,将程序的各个 部分封装成一个个小的模块,按模块设计软件的各个部分。这个项目更加让我感受到了模 块化设计的优点。 5)逐步求精。在软件的开发中不要一开始就追求细节,要先把整体的框架搭建好,这样 在后续的开发中才能越来越顺利。要学会一步一步去完善整个程序。
//保存
XmlElement xelCoorWidth = doc.CreateElement("CoorWidth"); xelCoorWidth.InnerText = _coorWidth.ToString(); xelSurface.AppendChild(xelCoorWidth);
doc.Save("BlockSet.xml");
5.游戏流程展示:
开始
进入配置窗 体,配置游戏 信息。
开始游戏
配置热键、 环境设置
配置砖块 样式
6.实验数据记录及分析: 环境配置截图窗体如下:
在参数配置这个窗体中主要用到了热键、以及数据的读写,这里使用的是 XML 文 件的数据读写。将参数的配置信息写入到 XML 文件中,需要使用的时候在从 XML 文件中读取。 首先编写一个基本的 XML 文档,用于存放默认的设置用户可以不经过配置直接进入 游戏。 示例代码如下:
2. 实验相关理论: C#程序设计、窗体程序设计、多线程、锁、数据读写。
3. 实验设备和环境: 软件环境:Windows server2008 操作系统:Visual Studio 2008
4. 实验步骤: 1) 分析并设计软件结构。 2) 划分软件模块。 3) 实现具体模块。 4) 调试并修改软件。 5) 优化软件。
添加、修改、删除、保存按钮的实现。首先将已经存在的信息写入到 listview 中,然后通 过选择 listview 的项目来更改具体项目中的值,使用不同的按钮来实现对 listview 中项目不 同的操作,最后将相应的数值装换为对应的颜色码和编码。需要注意的是,应该判断当前 色块是否已经存在。 代码如下:
//添加按钮的代码 bool pd = false;
//判断图案是否为空 foreach (bool i in strArr) {
if (i) {
pd = true; break; } } if (!pd) { MessageBox.Show("当前图案为空,请在窗口左侧区域绘制图案!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); //如果为空则提示 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, MessageBoxIcon.Information); return; } } //添加信息到listview ListViewItem item = new ListViewItem(); item = lsvBlockSet.Items.Add(blockString); item.SubItems.Add(Convert.ToString(blockColor.ToArgb()));
//写砖块信息 for (int i = 0; i < info.Length; i++) {
XmlElement xelType = doc.CreateElement("Type"); XmlElement xelID = doc.CreateElement("ID"); } //快捷键 XmlElement xelKey = doc.CreateElement("Key"); XmlElement xelSurface = doc.CreateElement("Surface");
读取 XML 文件数据的代码如下:
//获取默认的xml文件 XmlTextReader reader; if (File.Exists("BlockSet.xml")) reader = new XmlTextReader("BlockSet.xml");
//获取用户配置的XML文件 Assembly asm = Assembly.GetExecutingAssembly(); //获取组件
} bool pd = false; //判断图案是否为空 foreach (bool i in strArr) {
if (i) {
pd = true; break; } } //如果为空则提示 if (!pd) { MessageBox.Show("当前图案为空,请在窗口左侧区域绘制图案!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 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, MessageBoxIcon.Information); return; } }//检查是否有重复的图案 lsvBlockSet.SelectedItems[0].SubItems[0].Text = strb.ToString(); lsvBlockSet.SelectedItems[0].SubItems[1].Text = Convert.ToString(blockColor.ToArgb());
//删除按钮的实现 代码如下: if (lsvBlockSet.SelectedItems.Count == 0)
{ MessageBox.Show("请选择图案!", "信息", MessageBoxButtons.OK,
MessageBoxIcon.Information); return;
}
<BlockSet> <Type> <ID>0000001100011000000000000</ID> </Type> <Key> <DownKey>83</DownKey> </Key> <Surface> <CoorWidth>15</CoorWidth> </Surface> </BlockSet>
江 苏 省 惠 山 中等专业 学校 实验报告
课程名称:
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; }
Stream sm = asm.GetManifestResourceStream("project.BlockSet.xml"); reader = new XmlTextReader(sm); //构造流 string key = ""; try {
while (reader.Read()) {
//修改按钮的代码 if (lsvBlockSet.SelectedItems.Count == 0)
{ MessageBox.Show("请选择任意一个选项进行修改", "信息", MessageBoxButtons.OK,
MessageBoxIcon.Information); return;
相关文档
最新文档