⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 russiablocksgame.java

📁 java版本俄罗斯方块..功能强大,具体玩了才知道.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 主游戏类
 */
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.RandomAccessFile;
import java.util.StringTokenizer;

import javax.swing.*;

//import com.sun.java.util.jar.pack.Package.File;

public class RussiaBlocksGame extends JFrame implements ActionListener
{
 public final static int PER_LINE_SCORE = 100;//消去一行得分
 public final static int PER_LEVEL_SCORE = PER_LINE_SCORE*20;//升一级需要的分数
 public final static int DEFAULT_LEVEL = 5;//默认级别
 public final static int MAX_LEVEL = 10;//最高级别
 private int score=0,curLevelScore = 0;//总分和本级得分
 
 private GameCanvas canvas;
 private ControlPanel controlPanel;
 private RussiaBlock block;
 
 private int style = 0;
 boolean playing = false;
 
 private JMenuBar bar;
 private JMenu gameMenu,controlMenu,windowStyleMenu,informationMenu;
 private JMenuItem newGameItem,setBlockColorItem,setBgColorItem,
         turnHardItem,turnEasyItem,exitItem;
   private JMenuItem playItem,pauseItem,resumeItem,stopItem;
   private JRadioButtonMenuItem windowsRadioItem,motifRadioItem,metalRadioItem;
   private JMenuItem authorItem,helpItem,rankItem;
   private ButtonGroup buttonGroup;
  /*
   * 构造函数
   */
  public RussiaBlocksGame(String title)
  {
   super(title);
   
   setSize(300,400);
   Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
   setLocation((scrSize.width-getSize().width)/2,(scrSize.height-getSize().height)/2);
   
   createMenu();
   Container container=getContentPane();
   container.setLayout(new BorderLayout());
   
   canvas = GameCanvas.getCanvasInstance();
   controlPanel = new ControlPanel(this);
   
   container.add(canvas,BorderLayout.CENTER);
   container.add(controlPanel,BorderLayout.EAST);
   
   addWindowListener(
   new WindowAdapter()
   {
    public void windowClosing(WindowEvent event)
    {
     stopGame();
     System.exit(0);
    }
   }
   );
   
   addComponentListener(
   new ComponentAdapter()
   {
    public void componentResized(ComponentEvent event)
    {
     canvas.fanning();
    }
   }
   );
   canvas.fanning();
   setVisible(true);
  }
  /*
   * 判断游戏是否正在进行
   */
   public boolean isPlaying()
   {
    return playing;
   }
   /*
    * 开始游戏并设置按钮和菜单项的可用性
    */ 
   public void playGame()
   {
    play();
    controlPanel.setPlayButtonEnabled(false);
    playItem.setEnabled(false);
   }
   /*
    * 暂停游戏
    */
   public void pauseGame()
   {
     if(block != null) block.pauseMove();
     controlPanel.setPauseButtonLabel(false);
     pauseItem.setEnabled(false);
     resumeItem.setEnabled(true);
   }
   /*
    * 从暂停中恢复游戏
    */
   public void resumeGame()
   {
    if(block != null) block.resumeMove();
    controlPanel.setPauseButtonLabel(true);
    pauseItem.setEnabled(true);
    resumeItem.setEnabled(false);
   }
   /*
    * 停止游戏
    */
   public void stopGame()
   {
    if(block != null) block.stopMove();
    playing = false;
    controlPanel.setPlayButtonEnabled(true);
    controlPanel.setPauseButtonLabel(true);
                playItem.setEnabled(true);
   }
   /*
    * 得到当前级别
    */
   public int  getLevel()
   {
    return controlPanel.getLevel();
   }
   /*
    * 设置当前级别,并更新控制面板的显示
    */
   public void setLevel(int level)
   {
    if(level>0&&level<11)
    controlPanel.setLevel(level);
   }
   /*
    * 得到当前总分数
    */
   public int getScore()
   {
    if(canvas != null)
        return score;
     return 0;
   }
   /*
    * 得到本级得分
    */
   public int getCurLevelScore()
   {
    if(canvas != null)
        return curLevelScore;
     return 0;
   }
   /*
    * 更新等级
    */
   public void levelUpdate()
   {
    int curLevel = getLevel();
    if(curLevel < MAX_LEVEL && curLevelScore >= PER_LEVEL_SCORE)
    {
      setLevel(curLevel + 1);
      curLevelScore -= PER_LEVEL_SCORE;
    }   
   }
   /*
    * 获得当前得方块
    */
   public RussiaBlock getCurBlock() {
     return block;
  }
   /*
    * 开始游戏
    */
   private void play()
   {
    playing=true;
    Thread thread = new Thread(new Game());
    thread.start();
    reset();
   }
   /*
     * 重置
     */
     private void reset()
     {
      controlPanel.reset();
      canvas.reset();
                score = 0;
                curLevelScore = 0;
     }
    /*
     * 宣告游戏结束
     */ 
   private void reportGameOver()
   {
    JOptionPane.showMessageDialog(this,"游戏结束!");
   }
   /*
    * 创建菜单
    */
  private void createMenu()
  {
   gameMenu = new JMenu("游戏");
   newGameItem = new JMenuItem("新游戏");
   setBlockColorItem = new JMenuItem("设置前景色");
   setBgColorItem = new JMenuItem("设置背景色");
   turnHardItem = new JMenuItem("增加难度");
   turnEasyItem = new JMenuItem("降低难度");
   exitItem = new JMenuItem("退出");
   gameMenu.add(newGameItem);
    gameMenu.add(setBlockColorItem);
    gameMenu.add(setBgColorItem);
    gameMenu.add(turnHardItem);
    gameMenu.add(turnEasyItem);
    gameMenu.add(exitItem);   
    
   controlMenu =  new JMenu("控制");
    playItem = new JMenuItem("开始");
    pauseItem = new JMenuItem("暂停");
    resumeItem = new JMenuItem("继续");
    stopItem = new JMenuItem("停止");
    controlMenu.add(playItem);
    controlMenu.add(pauseItem);
    controlMenu.add(resumeItem);
    controlMenu.add(stopItem);
    
    windowStyleMenu = new JMenu("风格");
    buttonGroup = new ButtonGroup();
    windowsRadioItem = new JRadioButtonMenuItem("经典");
    motifRadioItem = new JRadioButtonMenuItem("古典");
    metalRadioItem = new JRadioButtonMenuItem("水晶",true);
    windowStyleMenu.add(windowsRadioItem);
    buttonGroup.add(windowsRadioItem);
    windowStyleMenu.add(motifRadioItem);
    buttonGroup.add(motifRadioItem);
    windowStyleMenu.add(metalRadioItem);
    buttonGroup.add(metalRadioItem);    
    informationMenu = new JMenu("系统");
    rankItem = new JMenuItem("英雄榜");
    authorItem = new JMenuItem("关于作者");
    helpItem = new JMenuItem("帮助");    
    informationMenu.add( rankItem);
    informationMenu.add(authorItem);
    informationMenu.add(helpItem);   
    bar = new JMenuBar();
    bar.add(gameMenu);
   bar.add(controlMenu);
   bar.add(windowStyleMenu);
   bar.add(informationMenu);
   
   addActionListenerToMenu();
   setJMenuBar(bar);
  }
  /*
   * 添加菜单响应
   */
  private void addActionListenerToMenu()
  {
	  authorItem.addActionListener(this);
	  helpItem.addActionListener(this);
   newGameItem.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent ae) {
    stopGame();
    reset();
    setLevel(DEFAULT_LEVEL);
   }
  });
  
  setBlockColorItem.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent ae) {
    Color newBlockColor =
            JColorChooser.showDialog(RussiaBlocksGame.this,
                    "Set color for block", canvas.getBlockColor());
    if (newBlockColor != null)
     canvas.setBlockColor(newBlockColor);
   }
  });
  
  setBgColorItem.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent ae) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -