1、 public final static int alinescore = 100; public final static int everylevelscore = alinescore * 20; public final static int maxlevel = 10; public final static int initlevel = 5;private GameCanvas canvas; private ErsBlock block; private boolean playing = false; private ControlPanel ctrlPanel;privat
2、e JMenuBar bar = new JMenuBar(); private JMenu mGame = new JMenu(游戏), mControl = new JMenu(控制 mhelp = new JMenu(帮助); private JMenuItem miNewGame = new JMenuItem(新游戏 milevelup = new JMenuItem(提高级数 mileveldown = new JMenuItem(降低级数 miExit = new JMenuItem(退出 miPlay = new JMenuItem(开始 miPause = new JMenu
3、Item(暂停 miResume = new JMenuItem(重新开始 miStop = new JMenuItem(停止 miCtrlBlock = new JMenuItem(方块控制键 public ErsBlocksGame(String title) super(title); setSize(315, 392); Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(scrSize.width - getSize().width) 2, (scrSize.); mGame.add
4、Separator(); mGame.add(miExit);mControl.add(miPlay); mControl.addSeparator(); mControl.add(miPause); mControl.add(miResume); mControl.add(miStop);mhelp.add(miCtrlBlock);setJMenuBar(bar); miNewGame.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) stopGame(); reset();
5、 setLevel(initlevel); ); mileveldown.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) int curLevel = getLevel(); if (curLevel 1) setLevel(curLevel - 1); milevelup.addActionListener(new ActionListener() setLevel(curLevel+1); miExit.addActionListener(new ActionListene
6、r() System.exit(0); miPlay.addActionListener(new ActionListener() playGame(); miPause.addActionListener(new ActionListener() pauseGame(); miResume.addActionListener(new ActionListener() resumeGame(); miStop.addActionListener(new ActionListener() miCtrlBlock.addActionListener(new ActionListener() rep
7、ortGameMethod(); public void reset() ctrlPanel.reset(); canvas.reset(); public boolean isPlaying() return playing; public ErsBlock getCurBlock() return block; public GameCanvas getCanvas() return canvas; public void playGame() play(); ctrlPanel.setPlayButtonEnable(false); miPlay.setEnabled(false); c
8、trlPanel.requestFocus(); public void pauseGame() if (block != null) block.pauseMove(); ctrlPanel.setPauseButtonLabel(false); miPause.setEnabled(false); miResume.setEnabled(true); public void resumeGame() = null) block.resumeMove(); ctrlPanel.setPauseButtonLabel(true); miPause.setEnabled(true); miRes
9、ume.setEnabled(false); public void stopGame() playing = false; block.stopMove(); miPlay.setEnabled(true); ctrlPanel.setPlayButtonEnable(true); public int getLevel() return ctrlPanel.getLevel(); public void setLevel(int level) if (level 0) ctrlPanel.setLevel(level); public int getScore() if (canvas !
10、 return canvas.getScore(); return 0; public int getScoreForLevelUpdate() return canvas.getScoreForLevelUpdate(); public boolean levelUpdate() int curLevel = getLevel(); if (curLevel maxlevel) setLevel(curLevel + 1); canvas.resetScoreForLevelUpdate(); return true; return false; private void play() re
11、set(); playing = true; Thread thread = new Thread(new Game(); thread.start(); private void reportGameMethod() JOptionPane.showMessageDialog(this, J为向左移动,L为向右移动,K为加速向下,I 为翻转变化 private void reportGameOver() 游戏结束! private class Game implements Runnable public void run() int col = (int) (Math.random() *
12、 (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 (InterruptedException ie) ie.printStackTrace(); continue; checkFullLine(); if (isGameOver() miPlay.setEnabl
13、ed(true); miPause.setEnabled(true); miResume.setEnabled(false); ctrlPanel.setPlayButtonEnable(true); ctrlPanel.setPauseButtonLabel(true); reportGameOver(); return; block = new ErsBlock(style, -1, col, getLevel(), canvas); block.start(); col = (int) (Math.random() * (canvas.getCols() - 3); ctrlPanel.
14、setShowBeforeStyle(style); public void checkFullLine() int row ; for (int i = 0; i canvas.getRows(); i+) int row = 1; boolean fullLineColorBox = true; for (int j = 0; j canvas.getCols(); j+) if (!canvas.getBox(i, j).isColorBox() fullLineColorBox = false; break; if (fullLineColorBox) row = i; canvas.
15、removeLine(row); private boolean isGameOver() ErsBox box = canvas.getBox(0, i); if (box.isColorBox() return true; return false; public static void main(String args) new ErsBlocksGame(俄罗斯方块游戏class ControlPanel extends JPanel private JTextField tfLevel = new JTextField( + ErsBlocksGame.initlevel), tfS
16、core = new JTextField(0 private JButton btPlay = new JButton( btPause = new JButton( btStop = new JButton( btTurnLevelUp = new JButton(提高等级 btTurnLevelDown = new JButton(降低等级 private JPanel showbefore = new JPanel(new BorderLayout(); private ShowBeforePanel plShowBeforeBlock = new ShowBeforePanel();
17、 private JPanel plInfo = new JPanel(new GridLayout(4, 1); private JPanel plButton = new JPanel(new GridLayout(5, 1); private Timer timer; private ErsBlocksGame game; public ControlPanel(final ErsBlocksGame game) setLayout(new GridLayout(3, 1, 0, 4); this.game = game; showbefore.add(new JLabel(下一个方块)
18、, BorderLayout.NORTH); showbefore.add(plShowBeforeBlock); plInfo.add(new JLabel(等级); 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(btTurn
19、LevelDown); add( showbefore); add(plInfo); add(plButton); addKeyListener(new ControlKeyListener(); btPlay.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) game.playGame(); btPause.addActionListener(new ActionListener() if (btPause.getText().equals(new String() game.
20、pauseGame(); else game.resumeGame(); btStop.addActionListener(new ActionListener() game.stopGame(); btTurnLevelUp.addActionListener(new ActionListener() try int level = Integer.parseInt(tfLevel.getText(); if (level 1) + (level - 1); catch (NumberFormatException e) addComponentListener(new ComponentAdapter() public void componentResized(ComponentEvent ce) plShowBeforeBlock.fanning(); timer = new Timer(500, new ActionListener() tfScore.setText( + game.getScore(); int scoreForLevelUpdate = game.getScoreForLevelUpdate
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1