回 帖 发 新 帖 刷新版面

主题:[原创]欢乐俄罗斯:用Pascal开发的对战型俄罗斯方块游戏【2008/2/17更新】

欢乐俄罗斯 Ver 7.0

本软件是由阿Ben独立开发的一款对战型俄罗斯方块游戏。游戏采用中文界面,操作简单,极容易上手。而且对系统配置要求低,在DOS模式就可以运行。

本游戏采用双人对战模式,支持与电脑对战,可以使用道具,并独创游戏表情,增强游戏趣味性。

在开发过程中,我参考或直接使用了在[url=http://bbs.programfan.com/]《编程爱好者论坛》[/url]上的以下帖子,在此对这些发好帖的网友表示特别鸣谢:

[url]http://www.programfan.com/club/showbbs.asp?id=28558[/url]    第 2 楼  whbchy
[url]http://www.programfan.com/club/showbbs.asp?id=40869[/url]    楼主     fuch
[url]http://www.programfan.com/club/showbbs.asp?id=14025[/url]    楼主     jtchang
[url]http://www.programfan.com/club/showbbs.asp?id=99838[/url]    第 1 楼  林记
[url]http://www.programfan.com/club/showbbs.asp?id=110047[/url]   第 14 楼 jtchang

【2006年 1月26日更新 Ver 5.1】
● 使用网友 Jtchang 传授的调色板技术制作了淡入淡出转场特效。
● 为 Loading 添加了进度条。
● 祝大家新年快乐!

【2008年 2月17日更新 Ver 7.0】
● 使用卷轴技术实现画面震动特效,避免存取大面积图像。
● 使用KeyPress键盘操作专用单元,改进键盘操作的流畅性。
● 添加方块的下落预览
● 更改英文字体
● 添加一个帮助(其实只是读取Readme.txt)
● 修复一些Bug

请注意:由于DOS程序逐渐被微软忽视,所以本程序可能无法运行在Windows Vista中,甚至在部分XP的电脑中运行起来也会有问题。因此,建议大家使用DosBox来运行本程序以及其他所有DOS程序。DosBox中,设置CPU Cycles数值为11000或以上来运行本程序可达到较好的效果。

[color=FF0000]由于本人的兴趣关系,以后本程序可能会很少更新,甚至不再更新。[/color]不便之处,敬请谅解!

下载地址:[url]http://upload.programfan.com/upfile/200802171907506.rar[/url]

回复列表 (共36个回复)

31 楼

毫无疑问,计分是一个好提议。但是,应该如何计分呢?也就是说,应该什么时候加多少分?获得高分又有什么奖赏?还望大家多提宝贵意见啊!
好的意见可以像第30楼一样有加分喔!

32 楼

自己顶起来!!!

33 楼

问一下,key单元怎么用的?

34 楼

回楼上:
Key单元用法:
首先用 Set_Handler 然后用 WaitForACSReleased 初始化,此时CRT单元的Readkey和Keypressed失效。
完后用 Remove_Handler 结束。
有下面几个东西可以用:
Function KeyPressedNow : Boolean;
判断键盘是否有键正在被按住

Function KeyPressed2 : Boolean;
相当于CRT的 KeyPressed

Function ReadScan : Byte;
Function ReadChar : Char;
这两个相当于CRT的 ReadKey,只是返回的值的类型不同

Procedure ClearKeyboardBuf;
清空键盘缓冲区,即强制使 KeyPressed2 = False

KeyMap : Array [0..$7F] of Boolean;
这个数组用来判断某个键是否正在被按住。
例如:若 KeyMap[sEnter]=True,则表示你当前正按着Enter键;若 KeyMap[sRight]=True,则表示你正按着右方向键。

至于上面提到的 sEnter、sRight 等等,是Key单元内置的常量。具体请打开 Key.pas 自行查看。

35 楼

这单元太好了,谢谢.

游戏中还有一个可以改进的地方,开头loading和几个大字出来的画面最好只在打开程序时播放一次

36 楼

很多人玩了这个游戏,都以为那些Loading是假的……
其实这是真的在Load。Loading时,程序会从文件中读取图像,一个个像素读入,同时一个个像素描进屏幕上。描完后,用getimage把图像存到指针里。因此图像的载入速度是很慢的。
由于我怕内存不足,所以开始进行游戏前和结束游戏返回菜单前程序都把图像从内存中释放掉,然后载入游戏中的图像或者菜单中的图像。所以程序运行时会出现很多次Loading。
当然,这个游戏可以改进的地方有很多,但我已经说了,由于我要转到C++中去,所以以后可能很少更新这游戏了。

P.S.大概两个月前,我到学校的图书馆里随意地翻书,无意中翻到一本关于Turbo Pascal的全英文的书,然后无意中看到了两个非常非常有用的过程:
BlockRead 和 BlockWrite
BlockWrite 的作用是把指针里的内容保存到文件里,BlockRead则是把由BlockWrite保存的内容读取并保存到指针里。
用这两个过程,就不需要自行创造图像文件,也不需要先把图像描到屏幕上。直接读取进内存,图像读取速度将大大加快。
要是我某一天突然心血来潮想更新这个游戏,我会改用这两个函数。

我来回复

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