中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
俄罗斯方块.NET开发攻备
作者:范晓炬 时间:2006-09-29 11:30 出处:ccidnet.com 责编:月夜寒箫
              摘要:俄罗斯方块.NET开发攻备

俄罗斯方块是个老幼皆宜的小游戏,在游戏设计界就好比高深武功的入门起手式。无数人进入游戏编程的世界都是从编写俄罗斯方块游戏开始的,因为这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结构知识熟练程度的便捷途径。

让我们来看看如何使用C#语言在.NET平台上生成俄罗斯方块游戏。当你完成时,会发现编程竟如此简单,而自己在不知不觉中已跨入了它的大门。

 

所需条件

我们需要一些语言本身不直接提供的能力,首先,必须能够在屏幕的任何一个位置画东西,其次要能够立即得知用户按了哪一个键。如果第一个条件不能满足的话,你将很难看到一个完整的游戏进行状态图。而如果无法实现第二个条件,恐怕玩起来就必须不停地“按一个键→回车→按另一个键→再回车”,有多麻烦。

我们使用Visual C#就能完全满足要求。

 

游戏的功能定义

知道了基本条件,就可以开始设计游戏了,编写者必须对俄罗斯方块游戏的规则进行严格的描述。可以这样定义:屏幕上有一个X列Y层的区域,计算机自动产生多种不同类型的方块,并出现在区域的最顶端;然后每过一个固定时间间隔向下落一层,玩家可以使用键盘控制方块向三个方向移动和顺逆时针旋转90度。不过前提是方块移动和旋转后的位置必须是空的。当方块落到区域底部或者另一方块之上将停止移动,然后新的方块会产生。当新方块无处放置的时候:GAME OVER。

 

设计游戏的逻辑

首先是定义游戏相关的数据存储方法,分为两个主要的部分,一个是当前的方块,需要保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示。

我们还需要:

按键分析模块:分析得到按键的含义,做出响应;响应模块:“左”、“右”、“下”、“移动”和“旋转”几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方块画到新的位置之上;检查模块:在每次状态改变之前,对方块企图占用的区域加以检查。如果无处可放,则此次移动失败。如果方块到底了,应该固定在当前位置,这可以调用前面的画方块模块实现,同时再产生一个新的方块。这样还需要写一个产生新方块的模块。还有当每次方块到底的时候,都需要检查一下是否有新的层排满了,如果有的话应该消层。这就又需要写两个模块,检查是否排满和消层。产生新方块时也需要检查其产生的位置,如果这个位置已被占用。那怎么办?猜对了:GAME OVER!这需要调用前面的检查模块实现。

到了这里游戏逻辑就差不多了,但是等等,好像少了点什么。啊哈,我们忘了俄罗斯方块也是会自动下落的,可以检查系统时间,规定过一个指定的时间间隔就调用一次方块下落模块。

在Visual C#上的实现

由于Visual C#使用非常方便,几乎不需要额外的知识就可以完成这个游戏。

进入Visual Studio.net后,在事件栏里双击KeyDown,就会自动产生一个方法。我们在里面只要填写几行代码,就可以判断按键到底是什么(如图1)。

 

 

图1

在旁边的工具箱的组件栏里面选中Timer,添加到窗体里面。这是定时器,修改Interval属性可以更改定时间隔。在时间栏里双击Tick,产生一个方法。每隔一定时间间隔这个方法就被调用一次(如图2、图3)。

 

 

图2

 

 

图3

在程序中,可以使用Canvas对象的FillRectAngle方法实现画一个矩形。而用区域的底色再画一次就是擦除方块了。画方块的代码如下:

Graphics canvas = Graphics.From-
              Hwnd(frmMain.handle);
              SolidBrush fillBrush = new SolidBrush(填充颜色);
              canvas.FillRectangle(fillBrush, 横坐标, 纵坐标, 长, 宽);

其他自己实现的模块可以加为窗体对象的方法。至于变量也可以设计成窗体的域。如果你不熟悉C#的语法,不用担心,可以使用向导功能,Visual Studio.net会自动加入你所需要的东西。

关于实现还有更多的细节。通过自己的努力来解决这些问题并不难,还可以获得意想不到的乐趣,在此笔者就不赘述了。

 

更深入一些

使用Visual C#几乎可以做出一切东西来,从即时战略到三维RPG游戏。当然还有各种应用软件了。如果想开发出更复杂的游戏,还需要学习更多的东西,为了提高显示速度,需要使用DirectX,为了制作3D图像,又要使用Direct3D。由于游戏的流程和内部原理很复杂,所以需要学习数据结构、图形学、操作系统……

学习这么多专业知识需要很大的努力,不过如果心中有一个梦想,那么再难的目标也能实现。“千里之行,始于足下”,尤其是在迈出了俄罗斯方块的第一步之后,你实际上已经走进了软件开发,尤其是游戏开发的大门,前面的世界是美丽多彩而又充满挑战的。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有