俄罗斯方块Java课程设计.docx

上传人:b****5 文档编号:6869551 上传时间:2023-01-11 格式:DOCX 页数:39 大小:273.40KB
下载 相关 举报
俄罗斯方块Java课程设计.docx_第1页
第1页 / 共39页
俄罗斯方块Java课程设计.docx_第2页
第2页 / 共39页
俄罗斯方块Java课程设计.docx_第3页
第3页 / 共39页
俄罗斯方块Java课程设计.docx_第4页
第4页 / 共39页
俄罗斯方块Java课程设计.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

俄罗斯方块Java课程设计.docx

《俄罗斯方块Java课程设计.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块Java课程设计.docx(39页珍藏版)》请在冰豆网上搜索。

俄罗斯方块Java课程设计.docx

俄罗斯方块Java课程设计

《面向对象程序设计》

课程设计报告

 

题目:

俄罗斯方块软件设计与实现

院(系):

信息科学与工程学院

专业班级:

计算机科学与技术1201班

******

学号:

*********11

******

 

2014年12月29日至2015年1月9日

华中科技大学武昌分校制

面向对象程序设计课程设计任务书

一、设计(调查报告/论文)题目

俄罗斯方块软件设计与实现

二、设计(调查报告/论文)主要内容

内容:

一款俄罗斯方块的游戏,玩家可控制掉落物的形状和位置,当一行垒满后会消除,玩家获得一定分数,当掉落物堆积到达顶部时,提示gameover,有窗口最大最小化的功能,设置掉落物和背景色,改变窗口模式,游戏中能够暂停、停止,提高降低难度。

基本功能与要求:

1.随机给出不同的形状,下落至填充给定的区域,若填满一条便消除,计分,达到一定分数时升级,设置不同难度等级,不同等级下落速度不同,可自行调节.

2.设计良好的用户接口,有关分数和难度等级的显示,方块在背景给定区域内运动和变形,能明显区分方块和背景

3.方块可以实现变形,绘制7种基本的图形

4.方块下落时,可以通过键盘进行操作,上,下,左,右分别对应操作:

变形,加速下落,左移,右移。

 

三、原始资料

1.《面向对象程序设计课程设计》指导书

2.耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

四、要求的设计(调查/论文)成果

1.课程设计报告

2.课程设计软件

五、进程安排

布置任务,查找数据、需求分析1天

总体设计1天

详细设计1.5天

编制源程序实现3.5天

测试与修改1天

撰写课设报告2天

六、主要参考数据

[1]张广彬.Java课程设计案例精编(第二版).北京:

清华大学出版社,2011.

[2]耿祥义.Java课程设计(第二版).北京:

清华大学出版社,2008.

[3]耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

[4]邹林达.陈国君Java2程序设计基础.北京:

清华大学出版社,2010.

[5]邹林达.Java2程序设计基础实验指导.北京:

清华大学,2010.

 

指导教师(签名):

 

20年月日

 

 

1需求与总体设计

1.1需求与设计目的

本系统俄罗斯方块是是一款小游戏,玩家可控制掉落物的形状和位置,当一行垒满后会消除,玩家获得一定分数,当掉落物堆积到达顶部时,提示gameover,有窗口最大最小化的功能,设置掉落物和背景色,改变窗口模式,游戏中能够暂停、停止,提高降低难度.

1.2总体设计

1.2.1ErsBlocksGame.java

游戏主类,继承自JFrame类,负责游戏的全局控制。

内含:

1.一个GameCanvas画布类的实例引用,

2.一个保存当前活动块(ErsBlock)实例的引用,

3.一个保存当前控制面板(ControlPanel)实例的引用;

1.2.2ControlPanel.java

控制面板类,继承自JPanel.上边安放预显窗口、等级、得分、控制按钮主要用来控制游戏进程。

1.2.3ErsBlock.java

块类,继承自线程类(Thread),由4*4个方格(ErsBox)构成一个块,控制块的移动、下落、变形等

1.2.4ErsBox.java

方格类,是组成块的基本元素,用自己的颜色来表示块的外观

1.2.5GameCanvas.java

画布类,内有<行数>*<列数>个方格类实例。

继承自JPanel类。

ErsBlock线程类动态改变画布类的方格颜色,画布类通过;检查方格颜色来体现ErsBlock块的移动情况。

 

1.3系统主要功能图

本游戏系统包含5个分类如图1-1所示:

图1-1

 

1.4主要类图

2详细设计

2.1ErsBlocksGame类

2.1.1成员变量与方法

ErsBlocksGame()//主游戏类的构造函数

reset()//游戏复位

isPlaying()//判断游戏是否还在进行

getCurBlock()//得到当前活动的块

getCanvas()//得到当前画布

playGame()//开始游戏

pauseGame()//暂停游戏

resumeGame()//让暂停中的游戏继续

stopGame()//停止游戏

getLevel()//得到当前游戏者设置的游戏难度

setLevel(intlevel)//让用户设置游戏难度

getScore()//得到游戏积分

getScoreForLevelUpdate()//得到自上次升级以来的游戏积分,升级以后,此积分清零

levelUpdate()//当分数累计到一定的数量时,升一次级

play()//游戏开始

reportGameOver()//报告游戏结束了

createMenu()//建立并设置窗口菜单

setWindowStyle(Stringplaf)//根据字符串设置窗口外观

checkFullLine()//检查画布中是否有全填满的行,如果有就删除之

isGameOver()//根据最顶行是否被占,判断游戏是否已经结束了

main()//程序入口函数

2.1.2详细类图

2.2ControlPanel类

2.2.1成员变量与方法

ControlPanel()//控制面板类的构造函数

setTipStyle()//设置预显窗口的样式

getLevel()//取得用户设置的游戏等级

setLevel()//让用户修改游戏难度等级

setPlayButtonEnable()//设置"开始"按钮的状态

reset()//重置控制面板

fanning()//重新计算TipPanel里的boxes[][]里的小框的大小

TipPanel()//预显窗口类构造函数

fanning()//根据窗口的大小,自动调整方格的尺寸

2.2.2详细类图

2.3ErsBlock类

2.3.1成员变量与方法

run()//线程类的run()函数覆盖,下落块,直到块不能再下落

moveLeft()//块向左移动一格

moveRight()//块向右移动一格

moveDown()块向下落一格

turnNext()//块变型

pauseMove()//暂停块的下落,对应游戏暂停

resumeMove()//继续块的下落,对应游戏继续

stopMove()//停止块的下落,对应游戏停止

earse()//将当前块从画布的对应位置移除,要等到下次重画画布时才能反映出来

display()//让当前块放置在画布的对应位置上,要等到下次重画画布时才能看见

2.3.2详细类图

2.4GameCanvas类

2.4.1成员变量和方法

setBackgroundColor()//设置游戏背景色彩

getBackgroundColor()//取得游戏背景色彩

setBlockColor()//设置游戏方块色彩

getBlockColor()//取得游戏方块色彩

getRows()//取得画布中方格的行数

getCols()//取得画布中方格的列数

getScore()//取得游戏成绩

getScoreForLevelUpdate()//取得自上一次升级后的积分

resetScoreForLevelUpdate()//升级后,将上一次升级以来的积分清0

fanning()//根据窗口的大小,自动调整方格的尺寸

reset()//重置画布,置积分为0

2.4.2详细设计

2.5ErsBox类

2.5.1成员方法与变量

isColorBox()//此方格是不是用前景色表现

setColor()//设置方格的颜色,

getSize()//得到此方格的尺寸

setSize()//设置方格的尺寸

Objectclone()//覆盖Object的Objectclone(),实现克隆

2.5.2详细设计

 

3编码实现

详细代码:

package俄罗斯方块;

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.border.Border;

importjavax.swing.border.EtchedBorder;

publicclassErsBlocksGameextendsJFrame{

publicstaticvoidmain(String[]args){

newErsBlocksGame("RussiaBlocksby*******************");

}

publicfinalstaticintPER_LINE_SCORE=100;

publicfinalstaticintPER_LEVEL_SCORE=PER_LINE_SCORE*20;

publicfinalstaticintMAX_LEVEL=10;

publicfinalstaticintDEFAULT_LEVEL=5;

privateGameCanvascanvas;

privateErsBlockblock;

privatebooleanplaying=false;

privateControlPanelctrlPanel;

privateJMenuBarbar=newJMenuBar();

privateJMenu

mGame=newJMenu("游戏"),

mControl=newJMenu("控制"),

mWindowStyle=newJMenu("窗口风格"),

mInfo=newJMenu("信息");

privateJMenuItem

miNewGame=newJMenuItem("新游戏"),

miSetBlockColor=newJMenuItem("选择方块颜色"),

miSetBackColor=newJMenuItem("选择背景颜色"),

miTurnHarder=newJMenuItem("提高等级"),

miTurnEasier=newJMenuItem("降低等级"),

miExit=newJMenuItem("推出"),

miPlay=newJMenuItem("开始"),

miPause=newJMenuItem("暂停"),

miResume=newJMenuItem("继续"),

miStop=newJMenuItem("停止"),

miAuthor=newJMenuItem("作者:

计科1201_程伟"),

miSourceInfo=newJMenuItem("2014.java课程设计");

privateJCheckBoxMenuItem

miAsWindows=newJCheckBoxMenuItem("Windows"),

miAsMotif=newJCheckBoxMenuItem("Motif"),

miAsMetal=newJCheckBoxMenuItem("Metal",true);

/***主游戏类的构造函数,窗口标题*/

publicErsBlocksGame(Stringtitle){

super(title);

setSize(315,392);

DimensionscrSize=Toolkit.getDefaultToolkit().getScreenSize();

setLocation((scrSize.width-getSize().width)/2,

(scrSize.height-getSize().height)/2);

createMenu();

Containercontainer=getContentPane();

container.setLayout(newBorderLayout(6,0));

canvas=newGameCanvas(20,12);

ctrlPanel=newControlPanel(this);

container.add(canvas,BorderLayout.CENTER);

container.add(ctrlPanel,BorderLayout.EAST);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEventwe){

stopGame();

System.exit(0);

}

});

addComponentListener(newComponentAdapter(){

publicvoidcomponentResized(ComponentEventce){

canvas.fanning();

}

});

show();

canvas.fanning();

}

/***让游戏“复位”*/

publicvoidreset(){

ctrlPanel.reset();

canvas.reset();

}

publicbooleanisPlaying(){

returnplaying;

}

publicErsBlockgetCurBlock(){

returnblock;

}

publicGameCanvasgetCanvas(){

returncanvas;

}

publicvoidplayGame(){

play();

ctrlPanel.setPlayButtonEnable(false);

miPlay.setEnabled(false);

ctrlPanel.requestFocus();

}

publicvoidpauseGame(){

if(block!

=null)block.pauseMove();

ctrlPanel.setPauseButtonLabel(false);

miPause.setEnabled(false);

miResume.setEnabled(true);

}

publicvoidresumeGame(){

if(block!

=null)block.resumeMove();

ctrlPanel.setPauseButtonLabel(true);

miPause.setEnabled(true);

miResume.setEnabled(false);

ctrlPanel.requestFocus();

}

publicvoidstopGame(){

playing=false;

if(block!

=null)block.stopMove();

miPlay.setEnabled(true);

miPause.setEnabled(true);

miResume.setEnabled(false);

ctrlPanel.setPlayButtonEnable(true);

ctrlPanel.setPauseButtonLabel(true);

}

publicintgetLevel(){

returnctrlPanel.getLevel();

}

publicvoidsetLevel(intlevel){

if(level<11&&level>0)ctrlPanel.setLevel(level);

}

publicintgetScore(){

if(canvas!

=null)returncanvas.getScore();

return0;

}

publicintgetScoreForLevelUpdate(){

if(canvas!

=null)returncanvas.getScoreForLevelUpdate();

return0;

}

publicbooleanlevelUpdate(){

intcurLevel=getLevel();

if(curLevel

setLevel(curLevel+1);

canvas.resetScoreForLevelUpdate();

returntrue;

}

returnfalse;

}

privatevoidplay(){

reset();

playing=true;

Threadthread=newThread(newGame());

thread.start();

}

privatevoidreportGameOver(){

JOptionPane.showMessageDialog(this,"GameOver!

");

}

privatevoidcreateMenu(){

bar.add(mGame);

bar.add(mControl);

bar.add(mWindowStyle);

bar.add(mInfo);

mGame.add(miNewGame);

mGame.addSeparator();

mGame.add(miSetBlockColor);

mGame.add(miSetBackColor);

mGame.addSeparator();

mGame.add(miTurnHarder);

mGame.add(miTurnEasier);

mGame.addSeparator();

mGame.add(miExit);

mControl.add(miPlay);

mControl.add(miPause);

mControl.add(miResume);

mControl.add(miStop);

mWindowStyle.add(miAsWindows);

mWindowStyle.add(miAsMotif);

mWindowStyle.add(miAsMetal);

mInfo.add(miAuthor);

mInfo.add(miSourceInfo);

setJMenuBar(bar);

miPause.setAccelerator(

KeyStroke.getKeyStroke(KeyEvent.VK_P,KeyEvent.CTRL_MASK));

miResume.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0));

miNewGame.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

stopGame();

reset();

setLevel(DEFAULT_LEVEL);

}

});

miSetBlockColor.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

ColornewFrontColor=

JColorChooser.showDialog(ErsBlocksGame.this,

"Setcolorforblock",canvas.getBlockColor());

if(newFrontColor!

=null)

canvas.setBlockColor(newFrontColor);

}

});

miSetBackColor.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

ColornewBackColor=

JColorChooser.showDialog(ErsBlocksGame.this,

"Setcolorforblock",canvas.getBackgroundColor());

if(newBackColor!

=null)

canvas.setBackgroundColor(newBackColor);

}

});

miTurnHarder.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

intcurLevel=getLevel();

if(curLevel

}

});

miTurnEasier.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

intcurLevel=getLevel();

if(curLevel>1)setLevel(curLevel-1);

}

});

miExit.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

System.exit(0);

}

});

miPlay.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventae){

playGame();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1