【Java精品源码栏目提醒】:网学会员鉴于大家对Java精品源码十分关注,论文会员在此为大家搜集整理了“【精品】Java俄罗斯方块1源代码 - 其它资料”一文,供大家参考学习
import java.awt.Buttonimport java.awt.Canvasimport java.awt.Colorimport java.awt.Dimensionimport java.awt.Frameimport java.awt.Graphicsimport java.awt.GridLayoutimport java.awt.Insetsimport java.awt.Labelimport java.awt.Panelimport java.awt.TextFieldimport java.awt.event.ActionEventimport java.awt.event.ActionListenerimport java.awt.event.KeyEventimport java.awt.event.KeyListenerimport java.awt.event.WindowAdapterimport java.awt.event.WindowEventimport java.awt.event.WindowListener//俄罗斯方块类public class 俄罗斯方块 1 extends Frame private static final long serialVersionUID 1L public static boolean isPlayfalse public static int level1score0 public static TextField scoreFieldlevelField public static MyTimer timer GameCanvas gameScr public static void mainString argus 俄罗斯方块 1 ers new 俄罗斯方块 1quot俄罗斯方块游戏 quot WindowListener win_listener WindowListener new WinListener ers.addWindowListenerwin_listener //俄罗斯方块类的构造方法 SuppressWarningsquotdeprecationquot 俄罗斯方块 1String title supertitle setSize600480 setLayoutnew GridLayout12 gameScr new GameCanvas gameScr.addKeyListenergameScrtimer new MyTimergameScrtimer.setDaemontruetimer.starttimer.suspendaddgameScrPanel rightScr new PanelrightScr.setLayoutnew GridLayout21030rightScr.setSize120500addrightScr//MyPanel infoScr new MyPanelinfoScr.setLayoutnew GridLayout4105infoScr.setSize120300rightScr.addinfoScr//定义标签和初始值Label scorep new Labelquot分数:quotLabel.LEFTLabel levelp new Labelquot级数:quotLabel.LEFTscoreField new TextField8levelField new TextField8scoreField.setEditablefalselevelField.setEditablefalseinfoScr.addscorepinfoScr.addscoreFieldinfoScr.addlevelpinfoScr.addlevelFieldscorep.setSizenew Dimension2060scoreField.setSizenew Dimension2060levelp.setSizenew Dimension2060levelField.setSizenew Dimension2060scoreField.setTextquot0quotlevelField.setTextquot1quot//右边控制按钮窗体的布局MyPanel controlScr new MyPanelcontrolScr.setLayoutnew GridLayout5105rightScr.addcontrolScr//定义按钮 playButton play_b new Buttonquot开始游戏quotplay_b.setSizenew Dimension50200play_b.addActionListenernew CommandCommand.button_playgameScr //定义按钮 Level UP Button level_up_b new Buttonquot提高级数quot level_up_b.setSizenew Dimension50200 level_up_b.addActionListenernew CommandCommand.button_levelupgameScr //定义按钮 Level Down Button level_down_b new Buttonquot降低级数quot level_down_b.setSizenew Dimension50200 level_down_b.addActionListenernewCommandCommand.button_leveldowngameScr //定义按钮 Level Pause Button pause_b new Buttonquot游戏暂停quot pause_b.setSizenew Dimension50200 pause_b.addActionListenernew CommandCommand.button_pausegameScr //定义按钮 Quit Button quit_b new Buttonquot退出游戏quot quit_b.setSizenew Dimension50200 quit_b.addActionListenernew CommandCommand.button_quitgameScr controlScr.addplay_b controlScr.addlevel_up_b controlScr.addlevel_down_b controlScr.addpause_b controlScr.addquit_b setVisibletrue gameScr.requestFocus //重写 MyPanel 类,使 Panel 的四周留空间 class MyPanel extends Panel private static final long serialVersionUID 1L public Insets getInsets return new Insets30503050 //游戏画布类class GameCanvas extends Canvas implements KeyListener private static final long serialVersionUID 1L final int unitSize 30 //小方块边长 int rowNum //正方格的行数 int columnNum //正方格的列数 int maxAllowRowNum //允许有多少行未削 int blockInitRow //新出现块的起始行坐标 int blockInitCol //新出现块的起始列坐标 int scrArr //屏幕数组 Block b //对方快的引用 //画布类的构造方法 GameCanvas rowNum 15 columnNum 10 maxAllowRowNum rowNum - 2 b new Blockthis blockInitRow rowNum - 1 blockInitCol columnNum/2 - 2 scrArr new int 3232 //初始化屏幕,并将屏幕数组清零的方法 void initScr forint i0iltrowNumi for int j0 jltcolumnNumj scrArrij0 b.reset repaint //重新刷新画布方法 public void paintGraphics g forint i 0 i lt rowNum i forint j 0 j lt columnNum j drawUnitijscrArrij //画方块的方法 public void drawUnitint rowint colint type scrArrrowcol type Graphics g getGraphics switchtype //表示画方快的方法 case 0: g.setColorColor.blackbreak //以背景为颜色画 case 1: g.setColorColor.bluebreak //画正在下落的方块 case 2: g.setColorColor.magentabreak //画已经落下的方法 g.fill3DRectcolunitSizegetSize.height-row1unitSizeunitSizeunitSizetrue g.dispose public Block getBlock return b //返回 block 实例的引用 //返回屏幕数组中rowcol位置的属性值 public int getScrArrXYint rowint col if row lt 0 row gt rowNum col lt 0 col gt columnNum return-1 else returnscrArrrowcol //返回新块的初始行坐标方法 public int getInitRow returnblockInitRow //返回新块的初始行坐标 //返回新块的初始列坐标方法 public int getInitCol returnblockInitCol //返回新块的初始列坐标 //满行删除方法 void deleteFullLine int full_line_num 0 int k 0 for int i0iltrowNumi boolean isfull true L1:forint j0jltcolumnNumj ifscrArrij 0 k isfull false break L1 ifisfull full_line_num ifk0 ampamp k-1i ampamp isfull forint j 0 j lt columnNum j if scrArrij 0 drawUnitk-1j0 else drawUnitk-1j2 scrArrk-1j scrArrij forint i k-1 i lt rowNum i forint j 0 j lt columnNum j drawUnitij0 scrArrij0 俄罗斯方块 1.score full_line_num 俄罗斯方块 1.scoreField.setTextquotquot俄罗斯方块 1.score //判断游戏是否结束方法boolean isGameEnd for int col 0 col ltcolumnNum col ifscrArrmaxAllowRowNumcol 0 return true return false public void keyTypedKeyEvent epublic void keyReleasedKeyEvent e //处理键盘输入的方法 public void keyPressedKeyEvent e if俄罗斯方块 1.isPlay return switche.getKeyCode case KeyEvent.VK_DOWN:b.fallDown break case KeyEvent.VK_LEFT:b.leftMove break case KeyEvent.VK_RIGHT:b.rightMove break case KeyEvent.VK_SPACE:b.leftTurn break //处理控制类 class Command implements ActionListener static final int button_play 1 //给按钮分配编号 static final int button_levelup 2 static final int button_leveldown 3 static final int button_quit 4 static final int button_pause 5 static boolean pause_resume true int curButton //当前按钮 GameCanvas scr //控制按钮类的构造方法 Commandint buttonGameCanvas scr curButton button this.scrscr //按钮执行方法 SuppressWarningsquotdeprecationquot public void actionPerformed ActionEvent e switchcurButton case button_play:if俄罗斯方块 1.isPlay scr.initScr 俄罗斯方块 1.isPlay true 俄罗斯方块 1.score 0 俄罗斯方块 1.scoreField.setTextquot0quot 俄罗斯方块 1.timer.resume scr.requestFocus break case button_levelup:if俄罗斯方块 1.level lt 10 俄罗斯方块 1.level 俄 罗 斯 方 块 1.levelField.setTextquotquot 俄 罗 斯 方 块1.level 俄罗斯方块 1.score 0 俄 罗 斯 方 块 1.scoreField.setTextquotquot 俄 罗 斯 方 块1.score scr.requestFocus break case button_leveldown:if俄罗斯方块 1.level gt 1 俄罗斯方块 1.level-- 俄 罗 斯 方 块 1.levelField.setTextquotquot 俄 罗 斯 方 块1.level 俄罗斯方块 1.score 0 俄 罗 斯 方 块 1.scoreField.setTextquotquot 俄 罗 斯 方 块1.score scr.requestFocus break case button_pause:ifpause_resume 俄罗斯方块 1.timer.suspend pause_resume false else 俄罗斯方块 1.timer.resume pause_resume true scr.requestFocus break case button_quit:System.exit0 //方块类 class Block static int pattern 0x0f000x44440x0f000x4444//用十六进制表示,本行表示长条四种状态 0x04e00x04640x00e40x04c4 0x46200x6c000x46200x6c00 0x26400xc6000x26400xc600 0x62200x17000x22300x0740 0x64400x0e200x44c00x8e00 0x06600x06600x06600x0660 int blockType //块的模式号(0-6)int turnState //块的翻转状态(0-3)int blockState //快的下落状态int rowcol //块在画布上的坐标GameCanvas scr//块类的构造方法BlockGameCanvas scrthis.scr scrblockType intMath.random 10007turnState intMath.random 10004blockState 1row scr.getInitRowcol scr.getInitCol//重新初始化块,并显示新块public void resetblockType intMath.random 10007turnState intMath.random 10004blockState 1row scr.getInitRowcol scr.getInitColdispBlock1//实现“块”翻转的方法public void leftTurn ifassertValidblockTypeturnState 14rowcol dispBlock0 turnState turnState 14 dispBlock1 //实现“块”的左移的方法public void leftMove ifassertValidblockTypeturnStaterowcol-1 dispBlock0 col-- dispBlock1 //实现块的右移 public void rightMove ifassertValidblockTypeturnStaterowcol1 dispBlock0 col dispBlock1 //实现块落下的操作的方法 public boolean fallDown ifblockState 2 returnfalse ifassertValidblockTypeturnStaterow-1col dispBlock0 row-- dispBlock1 returntrue else blockState 2 dispBlock2 returnfalse //判断是否正确的方法boolean assertValidint tint sint rowint col int k 0x8000 forint i 0 i lt 4 i forint j 0 j lt 4 j ifintpatterntsampk 0 int temp scr.getScrArrXYrow-icolj if templt0temp2 return false k k gtgt 1 return true //同步显示的方法 public synchronized void dispBlockint s int k 0x8000 for int i 0 i lt 4 i forint j 0 j lt 4 j ifintpatternblockTypeturnStateampk 0 scr.drawUnitrow-icoljs kkgtgt1 //定时线程 class MyTimer extends Thread GameCanvas scr public MyTimerGameCanvas scr this.scr scr SuppressWarningsquotdeprecationquot public void run whiletrue try sle.