俄罗斯方块实验报告Word格式文档下载.docx
《俄罗斯方块实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块实验报告Word格式文档下载.docx(63页珍藏版)》请在冰点文库上搜索。
班级
实验名称
一.实验人员安排
组长:
组员:
二.任务分配
李军华:
负责俄罗斯方块运行的开始界面、控制类面板,以及线程类的控制,同时负责整合整个俄罗斯方块的零件类,使之成为完整的项目。
孟倩宇:
主要负责画布类的生成以及游戏主界面的制作、菜单选项以及状态栏的制作。
董彦波:
负责游戏中的方块的生成,及下落、左移、右移、旋转等活动的算法。
各种情况下方块活动的判断条件。
陈园:
编写升级面板,可以人为的设置级别难度和帮助类面板。
韦航军:
主要负责游戏中的timer类的扫描以及键盘监听,随时保持游戏级别的动态更新。
侯敏江:
实现排行榜面板的调用,以及弹出输入玩家姓名的对话框。
万斌利:
负责游戏结束时的响应处理,游戏结束时弹出对话框保存玩家姓名。
徐正杰:
负责游戏的界面风格设置以及背景图片的处理和整个游戏的颜色处理。
三.实验分析
1)
需求分析:
设计一个用户可参与,可由用户控制任意暂停,设置等级、可计分的俄罗斯方块游戏;
2)
概要设计:
一个游戏运行界面,控制面板,菜单选项。
3)
详细设计:
对整个设计进行总体分析如下:
1.定义7种砖块的类型,用两个4*4的二维数组来表示。
2.在屏幕上用一个10*20表示游戏区域
3.上下左右的出界问题的考虑
4.砖块的变形问题
5.砖块的移动(向左向右向下)问题
第2页,共页
6.满一行后消掉砖块
7.记分问题
8.用开始按扭启动游戏,暂停按扭暂停游戏
9.增加难度游戏速度加快,降低难度游戏速度减缓。
10.界面的设定
11.背景图片的加入
四.项目命名以及类文件
项目命名为:
俄罗斯项目,包括3个java包,13个类,功能描述如下:
一、Main包:
①.Gamestart.java:
游戏运行的入口,包含主方法。
并调用开始面板。
②.M.java:
生成开始面板。
开始面板上有开始、帮助、退出三个按钮。
开始按钮负责调用主界面。
帮助按钮调用帮助面板。
退出按钮退出游戏
③.Dialog.java:
生成帮助面板。
二、back包:
①.board.java:
预提示面板,用于显示下一将要下落的方块,通过取到下一方块的逻辑坐标,并显示到该面板上,使玩家预先知道下一方块的形状,便于游戏的进行。
②.can.java:
画布类的生成,此类里主要负责随时动态更新画布的显示以及方块的下落、左移、右移、旋转等方法的定义以及判断。
同时有键盘监听类的构造,负责在游戏运行过程中时刻监听键盘的事件。
③.Element.java:
游戏中的方块类,用于抽象描述各种方块的形状和方块行为。
三、MainFframe包:
①.BlockFrame.java:
所有游戏面板运行的主界面。
包括画布类,控制类按钮以及菜单选项。
同时含有线程类来监听游戏在运行过程中的方块自由下落。
②.Contropanel.java:
显示面板。
包括当前分数、级别的显示。
并且包括开始游戏、暂停游戏、增加难度、降低难度、退出游戏等控制按钮。
此类中含有timer类的生成,负责扫描面板上的分数值,当分数值等于或大于预设值的时候,自动更新级别。
第3页,共页
③.Data.java:
该类中存储了游戏所需的21种标准图形和随机生成这些方块的方法,用于按照游戏设计概率产生新的方块,提供给预提示面板。
①.Level.java:
级别设置面板的生成。
在游戏开始前可以认为的设置游戏的级别。
②.Player.java:
输入玩家姓名的面板,当游戏结束时,弹出此面板,等待输入玩家姓名,当确定后,保存到RankedList.java生成的面板上。
③.RankedList.java:
排行榜面板的生成,玩家可以通过点击菜单栏里的排行榜查看玩家的排行情况。
④.Team.java:
我们团队的所有成员介绍,人物各有特点,带有幽默风格。
具体的项目结构如下:
图一.项目树形结构图
第4页,共页
五.功能演示
1.项目界面
图一.项目开始界面
2.项目主界面
图二.项目主界面界面
第5页,共页
3.游戏结束时
六.具体代码如下
Main包:
//游戏的入口程序(GameStart.java)
packageMain;
publicclassGameStart{
publicstaticvoidmain(String[]argv){
newM();
}
}
//开始界面类(M.java)
importjava.awt.BorderLayout;
importjava.awt.Component;
importjava.awt.Container;
importjava.awt.Dimension;
importjava.awt.GridLayout;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.Icon;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.border.EmptyBorder;
importMainFrame.BlockFrame;
publicclassMextendsJFrame{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicinthhh;
publicBlockFrameb=newBlockFrame();
publicJButtonstart=newJButton("
开始"
);
publicJButtonexit=newJButton("
退出"
publicJButtonhelp=newJButton("
帮助"
Iconicon;
JLabelt=newJLabel();
BlockFrameaf;
//开始游戏界面的构造函数
publicM(){
super("
俄罗斯方块"
setBak();
init();
setSize(280,330);
center(this);
setResizable(false);
setVisible(true);
publicvoidinit(){
setContentPane(CreatPan());
publicContainerCreatPan(){
JPanelpan1=newJPanel(newBorderLayout());
pan1.setBorder(newEmptyBorder(0,80,50,50));
pan1.add(BorderLayout.SOUTH,Creatp2());
pan1.setOpaque(false);
returnpan1;
privateComponentCreatp2(){
pan1.setBorder(newEmptyBorder(30,40,15,40));
pan1.setLayout(newGridLayout(3,1,0,10));
pan1.add(start);
pan1.add(help);
pan1.add(exit);
start.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
M.this.setVisible(false);
b.setVisible(true);
}
});
help.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
newDialog();
exit.addActionListener(newActionListener(){
intval=JOptionPane.showConfirmDialog(M.this,"
确定退出"
"
提示框"
0);
if(val==JOptionPane.YES_OPTION){
System.exit(0);
}
publicvoidsetBak(){
((JPanel)this.getContentPane()).setOpaque(false);
ImageIconimg=newImageIcon(getClass().getResource("
1.jpg"
));
JLabelbackground=newJLabel(img);
this.getLayeredPane().add(background,newInteger(Integer.MIN_VALUE));
background.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
publicstaticvoidcenter(Containerwin){
Toolkittoolkit=Toolkit.getDefaultToolkit();
Dimensionscreen=toolkit.getScreenSize();
intx=(screen.width-win.getWidth())/2;
inty=(screen.height-win.getHeight())/2;
win.setLocation(x,y);
//帮助界面类(Dialog.java)
publicclassDialogextendsJFrame{
JLabelll=newJLabel("
<
html>
divalign=center>
游戏帮助<
/div>
"
+"
li>
本游戏是适合各年龄阶段益智游戏、绿色游戏、健康游"
+"
戏<
br>
不含暴力、淫秽内容"
,是各位玩家休闲娱乐、茶余饭后、<
家居旅行的必备游戏。
本游戏免费。
一、游戏规则说明<
/br>
1、生存之路——游戏中下降的各种形状的"
方块将会从低到高累积起来,只有用方块填满同一行,这一行才会瞬间化为乌"
有,你将得到分数。
而建立在此之上的所有方块都会下移一行,当然如果是更"
多的行就最好了。
2、灭亡之时——如果你的建筑物高到触到顶"
部,却没有一排消去,您就GAMEOVER了。
二、游戏控制说明<
1、在方块触底之前,您可以通过键盘上的"
下、左、右按键控制下落中方块的运动方向,并使用上键旋转这些方块,以使他们"
在正确的时间,以正确的方向、落在正确的地方,填满某一排,你就可以得到相应的"
积分。
2、当连续几排同时消去方块时,你会看见你本次的得分成倍的增加哦!
三、级别说明<
1、当你的分数增加到一定程度时,您将会升到更高级别,此时你拥有的不仅是身份、"
地位,还有更大的挑战!
2、升级说明"
成长级别所需分数<
这个游戏刺激阿,有木有?
这个游戏好耍啊,有木有?
各路英雄,迎接你的挑战啊!
/html>
//帮助界面的构造函数。
publicDialog(){
帮助框"
this.add(BorderLayout.NORTH,ll);
this.setSize(400,500);
Back包:
//预提示面板(board.java)
packageback;
importjava.awt.Color;
importjavax.swing.border.BevelBorder;
publicclassboardextendsJPanel{
JPanel[][]panel=newJPanel[4][4];
inti,j;
//board的构造方法
publicboard(){
setLayout(newGridLayout(4,4));
for(i=0;
i<
4;
i++){
for(j=3;
j<
7;
j++){
panel[i][j-3]=newJPanel();
}
add(panel[i][j-3],newGridLayout(18,10));
panel[i][j-3].setBackground(Color.pink);
panel[i][j-3].setVisible(true);
panel[i][j-3].setBorder(newBevelBorder(BevelBorder.LOWERED));
publicvoidboardp(Elementblock){
int[][]ad=newint[2][4];
ad=block.outArray();
intk=0;
setSize(400,400);
add(panel[i][j-3]);
panel[i][j-3].setBackground(Color.cyan);
System.out.println();
for(k=0;
k<
k++){
for(i=0;
for(j=3;
if((j==ad[0][k])&
&
(i==ad[1][k])){
panel[i][j-3].setBackground(Color.blue);
}
//画布类的生成(can.java)
importjava.awt.event.KeyAdapter;
importjava.awt.event.KeyEvent;
importMainFrame.Data;
publicclassCanextendsJPanel{
*
*/
JPanel[][]panel=newJPanel[18][10];
publicboolean[][]mCanarray=newboolean[18][10];
publicboolean[][]Canarray=newboolean[18][10];
intmaxT[]=newint[10];
privateint[]minT=newint[10];
publicintd_value[]=newint[]{18,18,18,18,18,18,18,18,18,18};
publicintmin=18;
publicElementblock=newElement();
publicElementnextblock=newElement();
publicbooleanp=true;
publicbooleanq=false;
//画布类的构造函数
publicCan(){
setLayout(newGridLayout(18,10));
18;
for(j=0;
10;
panel[i][j]=newJPanel();
setSize(10,10);
mCanarray[i][j]=false;
Canarray[i][j]=false;
add(panel[i][j],newGridLayout(18,10));
panel[i][j].setBackground(newColor(50,60,50));
panel[i][j].setVisible(true);
panel[i][j].setBorder(newBevelBorder(BevelBorder.RAISED));
addKeyListener(newControlKeyListener());
publicvoidintoboolArray(Elementblock){
int[][]ad=newint[2][4];
ad=block.outArray();
for(intk=0;
for(inti=0;
for(intj=0;