- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 俄罗斯方块游戏的编制
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它看似简单但却变化无穷,令人上瘾。无数人进入游戏编程的世界都是从编写俄罗斯方块游戏开始的,因为这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结构知识熟练程度的便捷途径。移动和旋转自己窗口内落下的方块,方块在一行堆满后就可以消掉,堆积至窗口顶端,。系统缺省设置使用右边的窗口,用光标操作,←左移一格;→右移一格;↑旋转方块;方块丢下(方块下落到底)用户还可以自定义习惯的按键来操作游戏。点击按钮出现一个对话框,可以设置游戏规则。 开始级别(缺省是级),级别是1-10级,级别越高方块下落速度越快屏幕上有一个X列Y层的区域,计算机自动产生多种不同类型的方块,并出现在区域的最顶端;然后每过一个固定时间间隔向下落一层,玩家可以使用键盘控制方块向三个方向移动和顺逆时针旋转90度。不过前提是方块移动和旋转后的位置必须是空的。当方块落到区域底部或者另一方块之上将停止移动,然后新的方块会产生。当新方块无处放置的时候首先是定义游戏相关的数据存储方法,分为两个主要的部分,一个是当前的方块,需要保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示。分析得到按键的含义,做出响应;响应模块:“左”、“右”、“下”、“移动”和“旋转”几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方块画到新的位置之上;检查模块:在每次状态改变之前,对方块企图占用的区域加以检查。如果无处可放,则此次移动失败。如果方块到底了,应该固定在当前位置,这可以调用前面的画方块模块实现,同时再产生一个新的方块。这样还需要写一个产生新方块的模块。还有当每次方块到底的时候,都需要检查一下是否有新的层排满了,如果有的话应该消层。这就又需要写两个模块,检查是否排满和消层。产生新方块时也需要检查其产生的位置,如果这个位置已被占用这需要调用前面的检查模块实现。检查系统时间,规定过一个指定的时间间隔就调用一次方块下落模块。menuItem6 打开音乐 menuItem7 帮助 panel Panel1 显示游戏中当前的方块 Panel2 显示游戏中要出现的下一个方块 Label Label1 显示手速 Label2 显示行数 Label3 显示快数 Label4 显示级别 Button Button1 开始 Button3 打开游戏设置界面 Button4 暂停 Windows media player axMediaPlayer1 音乐播放器 另外,在界面中还设置了一个TextBox控件。在界面操作中,把焦点一直放置在这个控件中,方便用户用键盘操作方游戏方块。
在游戏中需要保存用户自定义的一些设置,本游戏中把设置保存到setting.cob文件中,并在界面加载的时候调用。主界面Load事件的代码如例程3-1所示,游戏设置保存代码如例程3-2所示。
例程3-1主界面Load代码
private void MainForm_Load(object sender, System.EventArgs e)
{
this.Initiate();
}
private void Initiate()
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(c:\\setting.ini);
XmlNodeList nodes=doc.DocumentElement.ChildNodes;
this.startLevel=Convert.ToInt32(nodes[0].InnerText);
this.level=this.startLevel;
this.trans=Convert.ToBoolean(nodes[1].InnerText);
keys=new Keys[5];
for(int i=0;inodes[2].ChildNodes.Count;i++)
{
KeysConverter kc=new KeysConverter();
this.keys[i]=(Keys)(kc.ConvertFromString(nodes[2].ChildNodes[i].InnerText));
}
}
catch
{
this.trans=false;
keys=new Keys[5];
keys[0]=Keys.Left;
keys[1]=Keys.Right;
keys[2]
文档评论(0)