完整word版JAVA俄罗斯方块实验报告Word下载.docx

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

完整word版JAVA俄罗斯方块实验报告Word下载.docx

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

完整word版JAVA俄罗斯方块实验报告Word下载.docx

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("

级数:

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{

publicInsetsgetInsets(){

returnnewInsets(30,50,30,50);

//游戏画布类

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

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

voidinitScr(){

for(inti=0;

i<

rowNum;

i++)

for(intj=0;

j<

columnNum;

j++)

{scrArr[i][j]=0;

}

b.reset();

repaint();

//重新刷新画布方法

publicvoidpaint(Graphicsg){

for(inti=0;

i<

rowNum;

i++)

for(intj=0;

j<

columnNum;

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

//画正在下落的方块

case2:

g.setColor(Color.magenta);

//画已经落下的方法

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)

j++){

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

drawUnit(k-1,j,0);

drawUnit(k-1,j,2);

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

for(inti=k-1;

i<

i++){

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<

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

caseKeyEvent.VK_LEFT:

b.leftMove();

caseKeyEvent.VK_RIGHT:

b.rightMove();

caseKeyEvent.VK_SPACE:

b.leftTurn();

//处理控制类

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:

ERS_Block.isPlay){

scr.initScr();

ERS_Block.isPlay=true;

ERS_Block.score=0;

ERS_Block.timer.resume();

scr.requestFocus();

casebutton_levelup:

if(ERS_Block.level<

10){

ERS_Block.level++;

ERS_Block.levelField.setText("

+ERS_Block.level);

casebutton_leveldown:

if(ERS_Block.level>

1){

ERS_Block.level--;

casebutton_pause:

if(pause_resume){

ERS_Block.timer.suspend();

pause_resume=false;

}else{

pause_resume=true;

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;

//块在画布上的坐标

//块类的构造方法

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

dispBlock

(1);

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

publicvoidleftTurn(){

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

dispBlock(0);

turnState=(turnState+1)%4;

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

publicvoidleftMove(){

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

col--;

//实现块的右移

publicvoidrightMove(){

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

col++;

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

publicbooleanfallDown(){

if(blockState==2)

return(false);

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

row--;

return(true);

blockState=2;

dispBlock

(2);

//判断是否正确的方法

booleanassertValid(intt,ints,introw,intcol){

intk=0x8000;

4;

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

k)!

=0){

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

if(temp<

0||temp==2)

k=k>

>

1;

//同步显示的方法

publicsynchronizedvoiddispBlock(ints){

for(inti=0;

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

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

k=k>

1;

//定时线程

classMyTimerextendsThread{

publicMyTimer(Ga

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

当前位置:首页 > 总结汇报 > 学习总结

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

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