俄罗斯方块毕业课程设计报告Word文档下载推荐.docx
《俄罗斯方块毕业课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块毕业课程设计报告Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。
publicfinalstaticintalinescore=100;
publicfinalstaticinteverylevelscore=alinescore*20;
publicfinalstaticintmaxlevel=10;
publicfinalstaticintinitlevel=5;
privateGameCanvascanvas;
privateErsBlockblock;
privatebooleanplaying=false;
privateControlPanelctrlPanel;
privateJMenuBarbar=newJMenuBar();
privateJMenu
mGame=newJMenu("
游戏"
),
mControl=newJMenu("
控制"
mhelp=newJMenu("
帮助"
);
privateJMenuItem
miNewGame=newJMenuItem("
新游戏"
milevelup=newJMenuItem("
提高级数"
mileveldown=newJMenuItem("
降低级数"
miExit=newJMenuItem("
退出"
miPlay=newJMenuItem("
开始"
miPause=newJMenuItem("
暂停"
miResume=newJMenuItem("
重新开始"
miStop=newJMenuItem("
停止"
miCtrlBlock=newJMenuItem("
方块控制键"
publicErsBlocksGame(Stringtitle)
{
super(title);
setSize(315,392);
DimensionscrSize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((scrSize.width-getSize().width)2,
(scrSize.);
mGame.addSeparator();
mGame.add(miExit);
mControl.add(miPlay);
mControl.addSeparator();
mControl.add(miPause);
mControl.add(miResume);
mControl.add(miStop);
mhelp.add(miCtrlBlock);
setJMenuBar(bar);
miNewGame.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae)
{
stopGame();
reset();
setLevel(initlevel);
}
});
mileveldown.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae)
intcurLevel=getLevel();
if(curLevel>
1)
setLevel(curLevel-1);
milevelup.addActionListener(newActionListener(){
setLevel(curLevel+1);
miExit.addActionListener(newActionListener(){
System.exit(0);
miPlay.addActionListener(newActionListener(){
playGame();
miPause.addActionListener(newActionListener(){
pauseGame();
miResume.addActionListener(newActionListener(){
resumeGame();
miStop.addActionListener(newActionListener(){
miCtrlBlock.addActionListener(newActionListener(){
{
reportGameMethod();
}
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()
=null)
block.resumeMove();
ctrlPanel.setPauseButtonLabel(true);
miPause.setEnabled(true);
miResume.setEnabled(false);
publicvoidstopGame()
playing=false;
block.stopMove();
miPlay.setEnabled(true);
ctrlPanel.setPlayButtonEnable(true);
publicintgetLevel()
returnctrlPanel.getLevel();
publicvoidsetLevel(intlevel)
if(level<
11&
&
level>
0)ctrlPanel.setLevel(level);
publicintgetScore()
if(canvas!
returncanvas.getScore();
return0;
publicintgetScoreForLevelUpdate()
returncanvas.getScoreForLevelUpdate();
publicbooleanlevelUpdate()
intcurLevel=getLevel();
if(curLevel<
maxlevel)
{
setLevel(curLevel+1);
canvas.resetScoreForLevelUpdate();
returntrue;
}
returnfalse;
privatevoidplay(){
reset();
playing=true;
Threadthread=newThread(newGame());
thread.start();
privatevoidreportGameMethod(){
JOptionPane.showMessageDialog(this,"
J为向左移动,L为向右移动,K为加速向下,I为翻转变化"
privatevoidreportGameOver(){
游戏结束!
"
}
privateclassGameimplementsRunnable
publicvoidrun()
intcol=(int)(Math.random()*(canvas.getCols()-3)),
style=ErsBlock.STYLES[(int)(Math.random()*7)][(int)
(Math.random()*4)];
while(playing)
if(block!
{
if(block.isAlive())
{
try
{
Thread.currentThread().sleep(100);
}catch(InterruptedExceptionie)
ie.printStackTrace();
}
continue;
}
}
checkFullLine();
if(isGameOver())
miPlay.setEnabled(true);
miPause.setEnabled(true);
miResume.setEnabled(false);
ctrlPanel.setPlayButtonEnable(true);
ctrlPanel.setPauseButtonLabel(true);
reportGameOver();
return;
block=newErsBlock(style,-1,col,getLevel(),canvas);
block.start();
col=(int)(Math.random()*(canvas.getCols()-3));
ctrlPanel.setShowBeforeStyle(style);
publicvoidcheckFullLine()
{introw;
for(inti=0;
i<
canvas.getRows();
i++)
introw=1;
booleanfullLineColorBox=true;
for(intj=0;
j<
canvas.getCols();
j++)
{
if(!
canvas.getBox(i,j).isColorBox())
fullLineColorBox=false;
break;
if(fullLineColorBox)
row=i;
canvas.removeLine(row);
privatebooleanisGameOver()
ErsBoxbox=canvas.getBox(0,i);
if(box.isColorBox())
returntrue;
returnfalse;
publicstaticvoidmain(String[]args)
newErsBlocksGame("
俄罗斯方块游戏"
}
classControlPanelextendsJPanel
{
privateJTextField
tfLevel=newJTextField("
+ErsBlocksGame.initlevel),
tfScore=newJTextField("
0"
privateJButton
btPlay=newJButton("
btPause=newJButton("
btStop=newJButton("
btTurnLevelUp=newJButton("
提高等级"
btTurnLevelDown=newJButton("
降低等级"
privateJPanelshowbefore=newJPanel(newBorderLayout());
privateShowBeforePanelplShowBeforeBlock=newShowBeforePanel();
privateJPanelplInfo=newJPanel(newGridLayout(4,1));
privateJPanelplButton=newJPanel(newGridLayout(5,1));
privateTimertimer;
privateErsBlocksGamegame;
publicControlPanel(finalErsBlocksGamegame){
setLayout(newGridLayout(3,1,0,4));
this.game=game;
showbefore.add(newJLabel("
下一个方块"
),BorderLayout.NORTH);
showbefore.add(plShowBeforeBlock);
plInfo.add(newJLabel("
等级"
));
plInfo.add(tfLevel);
得分"
plInfo.add(tfScore);
tfLevel.setEditable(false);
tfScore.setEditable(false);
plButton.add(btPlay);
plButton.add(btPause);
plButton.add(btStop);
plButton.add(btTurnLevelUp);
plButton.add(btTurnLevelDown);
add(showbefore);
add(plInfo);
add(plButton);
addKeyListener(newControlKeyListener());
btPlay.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae){
game.playGame();
btPause.addActionListener(newActionListener(){
if(btPause.getText().equals(newString("
))){
game.pauseGame();
else
game.resumeGame();
btStop.addActionListener(newActionListener(){
game.stopGame();
btTurnLevelUp.addActionListener(newActionListener(){
try{
intlevel=Integer.parseInt(tfLevel.getText());
if(level<
ErsBlocksGame.maxlevel)
tfLevel.setText("
+(level+1));
}catch(NumberFormatExceptione){}
requestFocus();
btTurnLevelDown.addActionListener(newActionListener(){
if(level>
1)
+(level-1));
}catch(NumberFormatExceptione){}
addComponentListener(newComponentAdapter(){
publicvoidcomponentResized(ComponentEventce)
plShowBeforeBlock.fanning();
timer=newTimer(500,newActionListener(){
tfScore.setText("
+game.getScore());
intscoreForLevelUpdate=
game.getScoreForLevelUpdate