📄 russiablocksgame.java
字号:
/*
* 主游戏类
*/
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 + -