回 帖 发 新 帖 刷新版面

主题:俄罗斯方块3D&浅谈游戏编程架构

呵呵,虽然一直想写大的游戏,可始终是力不从心。所以我还是从小游戏开始。花了两天时间写了一个最经典的,也是很多很多人都曾经做过的俄罗斯方块。虽然只是一个小游戏,但是我想到了很多。下面谈谈所感所悟,不足之处,请版主王子以及wwjjw大师指正。

这一会,我把整个程序分成了逻辑层,数据结构层,系统层,用互交互层和图形层几大块。我首先放开其它的不管,先做逻辑层,而且保证逻辑层的独立性,也就是说,逻辑层不管其它的东西,放到哪都可以用。

这样一来,整个程序就十分的清晰明了了。下载包里有我的源代码。在很多这类游戏里面,都用到了大量的分支判断语句,包括那些经典的俄罗斯方块算法。可是在我的程序里,你却看不到大串的分支判断语句(下载包里有源代码)。为什么呢?因为我把下落的方块定义为一个类,而静止的方块定义为另一个类。当方块掉落到方块堆里时,可能会发生“坍塌”,这也是这个游戏中最难的解决的一个问题,而我则把“坍塌”的方块加入到下落的方块中,这样就问题就自然解决了!这样很好的做到了代码重用,同时也避免了复杂的算法!我想,这就是面向对象编程的好处吧。

我这个小游戏叫“俄罗斯方块3D”,你一定奇怪,为什么不叫做“3D俄罗斯方块”呢?人的思维总是这样,总是首先想到事物的外表,当我们有写游戏的冲动时,我们脑子里总是充满了游戏的画面,玩游戏的感觉吧。可是编程却不应该从表面做起,编程就是把一个问题用程序语言描述给电脑。所以,编程应当从逻辑做起,程序的逻辑层就好像一栋大楼的地基,大楼的栋梁,只有坚固的逻辑层,才能建立起健壮的程序!

而图形层,是表现逻辑层的。图形层用什么来实现,逻辑层不管。我用D3D来实现的,用别的一样可以。

呵呵,点点感悟,望指正。

回复列表 (共15个回复)

沙发

下这里也可下载:http://upload.programfan.com/upfile/200709291558143.rar

板凳

    哈哈,兄台隐忍多时,终于出手了。
    不过,美中不足,发布时似乎遗漏了 d3d9.dll 这个文件。呵呵,至少我机子上没有(估计许多人也没有)。所以,运行不了(郁闷中...)。因此,请立即补上该文件,别让玩家在首次玩你的游戏时受挫。
    游戏逻辑实现方面,我当初倒是觉得方块的翻转和固定很难做(其实很简单,是自己把问题想复杂了),消除及落下反而容易了。
    至于你说的那种分层结构,我亦认为比传统的方式要好许多(我也尝试过,可惜未用于开发游戏),它使代码变得灵活,维护变得容易(拥有大量分支结构的程序极难维护),且能在别处重用,以及可扩展。正如你所说“这是面向对象编程的好处”。
    其他方面,暂时不作评论,因为尚不能运行你的游戏,等看了以后再说。

3 楼

缺d3dx9_2*.dll 的解决
微软2月版 DirectX End-User Runtime  
包含了最新游戏和Autodesk需要的d3dx9_24.dll、d3dx9_25.dll、d3dx9_26.dll、d3dx9_27.dll、d3dx9_28.dll、d3dx9_29.dll  
在玩游戏时提示缺少了d3dx9_2*.dll 此类文件的朋友请下载此运行库.  
文件名:directx_feb2006_redist.exe  
发布日期:2006/2/17  
语言:简体中文  
下载大小: 49.0 MB  
高速下载地址:
http://download.microsoft.com/download/2/4/3/243865fc-c896-497e-9a66-bcc3f596741e/directx_feb2006_redist.exe
(请复制上面的地址下载 微软官方下载 肯定没有毒咯 赫赫 大家放心)

4 楼

    终于可以运行了,玩了一轮,谈谈看法。
    首先,兄台的构思确实比较标新立异。若单纯从技术角度上看,毫无疑问,你的作品是十分成功的。但是,从普通玩家角度出发,我倒觉得这种 3D 形式的 Tetris 并不好玩。为什么?因为,我认为 Tetris 的可玩性就在于它的简单与直观。3D 的视角很炫也很酷,但(再加上左右不停地晃动)无形之中增加了玩家的负担。我玩的时候就感觉有点吃力,在方块落下时很难看清落点,极易产生误判,从而造成败局。
    其次,游戏界面和图形尚可再美化一番,顺便再添加一点音乐和音效,这些细节往往容易被忽略(国外在这方面就做得很好,很值得我们学习借鉴)。此外,GameOver 时游戏反馈信息不明显。其后,最好还能有个积分榜,让玩家可以输入自己的姓名(因为人都有炫耀自己的欲望)。
    以上乃本人一家之言,未必正确,其中不妥之处,还望兄台见谅。游戏开发之路任重道远,望吾等相互学习,在摸索之中向前迈进。

5 楼

我的机子是Directx9.0c的能运行。
  我也曾经尝试过做这个游戏(当然只是平面的),可惜失败了。我把方块定义为结构,方块的旋转倒是容易实现,失败的是方块的消除和竖条状方块靠边时的旋转问题。这些都完全没想到,原以为挺简单的没有对整个编程思路进行完全细致的分析就匆匆上马,最后导致思维混乱。
  确实,自己的水平与两位相去甚远,这里不敢与两位大师探讨编程思路,只是作为玩家就游戏本身来说两句:游戏如果配上音乐音效会有更好的效果;方块都是纯色立体感不强,如果加上纹理材质贴图就会大大增强立体感。外边框虽然做的是立体的,但由于都是用的纯白色,区分不出不同的面,基本没有立体感,还有如果苛刻一点再加上光线投影,那立体感是没话说的!我想既然是3D的,那么那种给人以强立体感是最重要的。
这些我想你都能做出来的。哈哈,希望能看到你更牛的习作。

6 楼

呵呵,我急急忙忙写的,其实是给一个朋友写的,后来想到很多,多说了几句,请见谅

而且不要大师长大师短的,我看得有点想吐血了。[em10]

7 楼

有机会应该看看<设计模式>
很经典的~

8 楼

切,真笑死人了,游戏编程的版主,猪头王子,连DirectX都不懂,少了DLL文件,还要问。我虽然不懂游戏编程,但游戏运行要DX,GL等,总还知道一些。切,还做版主,真是一个猪头!

9 楼

人无完人,大学教授有时都做错小学的题目呢,你认为很简单的东西别人不一定了解,相反你不了解的东西可能别人却很精通,我们来论坛不是来比谁懂得多的,而是本着互相学习取长补短的态度的。来论坛不是为了尖刻挑剔别人的。
  多说了几句,还望 国之骄子 别见怪。

10 楼

[quote]切,真笑死人了,游戏编程的版主,猪头王子,连DirectX都不懂,少了DLL文件,还要问。我虽然不懂游戏编程,但游戏运行要DX,GL等,总还知道一些。切,还做版主,真是一个猪头![/quote]

呵呵,对我不满可以批评,不过请注意你的用词!
我是不懂 DX,这我承认。但是,不懂 DX 并不不表示我不能当版主!!
正如 wwjxjj 兄弟所言,大家到这里,是出于共同爱好交流学习而来的,并不是来开骂的。你这种鸟人我网上见多了,懒得和你打口水战,如果你觉得自己很行的话,我可以考虑把版主之位让贤给你,如何?

我来回复

您尚未登录,请登录后再回复。点此登录或注册