JAVA俄罗斯方块实验报告.docx

上传人:b****2 文档编号:3231178 上传时间:2023-05-05 格式:DOCX 页数:20 大小:69.14KB
下载 相关 举报
JAVA俄罗斯方块实验报告.docx_第1页
第1页 / 共20页
JAVA俄罗斯方块实验报告.docx_第2页
第2页 / 共20页
JAVA俄罗斯方块实验报告.docx_第3页
第3页 / 共20页
JAVA俄罗斯方块实验报告.docx_第4页
第4页 / 共20页
JAVA俄罗斯方块实验报告.docx_第5页
第5页 / 共20页
JAVA俄罗斯方块实验报告.docx_第6页
第6页 / 共20页
JAVA俄罗斯方块实验报告.docx_第7页
第7页 / 共20页
JAVA俄罗斯方块实验报告.docx_第8页
第8页 / 共20页
JAVA俄罗斯方块实验报告.docx_第9页
第9页 / 共20页
JAVA俄罗斯方块实验报告.docx_第10页
第10页 / 共20页
JAVA俄罗斯方块实验报告.docx_第11页
第11页 / 共20页
JAVA俄罗斯方块实验报告.docx_第12页
第12页 / 共20页
JAVA俄罗斯方块实验报告.docx_第13页
第13页 / 共20页
JAVA俄罗斯方块实验报告.docx_第14页
第14页 / 共20页
JAVA俄罗斯方块实验报告.docx_第15页
第15页 / 共20页
JAVA俄罗斯方块实验报告.docx_第16页
第16页 / 共20页
JAVA俄罗斯方块实验报告.docx_第17页
第17页 / 共20页
JAVA俄罗斯方块实验报告.docx_第18页
第18页 / 共20页
JAVA俄罗斯方块实验报告.docx_第19页
第19页 / 共20页
JAVA俄罗斯方块实验报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JAVA俄罗斯方块实验报告.docx

《JAVA俄罗斯方块实验报告.docx》由会员分享,可在线阅读,更多相关《JAVA俄罗斯方块实验报告.docx(20页珍藏版)》请在冰点文库上搜索。

JAVA俄罗斯方块实验报告.docx

JAVA俄罗斯方块实验报告

 

一.需求分析

在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。

二.系统运行环境

操作系统选择WindowsXP版本,运行环境选择MyEclipse

三.系统功能需求描述

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

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

1.游戏区:

玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。

2.游戏控制:

玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。

3.级别设置:

玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。

四.总体设计

游戏中玩家可以做的操作有:

1.以90度为单位旋转方每一格块。

2.以格子为单位左右移动方块,让方块加速落下。

3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。

4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。

同时删除的列数越多,得分指数上升。

5.当固定的方块堆到区域最上方,则游戏结束。

五.系统结构图

俄罗斯方块游戏

六.程序模块设计

6.1用户界面设计

 

6.2程序代码设计

packagerussia;

importjava.awt.*;

importjava.awt.event.*;

//俄罗斯方块类

classERS_BlockextendsFrame{

/**

 *

 */

 privatestaticfinallongserialVersionUID=1L;

publicstaticbooleanisPlay=false;

publicstaticintlevel=1,score=0;

publicstaticTextFieldscoreField,levelField;

publicstaticMyTimertimer;

GameCanvasgameScr;

publicstaticvoidmain(String[]argus){

ERS_Blockers=newERS_Block("俄罗斯方块游戏V1.0Author:

Vincent");

WindowListenerwin_listener=newWinListener();

ers.addWindowListener(win_listener);

}

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

@SuppressWarnings("deprecation")

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

//定义按钮LevelDown

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

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

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

//定义按钮LevelPause

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

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

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

//定义按钮Quit

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

}

}

//重写MyPanel类,使Panel的四周留空间

classMyPanelextendsPanel{

/**

 *

 */

 privatestaticfinallongserialVersionUID=1L;

publicInsetsgetInsets(){

returnnewInsets(30,50,30,50);

}

}

//游戏画布类

classGameCanvasextendsCanvasimplementsKeyListener{

/**

 *

 */

 privatestaticfinallongserialVersionUID=1L;

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];

}

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

voidinitScr(){

for(inti=0;i

for(intj=0;j

{scrArr[i][j]=0;}

b.reset();

repaint();

}

//重新刷新画布方法

publicvoidpaint(Graphicsg){

for(inti=0;i

for(intj=0;j

drawUnit(i,j,scrArr[i][j]);

}

//画方块的方法

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实例的引用

}

//返回屏幕数组中(row,col)位置的属性值

publicintgetScrArrXY(introw,intcol){

if(row<0||row>=rowNum||col<0||col>=columnNum)

return(-1);

else

return(scrArr[row][col]);

}

//返回新块的初始行坐标方法

publicintgetInitRow(){

return(blockInitRow);//返回新块的初始行坐标

}

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

publicintgetInitCol(){

return(blockInitCol);//返回新块的初始列坐标

}

//满行删除方法

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

}

//判断游戏是否结束方法

booleanisGameEnd(){

for(intcol=0;col

if(scrArr[maxAllowRowNum][col]!

=0)

returntrue;

}

returnfalse;

}

publicvoidkeyTyped(KeyEvente){

}

publicvoidkeyReleased(KeyEvente){

}

//处理键盘输入的方法

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;

}

//按钮执行方法

@SuppressWarnings("deprecation")

publicvoidactionPerformed(ActionEvente){

switch(curButton){

casebutton_play:

if(!

ERS_Block.isPlay){

scr.initScr();

ERS_Block.isPlay=true;

ERS_Block.score=0;

ERS_Block.scoreField.setText("0");

ERS_Block.timer.resume();

}

scr.requestFocus();

break;

casebutton_levelup:

if(ERS_Block.level<10){

ERS_Block.level++;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score=0;

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

}

scr.requestFocus();

break;

casebutton_leveldown:

if(ERS_Block.level>1){

ERS_Block.level--;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score=0;

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

}

scr.requestFocus();

break;

casebutton_pause:

if(pause_resume){

ERS_Block.timer.suspend();

pause_resume=false;

}else{

ERS_Block.timer.resume();

pause_resume=true;

}

scr.requestFocus();

break;

casebutton_quit:

System.exit(0);

}

}

}

//方块类

classBlock{

staticint[][]pattern={

{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态

{0x04e0,0x0464,0x00e4,0x04c4},

{0x4620,0x6c00,0x4620,0x6c00},

{0x2640,0xc600,0x2640,0xc600},

{0x6220,0x1700,0x2230,0x0740},

{0x6440,0x0e20,0x44c0,0x8e00},

{0x0660,0x0660,0x0660,0x0660}

};

intblockType;//块的模式号(0-6)

intturnState;//块的翻转状态(0-3)

intblockState;//快的下落状态

introw,col;//块在画布上的坐标

GameCanvasscr;

//块类的构造方法

Block(GameCanvasscr){

this.scr=scr;

blockType=(int)(Math.random()*1000)%7;

turnState=(int)(Math.random()*1000)%4;

blockState=1;

row=scr.getInitRow();

col=scr.getInitCol();

}

//重新初始化块,并显示新块

publicvoidreset(){

blockType=(int)(Math.random()*1000)%7;

turnState=(int)(Math.random()*1000)%4;

blockState=1;

row=scr.getInitRow();

col=scr.getInitCol();

dispBlock

(1);

}

//实现“块”翻转的方法

publicvoidleftTurn(){

if(assertValid(blockType,(turnState+1)%4,row,col)){

dispBlock(0);

turnState=(turnState+1)%4;

dispBlock

(1);

}

}

//实现“块”的左移的方法

publicvoidleftMove(){

if(assertValid(blockType,turnState,row,col-1)){

dispBlock(0);

col--;

dispBlock

(1);

}

}

//实现块的右移

publicvoidrightMove(){

if(assertValid(blockType,turnState,row,col+1)){

dispBlock(0);

col++;

dispBlock

(1);

}

}

//实现块落下的操作的方法

publicbooleanfallDown(){

if(blockState==2)

return(false);

if(assertValid(blockType,turnState,row-1,col)){

dispBlock(0);

row--;

dispBlock

(1);

return(true);

}else{

blockState=2;

dispBlock

(2);

return(false);

}

}

//判断是否正确的方法

booleanassertValid(intt,ints,introw,intcol){

intk=0x8000;

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

if((int)(pattern[t][s]&k)!

=0){

inttemp=scr.getScrArrXY(row-i,col+j);

if(temp<0||temp==2)

returnfalse;

}

k=k>>1;

}

}

returntrue;

}

//同步显示的方法

publicsynchronizedvoiddispBlock(ints){

intk=0x8000;

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

if(((int)pattern[blockType][turnState]&k)!

=0){

scr.drawUnit(row-i,col+j,s);

}

k=k>>1;

}

}

}

}

//定时线程

classMyTimerextendsThread{

GameCanvasscr;

publicMyTimer(

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2