import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GameFrame extends JFrame
{
public final static int PER_LINE_SCORE = 100;
public final static int PER_LEVEL_SCORE = PER_LINE_SCORE * 20;
public final static int MAX_LEVEL = 10;
private GameCanvas canvas;
private Block block;
private boolean playing = false;
private ControlPanel controlPanel;
private JMenuBar menuBar = new JMenuBar();
private JMenu gameMenu = new JMenu("游戏"),
controlMenu = new JMenu("控制"),
infoMenu = new JMenu("作者信息");
private JMenuItem newGameMenuItem = new JMenuItem("新游戏"),
setFrontColorMenuItem = new JMenuItem("设置前景色 ..."),
setBackColorMenuItem = new JMenuItem("设置背景色 ..."),
turnUpLevelMenuItem = new JMenuItem("升级"),
turnDownLevelMenuItem = new JMenuItem("降级"),
exitMenuItem = new JMenuItem("退出"),
playMenuItem = new JMenuItem("开始游戏"),
pauseMenuItem = new JMenuItem("暂停游戏"),
resumeMenuItem = new JMenuItem("重新开始"),
stopMenuItem = new JMenuItem("停止"),
authorMenuItem1 = new JMenuItem("E-Mail:feng09251227@163.com"),
authorMenuItem2 = new JMenuItem("TEL:3796486");
public GameFrame(String title)
{
super(title);
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((scrSize.width - getSize().width) / 3,(scrSize.height - getSize().height) /4);
createMenu();
Container container = getContentPane();
container.setLayout(new BorderLayout(6, 0));
canvas = new GameCanvas(20, 12,Color.black,Color.gray);
controlPanel = new ControlPanel(this);
container.add(canvas, BorderLayout.CENTER);
container.add(controlPanel, BorderLayout.EAST);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
stopGame();
System.exit(0);
}
});
addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent e)
{
canvas.fanning();
}
});
show();
canvas.fanning();
}
public void reset()
{
controlPanel.reset();
canvas.reset();
}
public boolean isPlaying()
{
return playing;
}
public Block getCurBlock()
{
return block;
}
public GameCanvas getCanvas()
{
return canvas;
}
public void playGame()
{
play();
controlPanel.setPlayButtonEnable(false);
playMenuItem.setEnabled(false);
pauseMenuItem.setEnabled(true);
controlPanel.setPauseButtonEnable(true);
controlPanel.requestFocus();
}
public void pauseGame()
{
if (block != null) block.pauseMove();
controlPanel.setPauseButtonLabel(false);
pauseMenuItem.setEnabled(false);
resumeMenuItem.setEnabled(true);
}
public void resumeGame()
{
if (block != null) block.resumeMove();
controlPanel.setPauseButtonLabel(true);
pauseMenuItem.setEnabled(true);
resumeMenuItem.setEnabled(false);
controlPanel.requestFocus();
}
public void stopGame()
{
playing = false;
if (block != null) block.stopMove();
playMenuItem.setEnabled(true);
pauseMenuItem.setEnabled(false);
resumeMenuItem.setEnabled(false);
controlPanel.setPlayButtonEnable(true);
controlPanel.setPauseButtonLabel(false);
controlPanel.setPauseButtonEnable(false);
}
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 canvas.getScore();
return 0;
}
public int getScoreForLevelUpdate()
{
if (canvas != null)
return canvas.getScoreForLevelUpdate();
return 0;
}
public boolean levelUpdate()
{
int curLevel = getLevel();
if (curLevel < MAX_LEVEL)
{
setLevel(curLevel + 1);
canvas.resetScoreForLevelUpdate();
return true;
}
return false;
}
private void play()
{
reset();
playing = true;
Thread thread = new Thread(new Game());
thread.start();
}
private void reportGameOver()
{
JOptionPane.showMessageDialog(this, "Game Over!");
}
private void createMenu()
{
gameMenu.add(newGameMenuItem);
gameMenu.addSeparator();
gameMenu.add(setFrontColorMenuItem);
gameMenu.add(setBackColorMenuItem);
gameMenu.addSeparator();
gameMenu.add(turnUpLevelMenuItem);
gameMenu.add(turnDownLevelMenuItem);
gameMenu.addSeparator();
gameMenu.add(exitMenuItem);
controlMenu.add(playMenuItem);
controlMenu.add(pauseMenuItem);
controlMenu.add(resumeMenuItem);
controlMenu.add(stopMenuItem);
infoMenu.add(authorMenuItem1);
infoMenu.add(authorMenuItem2);
menuBar.add(gameMenu);
menuBar.add(controlMenu);
menuBar.add(infoMenu);
setJMenuBar(menuBar);
newGameMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopGame();
reset();
setLevel(1);
}
});
setFrontColorMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Color newFrontColor = JColorChooser.showDialog(GameFrame.this,
"设置前景色",
canvas.getBlockColor());
if (newFrontColor != null)
canvas.setBlockColor(newFrontColor);
controlPanel.setTopBlockColor(newFrontColor);
}
});
setBackColorMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Color newBackColor = JColorChooser.showDialog(GameFrame.this,
"设置背景色",
canvas.getBackgroundColor());
if (newBackColor != null)
canvas.setBackgroundColor(newBackColor);
}
});
turnUpLevelMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int curLevel = getLevel();
if (curLevel < MAX_LEVEL) setLevel(curLevel + 1);
}
});
turnDownLevelMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int curLevel = getLevel();
if (curLevel > 1) setLevel(curLevel - 1);
}
});
exitMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
playMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
playGame();
}
});
pauseMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
pauseGame();
}
});
resumeMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
resumeGame();
}
});
stopMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stopGame();
}
});
}
//内部类,控制游戏线程
class Game implements Runnab
没有合适的资源?快使用搜索试试~ 我知道了~
Java 游戏源码俄罗斯方块
共34个文件
class:27个
java:5个
doc:1个
5星 · 超过95%的资源 需积分: 9 43 下载量 124 浏览量
2008-05-27
16:47:36
上传
评论
收藏 35KB RAR 举报
温馨提示
学长用JAVA做的一个俄罗斯方块<br>正确运行需要安装一个j2sdk-1_4_0_01-windows-i586.exe<br>由于这个东东太大,不过网上应该能下到,下不到的留个邮箱我发过去。
资源推荐
资源详情
资源评论
收起资源包目录
俄罗斯方块.rar (34个子文件)
俄罗斯方块
ControlPanel$7.class 1KB
ControlPanel$4.class 1019B
GameFrame$7.class 538B
Box.java 729B
Block.class 3KB
GameFrame$1.class 511B
ControlPanel$2.class 879B
软件说明.doc 27KB
ControlPanel$ControlKeyListener.class 989B
Box.class 807B
GameFrame$3.class 553B
GameCanvas.class 3KB
ControlPanel$5.class 1018B
GameFrame$9.class 484B
Block.java 5KB
GameFrame$11.class 487B
ControlPanel$1.class 561B
GameFrame$2.class 535B
GameFrame.class 7KB
ControlPanel.class 4KB
GameFrame$Game.class 2KB
GameFrame$5.class 821B
俄罗斯方块.bat 36B
GameFrame$10.class 486B
GameCanvas.java 3KB
GameFrame$4.class 926B
GameFrame.java 10KB
ControlPanel$6.class 581B
ControlPanel$TopPanel.class 2KB
ControlPanel.java 7KB
ControlPanel$3.class 561B
GameFrame$8.class 491B
GameFrame$12.class 485B
GameFrame$6.class 539B
共 34 条
- 1
资源评论
- lxl16072018-09-05感觉还行,只是感觉用着不是特别顺手.
普通网友
- 粉丝: 19
- 资源: 69
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功