java大作业 俄罗斯方块_俄罗斯方块Java程序设计

2021年2月9日发(作者:pending)

俄罗斯方块游戏

一、

题内容和要求

课题内容:俄罗斯方块游戏(

Tetris

)是一款经典单

机游戏,早期常见于各

个平台。

设计一个俄罗斯方块,

玩家根据下落的不同方块形状,

通过上、

下、<

/p>

左、

右四个键实现对方块的左右移动、旋转、下落等控制。游戏中

,一共有

7

种不同

的方块形状、每种方

块以

1/7

的概率随机出现,一旦方块到达顶部,游戏结束。<

/p>

当某一个行布满方块时,改行消除。

本要求:

通过图形界面实现俄罗斯方块游戏;

能以图形显示游戏

运行的过

程;实现相应四个键游戏玩家的控制;记录消除的行数。

扩展要求:在上述功能要求的基础上,为了提高成绩,可以添加一些额外的功

能;变量、方法命名符合规范;注释详细:每个变量都要求有注释说明用途;函

数有注释说明功能,

对参数、

返回值也要以注释的形式

说明用途;

关键的语句段

要求有注释解释;程序的层次清晰,可

读性强。

系统功能要求:

(

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

.*;

import Event;

import

Listener;

import nt;

import

tener;

import .*;

import

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();

//

添加菜单条

nuBar(menu);

//

菜单

JMenu game = new

JMenu(

游戏

//

菜单项

JMenuItem newgame =

(

新游戏

JMenuItem

pause =

(

暂停

JMenuItem goon

= (

继续

JMenuItem

exit = (

退出

//

菜单

JMenu help = new

JMenu(

帮助

JMenuItem

about = (

关于

//

添加菜单至菜单条

}

}

(game);

(help);

//

对窗口设置

//

居中

ationRelativeTo(null);

//

关闭程序

aultCloseOperation(_ON_CLOSE);

//

大小

e(220, 275);

//

标题

l

e(

俄罗斯方块

//

可见性

ible(true);

//

不可更改大小

izable(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 },

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

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

{ 0, 1, 1, 0,

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

{

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

},

// z

{ { 1, 1, 0, 0,

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

{

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

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

0, 0, 0, 0 },

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

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

// j

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

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

{ 1, 0, 0, 0,

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

{

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

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

0, 0, 0, 0 } },

// o

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

0, 0, 0, 0 },

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

0, 0, 0, 0, 0, 0, 0, 0 },

{ 1, 1, 0, 0,

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

{

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

},

// l

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值