65.9K
CodeProject 正在变化。 阅读更多。
Home

Brick 2005 游戏引擎(原 Tetris 2005 游戏引擎)

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.65/5 (15投票s)

2005年8月7日

CPOL

9分钟阅读

viewsIcon

89935

downloadIcon

2263

本游戏引擎教程描述了如何玩游戏以及如何自定义游戏。该游戏非常用户友好,允许您在不更改 VB 代码的情况下更改视图、难度等。

Sample Image - Main.gif

目录

简介:什么是 Tetris '2005?

Tetris '2005 是一款激动人心的动作游戏。在整个游戏中,各种类型的砖块从游戏区域的顶部落到底部。当砖块在游戏区域中形成实心的一行时,该行就会消失。

因为这是移除方块的唯一方法,所以您应该尽可能多地尝试形成实心行。当方块堆积到游戏区域顶部时,游戏结束。

您只能在砖块下落时对其进行操作。下落的砖块可以旋转、水平移动或直接落到底部。

这款精美小巧的游戏提供了高分榜、预览屏幕、位置指针等功能。它没有多媒体,但旨在为漫长辛苦工作日中的短暂休息带来一丝乐趣。如果您想支持我的工作,请评价这篇文章并访问我的其他程序。
快来看看吧!

用户手册

我知道很多人只想尝试一下示例,看看是否值得花时间研究源代码。因此,我将首先介绍游戏和控件,然后在后面的部分解释它是如何工作的。

本中级教程描述了如何玩 Tetris 以及如何移动砖块。

砖块

"." 砖块
":" 砖块
"H" 砖块
"I" 砖块
"J" 砖块
"L" 砖块
"N" 砖块
"O" 砖块
"T" 砖块
"Z" 砖块

游戏规则

砖块一次一个地出现在游戏区域顶部,然后以恒定速度下落。

每块砖块都会一直下落,直到它落在另一块砖块上或游戏区域底部。

您只能在砖块下落时对其进行操作。

使用键盘,您可以旋转下落的砖块,并将其向左、向右或向下移动。

每次形成一条实心方块行时,该行就会消失。尝试在砖块下落时进行操作,以便形成并消除实心行。

当方块堆积到游戏区域顶部时,游戏结束。

键盘功能

向上箭头,

Insert,

Home 旋转当前砖块
向左箭头 向左移动当前砖块
向右箭头 向右移动当前砖块
向下箭头,将当前砖块直接落到底部

选项

[ ] 显示预览屏幕

通过取消选中此选项,将隐藏显示即将出现的砖块的预览框。这将获得特殊奖励积分。

[ ] 显示位置指针

通过选中此选项,RSM 的 Tetris 2005 将在您的“游戏区”底部显示一个位置指针,以方便您导航砖块。有关这如何影响您的奖励积分的信息,请参阅“计分”部分。

技能等级

您可以在此处选择开始游戏的级别。用户可以根据自己的意愿选择级别。新手适用于新用户,普通适用于普通用户,专家建议用于高级用户。

背景颜色

点击颜色预览区域即可更改 RSM 的 Tetris 2005 “游戏区”的背景颜色。

玩游戏

RSM 的 Tetris 2005 的目标是尽可能长时间地继续玩下去。当游戏区被砖块堆满至顶部时,游戏结束。下一节将解释如何玩游戏。

选择技能等级

在“选项”菜单中,选择 1 到 20 的起始级别。级别越高,砖块下落速度越快。

开始新游戏

在右侧的按钮中,选择“开始”。

水平移动砖块

使用相应的键盘控件。您可以将当前砖块向左或向右移动。
注意:如果当前砖块靠近边缘或靠近已放置的方块,您可能无法移动它。

旋转砖块

使用相应的键盘控件。您可以将当前砖块逆时针旋转 90 度。
注意:如果当前砖块靠近边缘或靠近已放置的方块,您可能无法旋转它。

下落砖块

使用相应的键盘控件。当您下落砖块时,它会快速下落,直到碰到静止的砖块或游戏区域底部。

暂停游戏

从“游戏”菜单中选择“暂停”,或单击“暂停”按钮。

注意:要恢复游戏,请再次选择“暂停”。

评分

当前砖块的初始得分值会随着游戏级别的升高而增加。

“Tetris '2005 耻辱榜”

如果您取得了新的高分(这意味着,如果您获得的分数高于“RSM Tetris 2005 耻辱榜”窗口中列出的分数),将打开一个特殊窗口,您可以添加您的名字和您选择的“酷语”到此列表!

您还可以使用“保存”按钮将您的高分窗口保存为名为“HiScore.bmp”的位图文件。

策略和提示

本节包含有助于成功玩 RSM Tetris 2005 的技巧。

  • 使用砖块预览框来积累经验,然后关闭此选项以获得更高的分数。
  • 尝试使用位置指针工具……根据您的反应时间,它能为您带来比其成本更高的分数吗?
  • 避免建造“山”。尽量使顶部的方块堆保持平整。
  • 避免创建宽度为一格、深度为多格的“峡谷”。您可能会发现自己紧张地等待着那个长条形砖块(当您需要它时,它似乎总是不出现)。
  • 始终尝试在堆叠方块的顶部留出至少三格宽的“平坦区域”。这样,您就可以在不留任何空隙的情况下下落大多数方块。
  • 有时,留下一个空隙并进入下一级别对您有利。如果您能消除下一级别,您可能就有时间在之后填补空隙。
  • 一旦砖块落在另一块砖块上,它仍然可以在很短的时间内进行操作。您可以使用这段时间将砖块“滑”到“悬垂”下方。

Using the Code

详细注释可以在源代码存档中找到。游戏由许多较小的子系统构成。每个系统都有其独特的作用。我已识别出以下系统。

架构

  • 游戏引擎
  • 主窗口
    • 砖块显示
    • 预览屏幕
    • 位置指针
    • 2D 按钮显示
  • 选项窗口
  • 分数窗口
  • 帮助窗口

核心引擎

Tetris 核心引擎包含四个主要功能:

  • SelectBrick
  • SetCurrentPosition
  • DrawBrick
  • HideBrick

这些功能支持与砖块相关的操作,例如选择砖块、设置砖块的当前位置、显示和隐藏砖块。

核心引擎作为严格的后端引擎实现。它不包含用户界面组件。大多数函数都返回一个 Boolean 返回代码。应始终检查返回代码以确定这些函数的完成状态。

已采取特别措施,确保这些功能非常稳定和健壮。

Public Sub SelectBrick()

此子程序用于选择 Brick 类型。

Public Sub HideBrick(frm As Form)

此子程序用于隐藏 frm Form 中的所有砖块。

Public Sub DrawBlock(frm As Form)

此子程序用于在 frm Form 中显示选定的砖块。

Public Sub SetCurrentPosition(a As Integer, Optional b, _
	Optional c, Optional d, Optional e, Optional f)

此子程序用于在 frm Form 中设置砖块的初始位置。

其他重要功能

Public Sub Increment(X As Integer) 

当用户在主窗口的 KeyDown 事件中按下向左、向右或向下键时,会调用此函数。它会递增下一个位置变量的值。

Public Sub CheckStatus(X As Integer, a As Integer, Optional b, _
	Optional c, Optional d) 

Increment 之后调用此函数,以检查下一个位置变量所指定位置的可用性。

Public Sub MoveBlock() 

如果 CheckStatus 函数返回 true,则调用此函数将当前砖块移动到下一个位置。

Public Sub CheckRowBuilt(frm As Form)

此函数检查每一行的状态,如果某行已满(即包含 10 块砖块),则移除该行并增加分数。

Public Function CheckGameOver(frm As Form) As Boolean 

此函数用于在绘制新砖块之前检查游戏状态。

Public Sub frmOptionSetting() 

此函数用于根据用户通过选项窗口所做的设置来更改游戏设置。

Public Sub LoadScoreFile(frm As Form) 

此函数用于从文件加载分数到分数窗口。

Public Function CheckGameOver(frm As Form) As Boolean 

此函数用于保存分数。

预览屏幕

预览屏幕模块包含三个函数:

Public Sub HidePicBox(frm As Form) 

此函数用于清除预览屏幕。

Public Sub ShowPicBox(frm As Form, a As Integer,Optional b, _
	Optional c, Optional d, Optional e,Optional f) 

此函数用于显示下一个砖块的预览。

Public Sub ShowPreview(frm As Form) 

此函数用于设置砖块在预览窗口中的位置。

位置指针

位置指针模块包含三个函数:

Public Sub ShowPositionPointer(frm As Form) 

此函数用于显示位置指针。

Public Sub HidePositionPointer(frm As Form) 

此函数用于隐藏位置指针。

Public Sub SetPositionPointer() 

此函数用于设置主窗口中位置指针的位置。

2D 按钮显示

要显示 2D 按钮,我们需要操作一些 Image box 的鼠标事件。

Private Sub imgbutton_MouseMove(Index As Integer, Button As Integer, _
	Shift As Integer, X As Single, Y As Single) 

在此事件中,我们使用灰色和白色的线条绘制矩形。

Private Sub imgbutton_MouseDown(Index As Integer, Button As Integer, _
	Shift As Integer, X As Single, Y As Single) 

在此事件中,我们更改 Image box 的左侧和顶部位置。

Private Sub imgbutton_MouseUp(Index As Integer, Button As Integer, _
	Shift As Integer, X As Single, Y As Single) 

在此事件中,我们恢复 Image box 的左侧和顶部位置。

Private Sub imgbutton_DblClick(Index As Integer)

在此事件中,我们根据 Image box 的索引执行命令。

选项窗口

选项窗口让用户可以根据自己的需求配置游戏设置。

分数窗口

分数窗口显示了获得最高分用户的详细列表。

帮助窗口

帮助窗口显示键盘功能。

结论

我要感谢我的兄弟 Rohit Soam 的建设性批评和编辑,也感谢我的朋友 Nikhil 在测试游戏时给予的帮助。

历史

故事

我最初编写了一个包含源代码的小游戏(基于 Turbo C++)。由于我(Mohit)一直梦想着创作一个这样的逻辑游戏,但从未花时间去考虑从哪里开始,所以我抓住了这个机会。我们一起努力,添加了一些大家可能会喜欢的很棒的功能,然后就有了这个!

我们做这个游戏纯粹是为了好玩。当我们收到您们关于是否喜欢这款游戏的邮件时,我们感到很高兴,也知道您们喜欢它(不喜欢它……嗯,我不确定 ~'.'~)。

注意

RSM Tetris 2005 与 'The Tetris Company' 没有任何关联,也不是官方的 Tetris 产品。游戏图形界面基于 Bricks 2005。

  • 2005 年 8 月 8 日 - “RSM Tetris 1.1”首次发布
© . All rights reserved.