JAVA俄罗斯方块实验报告Word文件下载.docx
- 文档编号:5803052
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:20
- 大小:69.14KB
JAVA俄罗斯方块实验报告Word文件下载.docx
《JAVA俄罗斯方块实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《JAVA俄罗斯方块实验报告Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
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("
级数:
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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 俄罗斯方块实验报告 俄罗斯方块 实验 报告