Loading

开题报告

题目功能描述

该游戏的核心逻辑如下:

随机生成不同形状的方块,并在游戏界面上预告给玩家,方块自动向下移动。
玩家通过键盘控制方块的移动和旋转,使其摆放在合适的位置。
当一行被方块填满后,该行方块消除,玩家获得相应的分数。
游戏在方块堆积到最高点或无法再下落时结束。

除此之外,该游戏还包括以下功能:

可以设置方块初始下落速度、棋盘行数与列数、方块样式及游戏背景样式等选项。
支持播放或暂停不同的背景音乐,并可以切换按键设置(如将上下左右改为WASD)和选择游戏人数(单人与双人)。
允许存档保存游戏进度及玩家信息,并从上次存档中恢复游戏,同时支持对不同玩家的存档进行读取。
提供游戏规则和游玩方式的介绍,实现游戏过程中的暂停与恢复,并可查看历史排行榜和当前已游玩时间等。

系统功能模块划分

1、游戏主程序模块:实现游戏的核心逻辑,包括方块的生成和下落、键盘控制、消行得分等功能,并通过合理判断来结束游戏。
2、游戏设置模块:允许玩家自定义游戏设置,包括方块下落速度、棋盘大小、方块样式、游戏背景音乐等,同时支持按键设置和单双人选择。
3、游戏存档模块:提供存档与读取功能,可以保存游戏进度和玩家信息,并支持从上次存档中恢复游戏。
4、游戏辅助功能模块:为用户提供友好的游戏使用体验,包括游戏规则介绍、暂停和恢复游戏、历史排行榜、游戏时间等功能。
5、游戏显示模块:用于展示游戏界面,包括游戏棋盘、计分板、方块、背景、设置和介绍等内容。

类体系设计

classDiagram
class Tetris {
-int rows
-int cols
-int leftMargin
-int topMargin
-int blockSize
-Resource gameRes
-Block* curBlock
-Block* nextBlock
-Block bakBlock
-Player player
-vector playersRecord
-bool gameOver
-bool moveMode
-bool bgMode
-bool fkMode
-int initspeed
-int delay
-bool update
-vector<vector> map
+Tetris(int, int, int, int, int, string, bool, bool, bool, int)
+Tetris(string)
+void init()
+void play()
+int getDelay()
+void updateWindow()
+void keyEvent()
+void drop()
+void moveLeftRight(int)
+void rotate()
+void clearLine()
+void drawScore()
+void checkOver()
+void saveGmae()
+void displayOver()
+bool isInButton(ExMessage, int, int, int, int)
}
class Block {
-int x
-int y
-int blockType
-int size
-Point smallBlocks[4]
-IMAGE
img
-Resource blockRes
+Block()
+Block(bool, int)
+void drop()
+void moveLeftRight(int)
+void rotate()
+void draw(int, int)
+int getBlockType()
+IMAGE** getimgs()
+Block& operator=(const Block&)
+bool blockInMap(const vector<vector>&)
+void solidify(vector<vector>&)
}
class InterFace {
-Resource startRes
-int buttonX
-int buttonY
-int musicCount
-bool moveMode
-bool bgMode
-bool fkMode
HWND hwnd
ExMessage msg
+InterFace()
+void changeScene(ExMessage)
+bool isInButton(ExMessage
, int, int, int, int)
+void drawStart()
+void drawIntro()
+void drawSet()
+void drawGame()
}
class Resource {
-vector picList
+Resource()
+~Resource()
}
class Player {
string name
int score
int level
int lineCount
+Player(string, int, int, int)
+void saveScore()
}
class Point {
int row
int col
}
ExMessage : IMessage
Tetris -- Block : uses
Tetris -- Player : has
Block "1" <-- "0..*" Point : composed of
InterFace -- Resource : uses
Player -- Player : saves
ExMessage -- Tetris : interacts with

数据文件设计

1、record.txt
将历史玩家的名字与分数记录在一起,按照每两行为一组的方式存储。首先是玩家名字,然后是玩家的分数。读取数据时,需要以两行为一组的方式进行处理,分别转化为对应的类型,这样才能还原成原来的数据。最后按照玩家的分数对历史排行榜进行排序,展示给玩家们。
2、player.txt
表示游戏存档,存档文件名为当前玩家名字。存储方式:按行存储,忽略空行,以字符串的方式存储,读取后再转化为原来的类型。存储内容如下:
f << rows << endl;//棋盘行数
f << cols << endl; //棋盘列数
f << leftMargin << endl; //棋盘左边界位置
f << topMargin << endl; //棋盘上边界位置
f << blockSize << endl; //方块大小
f << moveMode << endl; //按键模式
f << bgMode << endl; //背景模式
f << fkMode << endl; //方块样式
f << initspeed << endl; //方块初始下落速度
f << player.level << endl; //当前速度等级
f << player.lineCount << endl; //以消除行数
f << player.name << endl; //玩家名字
f << player.score << endl; //当前分数
//棋盘上残留的方块
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
f << map[i][j] << endl;
}
}

posted @ 2024-05-18 10:19  浩haohao  阅读(26)  评论(0)    收藏  举报