俄罗斯方块Java程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

俄罗斯方块游戏

一、课题内容和要求

课题内容:俄罗斯方块游戏(Tetris)是一款经典单机游戏,早期常见于各个平台。设计一个俄罗斯方块,玩家根据下落的不同方块形状,通过上、下、左、右四个键实现对方块的左右移动、旋转、下落等控制。游戏中,一共有7种不同的方块形状、每种方块以1/7的概率随机出现,一旦方块到达顶部,游戏结束。当某一个行布满方块时,改行消除。

基本要求:通过图形界面实现俄罗斯方块游戏;能以图形显示游戏运行的过程;实现相应四个键游戏玩家的控制;记录消除的行数。

扩展要求:在上述功能要求的基础上,为了提高成绩,可以添加一些额外的功能;变量、方法命名符合规范;注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释;程序的层次清晰,可读性强。

系统功能要求:

(1)界面设定

玩家可以在界面左侧的游戏区中堆积方块,游戏区上面有“游戏”“帮助”两个选项,界面右侧为游戏得分,玩家在游戏过程中随时可以查看游戏得分。(2)游戏控制

不同的随机图形会从区域上方缓慢落下,通过键盘的左、右、下键可以控制方块以一格为单位左右移动,长按实现快速移动;上键能以90度为单位旋转每一方块;区域中横向格子方块填满,则该行会自动消除并为玩家的得分;当固定的方块推到区域最上方,则游戏结束。

二、需求分析

1.需求分析

图-1 俄罗斯方块游戏需求分析

2.任务及实现方式

(1)绘制游戏区域

通过绘制地图方块、已经固定的方块和运动中的方块来实现(2)实现键盘对方块的实时控制

添加键盘监听者和方块位置移动的函数

(3)记录消除行数

添加记分函数和Graphics类的drawString函数实现

(4)游戏结束

添加判断游戏结束函数并给出提示

3.预期效果

(1)实现俄罗斯方块游戏的动态显示

(2)实现键盘对方块各种操作

(3)实现消行、记分

(4)游戏能够正确结束

三、概要设计

1.主要功能流程图

说明:游戏流程较为复杂,流程图粗略显示部分流程

图-2 主要功能流程图

2.主要类及类之间的关系的UML图

图-3 Class Tetris

图-4 Class Tetrisblok

图-5 RelationShip 四、源程序代码

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.*;

import javax.swing.Timer;

public class Tetris extends JFrame {

public Tetris() {

Tetrisblok a = new Tetrisblok();

addKeyListener(a);

add(a);

}

public static void main(String[] args) {

Tetris frame = new Tetris();

//菜单条

JMenuBar menu = new JMenuBar();

//添加菜单条

frame.setJMenuBar(menu);

//菜单

JMenu game = new JMenu("游戏");

//菜单项

JMenuItem newgame = game.add("新游戏");

JMenuItem pause = game.add("暂停");

JMenuItem goon = game.add("继续");

JMenuItem exit = game.add("退出");

//菜单

JMenu help = new JMenu("帮助");

JMenuItem about = help.add("关于");

//添加菜单至菜单条

menu.add(game);

menu.add(help);

//对窗口设置

//居中

frame.setLocationRelativeTo(null);

//关闭程序

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//大小

frame.setSize(220, 275);

//标题

frame.setTitle("俄罗斯方块");

//可见性

frame.setVisible(true);

//不可更改大小

frame.setResizable(false);

}

}

// 创建俄罗斯方块类

class Tetrisblok extends JPanel implements KeyListener {

// blockType 代表方块类型

// turnState代表方块状态

private int blockType;

private int turnState;

private int score = 0;

private int x;

private int y;

private int i = 0;

int j = 0;

int flag = 0;

// 定义已经放下的方块x=0-11,y=0-21;

int[][] map = new int[13][23];

// 7种方块类型,每一个方块有4种旋转状态,使用16位数字表示一种旋转状态private final int shapes[][][] = new int[][][] {

// i

{ { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },

{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },

{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },

{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },

// s

{ { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

相关文档
最新文档