java课程设计实验报告俄罗斯方块.docx

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

java课程设计实验报告俄罗斯方块.docx

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

java课程设计实验报告俄罗斯方块.docx

java课程设计实验报告俄罗斯方块

成绩评定表

学生姓名

班级学号

专业

电子信息工程

课程设计题目

俄罗斯方块游戏设计

 

 

组长签字:

成绩

 

日期

2013年月日

课程设计任务书

学院

信息学院

专业

电子信息工程

学生姓名

班级学号

课程设计题目

俄罗斯方块游戏设计

实践教学要求与任务:

俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。

本软件实现的基本功能如下:

●游戏区:

玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况和下一个将要出现方块的提示。

●游戏控制:

玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制。

●玩家游戏信息存储及删除:

玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。

游戏软件随即不断的下落其中方块中的一种,玩家在方块落到底部之前将方块尽量整齐的摆放好,以便能够对满一行进行消除,玩家可以旋转,左右移动方块,以选择最佳的摆放位置和方式,也可以加快下落的速度,甚至可以直接落到底部,以便节省游戏的时间。

当方块落到底部的时候,就不能进行操作的,此时会在顶部出现另一个方块。

在堆放方块的时候,如果一行堆满的话,则进行消行,上面的方块自动的向下移动一行。

消除一行可以得到100分,

工作计划与进度安排:

第18周:

布置课程设计任务,查阅资料,分组设计,程序调试。

第19周:

程序调试,编写课程设计报告,验收,答辩。

指导教师:

2013年6月20日

专业负责人:

2013年6月20日

学院教学副院长:

2013年6月20日

目录

1.课设软件主要功能…………………………………………1

2.类总体设…………………………………………..1

2.1类组合关系图………………………………….………1

2.2主类……………………………….…………2

2.3其它类…………………….……………………..2

3.类详细设计…………………………………………2

3.1ERS_Block主类……..…………………………….……..2

3.2Command处理控制类…….……………………….….…4

3.3GameCanvas游戏画布类………….………………………4

3.4Block方块类............……………….…….………………….6

4.关键类成员函数流程图及代码………………………..….…..7

5.软件运行结果………………………………………………...17

结论……………………...…………………………….………20

参考文献……………….……………………………………...20

1.课设软件主要功能

本系统是一个俄罗斯方块游戏的系统设计[1],实现的基本功能就是能实现经典俄罗斯方块游戏的基本功能。

如用键盘上的空格下左右键来控制方块的变形,移动等功能。

点击控制面板上的开始游戏,游戏暂停,提高级数,降低级数退出游戏等按钮来实现游戏的开始,暂停,停止游戏,增加难度,降低难度等功能。

图1.1功能图

2.类总体设计

2.1类组合关系图

Mypanel

Command

MyTimer

ERS-Block

图2.1.类组合关系图

2.2主类

ERS_Block继承Frame类负责游戏全局的控制[2]。

对开始游戏、暂停/继续游戏、结束游戏、等级设置。

玩家可自行设定游戏等级,主要提供10种级别,级别越高,游戏速度越快,难度越大

2.3其他类

1.Mypanel继承Panel类。

2.Block是方块类控制块的移动,下落变形功能。

七种类型方块的父类,定义了所有类型方块的共同特征和行为。

3.GameCanvas是游戏画布类,继承Canvas类,界面设计应遵循简介美观方便易用的基本原则在游戏区显示方块。

4.Command类是控制按钮类。

5.MyTimer类继承自线程类Thead。

包含run()方法,sleep()方法,控制游戏的速度。

6.WinListener类继承WindowAdapter类。

3.类详细设计

3.1ERS_Block主类

图3.1主类数据透视图

定义成员变量[3]

1右边信息窗体的布局

MyPanelinfoScr=newMyPanel();

infoScr.setLayout(newGridLayout(4,1,0,5));

infoScr.setSize(120,300);

2定义标签和初始值

Labelscorep=newLabel("分数:

",Label.LEFT);

Labellevelp=newLabel("级数:

",Label.LEFT);

3右边控制按钮窗体的布局

MyPanelcontrolScr=newMyPanel();

controlScr.setLayout(newGridLayout(5,1,0,5));

rightScr.add(controlScr);

4定义按钮play

Buttonplay_b=newButton("开始游戏");

play_b.setSize(newDimension(50,200));

定义按钮LevelUP

Buttonlevel_up_b=newButton("提高级数");

level_up_b.setSize(newDimension(50,200));

5定义按钮LevelDown

Buttonlevel_down_b=newButton("降低级数");

level_down_b.setSize(newDimension(50,200));

6定义按钮LevelPause

Buttonpause_b=newButton("游戏暂停");

pause_b.setSize(newDimension(50,200));

7定义按钮Quit

Buttonquit_b=newButton("退出游戏");

quit_b.setSize(newDimension(50,200));;

成员方法

1俄罗斯方块类的构造方法

方法定义:

ERS_Block(Stringtitle)

2isGameOver方法

方法定义:

privatebooleanisGameOver()

功能描述:

该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有即结束。

 

3.2Command处理控制类

图3.2Command类数据透视图

成员变量[4]:

给按钮编号

intbutton_play

intbutton_levelup

intbutton_leveldown

intbutton_quit;

intbutton_pause

intcurButton;

GameCanvasscr;

成员方法:

1控制按钮类的构造方法

方法定义:

Command(intbutton,GameCanvasscr)

2按钮执行方法

方法定义:

publicvoidactionPerformed(ActionEvente)

功能:

点击按钮实现游戏的开始,结束,升级,降级,暂停[5]。

 

3.3GameCanvas游戏画布类

图3.3GameCanvas类数据透视图

 

成员变量:

小方块边长:

finalint0unitSize=30

正方格的行数:

introwNum

方格的列数:

intcolumnNum

允许有多少行未削:

intmaxAllowRowNum

新出现块的起始行坐标:

intblockInitRow

出现块的起始列坐标:

intblockInitCol

屏幕数组:

int[][]scrArr

对方快的引用:

Blockb

2.画布类的构造方法

成员方法[5]:

1初始化屏幕,并将屏幕数组清零的方法

方法定义:

voidinitScr()

2重新刷新画布方法

方法定义:

publicvoidpaint(Graphicsg)

3画方块的方法

方法定义:

publicvoiddrawUnit(introw,intcol,inttype)

功能:

以背景为颜色画,画正在下落的方块,画已经落下的方块。

4块的初始v行坐标方法

方法定义:

publicintgetInitRow()

返回新块的初始行坐标:

return(blockInitRow)

5返回新块的初始列坐标方法

方法定义:

publicintgetInitCol()

返回新块的初始列坐标:

return(blockInitCol)

6满行删除方法

方法定义:

voiddeleteFullLine()

功能:

这个就是实现如何将行消除的,其实就是在判断了该行该消除时候将上面的方块都向下平移一格,这样在实现程序界面也就给玩家是消一行的视觉效果[6]。

3.3Block方块类

图3.3Block类数据透视图

成员变量:

块的模式编号:

intblockType;

块的翻转状态:

intturnState;

块的下落状态:

intblockState;

块在画布上的坐标:

introw,col;

GameCanvasscr;

成员方法:

1)fallDown方法

方法定义:

publicvoidfallDown()

功能描述:

实现方块的运行,下落。

2)leftMove()

方法方法定义:

publicsynchronizedbooleanleftMove()

功能描述:

将当前画移动到所左面的位置。

3)rightMove()方法

方法定义:

privatebooleanrightMove()

功能描述:

将方块想右边移动。

4)方法

方法定义:

publicvoidturnNext()

功能描述:

实现方块的旋转。

5)leftturn方法

方法定义:

privatesynchronizedbooleanleftturn()

功能描述:

将当前块实现翻转。

6)deleteFullLine方法

方法定义:

privatebooleandeleteFullLine()

功能描述:

实现满行删除的方法。

7)erase方法

方法定义:

privatevoiderase()

功能描述:

将当前块从画布的对应位置移除。

8)display方法

方法定义:

privatevoiddisplay()

功能描述:

实现重画画布的时候显示当前块

 

4.关键类成员函数流程图及代码

4.1系统流程图

图4.1系统流程图[7]

 

4.2源代码[7]

importjava.awt.*;

importjava.awt.event.*;//俄罗斯方块类

classERS_BlockextendsFrame{

publicstaticbooleanisPlay=false;

publicstaticintlevel=1,score=0;

publicstaticTextFieldscoreField,levelField;

publicstaticMyTimertimer;

GameCanvasgameScr;

publicstaticvoidmain(String[]argus){

ERS_Blockers=newERS_Block("俄罗斯方块游戏");

WindowListenerwin_listener=newWinListener();

ers.addWindowListener(win_listener);

}

//俄罗斯方块类的构造方法

ERS_Block(Stringtitle){

super(title);

setSize(600,480);

setLayout(newGridLayout(1,2));

gameScr=newGameCanvas();

gameScr.addKeyListener(gameScr);

timer=newMyTimer(gameScr);

timer.setDaemon(true);

timer.start();

timer.suspend();

add(gameScr);

PanelrightScr=newPanel();

rightScr.setLayout(newGridLayout(2,1,0,30));

rightScr.setSize(120,500);

add(rightScr);//右边信息窗体的布局

MyPanelinfoScr=newMyPanel();

infoScr.setLayout(newGridLayout(4,1,0,5));

infoScr.setSize(120,300);

rightScr.add(infoScr);//定义标签和初始值

Labelscorep=newLabel("分数:

",Label.LEFT);

Labellevelp=newLabel("级数:

",Label.LEFT);

scoreField=newTextField(8);

levelField=newTextField(8);

scoreField.setEditable(false);

levelField.setEditable(false);

infoScr.add(scorep);

infoScr.add(scoreField);

infoScr.add(levelp);

infoScr.add(levelField);

scorep.setSize(newDimension(20,60));

scoreField.setSize(newDimension(20,60));

levelp.setSize(newDimension(20,60));

levelField.setSize(newDimension(20,60));

scoreField.setText("0");

levelField.setText("1");//右边控制按钮窗体的布局

MyPanelcontrolScr=newMyPanel();

controlScr.setLayout(newGridLayout(5,1,0,5));

rightScr.add(controlScr);//定义按钮play

Buttonplay_b=newButton("开始游戏");

play_b.setSize(newDimension(50,200));

play_b.addActionListener(newCommand(Command.button_play,gameScr));//定义按钮LevelUP

Buttonlevel_up_b=newButton("提高级数");

level_up_b.setSize(newDimension(50,200));

level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr));

Buttonlevel_down_b=newButton("降低级数");

level_down_b.setSize(newDimension(50,200));

level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr));

Buttonpause_b=newButton("游戏暂停");

pause_b.setSize(newDimension(50,200));

pause_b.addActionListener(newCommand(Command.button_pause,gameScr));

Buttonquit_b=newButton("退出游戏");

quit_b.setSize(newDimension(50,200));

quit_b.addActionListener(newCommand(Command.button_quit,gameScr));

controlScr.add(play_b);

controlScr.add(level_up_b);

controlScr.add(level_down_b);

controlScr.add(pause_b);

controlScr.add(quit_b);

setVisible(true);

gameScr.requestFocus();

}

//游戏画布类

classGameCanvasextendsCanvasimplementsKeyListener{

finalintunitSize=30;//小方块边长

introwNum;//正方格的行数

intcolumnNum;//正方格的列数

intmaxAllowRowNum;//允许有多少行未削

intblockInitRow;//新出现块的起始行坐标

intblockInitCol;//新出现块的起始列坐标

int[][]scrArr;//屏幕数组

Blockb;//对方快的引用//画布类的构造方法

GameCanvas(){

rowNum=15;

columnNum=10;

maxAllowRowNum=rowNum-2;

b=newBlock(this);

blockInitRow=rowNum-1;

blockInitCol=columnNum/2-2;

scrArr=newint[32][32];

}

}

//画方块的方法

publicvoiddrawUnit(introw,intcol,inttype){

scrArr[row][col]=type;

Graphicsg=getGraphics();

switch(type){//表示画方快的方法

case0:

g.setColor(Color.black);break;//以背景为颜色画

case1:

g.setColor(Color.blue);break;//画正在下落的方块

case2:

g.setColor(Color.magenta);break;//画已经落下的方法

}

g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);

g.dispose();

}

publicBlockgetBlock(){

returnb;//返回block实例的引用

}

}

//满行删除方法

voiddeleteFullLine(){

intfull_line_num=0;

intk=0;

for(inti=0;i

booleanisfull=true;

L1:

for(intj=0;j

if(scrArr[i][j]==0){

k++;

isfull=false;

breakL1;

}

if(isfull)full_line_num++;

if(k!

=0&&k-1!

=i&&!

isfull)

for(intj=0;j

if(scrArr[i][j]==0)

drawUnit(k-1,j,0);

else

drawUnit(k-1,j,2);

scrArr[k-1][j]=scrArr[i][j];

}

}

for(inti=k-1;i

for(intj=0;j

drawUnit(i,j,0);

scrArr[i][j]=0;

}

}

ERS_Block.score+=full_line_num;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

//处理键盘输入的方法

publicvoidkeyPressed(KeyEvente){

if(!

ERS_Block.isPlay)

return;

switch(e.getKeyCode()){

caseKeyEvent.VK_DOWN:

b.fallDown();break;

caseKeyEvent.VK_LEFT:

b.leftMove();break;

caseKeyEvent.VK_RIGHT:

b.rightMove();break;

caseKeyEvent.VK_SPACE:

b.leftTurn();break;

}

}

}

//处理控制类

classCommandimplementsActionListener{

staticfinalintbutton_play=1;//给按钮分配编号

staticfinalintbutton_levelup=2;

staticfinalintbutton_leveldown=3;

staticfinalintbutton_quit=4;

staticfinalintbutton_pause=5;

staticbooleanpause_resume=true;

intcurButton;//当前按钮

GameCanvasscr;//控制按钮类的构造方法

Command(intbutton,GameCanvasscr){

curButton=button;

this.scr=scr;

}

//按钮执行方法

publicvoidactionPerformed(ActionEvente){

switch(curButton){

casebutton_play:

if(!

ERS_Block.isPlay){

scr.initScr();

ERS_Block.isPlay=true;

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

当前位置:首页 > 求职职场 > 简历

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

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