📄 mainframe.java
字号:
/**
* 主界面类: MainFrame.class
* @author obtuseSword
* @date 2008-05-29
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// 主界面类
public class MainFrame extends JFrame{
/************* 公开字段:开始 **************/
// (静态)游戏模式枚举类型
public static enum GameMode{
SINGLE_PLAYER, DOUBLE_PLAYER
};
// 窗口宽度和高度
public final int WIDTH = 450, HEIGHT = 580;
/**----------- 公开字段:结束 ------------**/
/************* 公开方法:开始 **************/
// 构造函数
public MainFrame(){
//---------- 设置窗体基本属性 -------------//
setSize(WIDTH, HEIGHT);
setResizable(false);
//---------- 设置窗体内容窗格 -------------//
Container contentPane = getContentPane();
// 添加棋盘(同时给棋盘添加鼠标事件监听器)
chessBoard.addMouseListener(new MouseHandler());
contentPane.add(chessBoard);
// 添加菜单栏
setJMenuBar(createMenuBar());
// 添加状态栏
statusBar.add(gameModeLabel);
contentPane.add(statusBar, BorderLayout.SOUTH);
}
/**----------- 公开方法:结束 ------------**/
/************ 事件监听器:开始 *************/
// 鼠标事件监听器
private class MouseHandler extends MouseAdapter{
// 鼠标单击事件响应
public void mousePressed(MouseEvent m_event){
// 获取鼠标点击的坐标
int mouse_x = m_event.getX();
int mouse_y = m_event.getY();
// 计算点击坐标对应棋盘的哪行哪列
int col =
(int)((mouse_x - chessBoard.base.getX()) / chessBoard.dis);
int row =
(int)((mouse_y - chessBoard.base.getY()) / chessBoard.dis);
// 落子
if( gameMode == GameMode.SINGLE_PLAYER ){
switch( chessBoard.getPlayingPlayer() ){
case WHITE_PLAYER:
chessBoard.go(row, col);
JJJ.go();
break;
}
}else{
chessBoard.go(row, col);
}
}
}
// 菜单项的共用事件监听器
private class MenuListener implements ActionListener{
// 事件响应函数
public void actionPerformed(ActionEvent menu_event){
// 如果点击了“单人游戏”菜单项
if( menu_event.getActionCommand().equals("Single") ){
gameMode = GameMode.SINGLE_PLAYER;
gameModeLabel.setText("当前游戏模式: 单人游戏");
// 重新开始游戏
chessBoard.restart();
chessBoard.repaint();
// 如果点击了“双人游戏”菜单项
}else if( menu_event.getActionCommand().equals("Double") ){
gameMode = GameMode.DOUBLE_PLAYER;
gameModeLabel.setText("当前游戏模式: 双人游戏");
// 重新开始游戏
chessBoard.restart();
chessBoard.repaint();
// 如果点击了“关于该程序”菜单项
}else if( menu_event.getActionCommand().equals("About") ){
String message =
"感谢您使用该款由“和山帅哥帮”编制的五子棋游戏程序!\n" +
"如果您能够打败该程序的机器人 JJJ,请发截屏到电子邮箱:\n" +
"obtuseSword@gmail.com\n" +
"有机会我们要请你这位英勇而伟大的超级天才吃一顿。\n" +
"\n(C) Copyright 和山帅哥帮 2008. All rights reserved.\n\n";
JOptionPane.showMessageDialog(null, message, "关于该程序", JOptionPane.INFORMATION_MESSAGE);
// 如果点击了“箴言”菜单项
}else if( menu_event.getActionCommand().equals("Logion") ){
String logion =
"我思,故我在。 【法国】笛卡尔\n" +
"三思而后行。 【中国】古谚语\n" +
"无招胜有招。 【中国】武侠小说\n" +
"他妈的少废话,赶紧下棋。 【中国】和山帅哥帮\n\n";
JOptionPane.showMessageDialog(null, logion, "箴 言", JOptionPane.INFORMATION_MESSAGE);
}
}
}
/**---------- 事件监听器:结束 -----------**/
/************* 私有方法:开始 **************/
// 创建菜单栏
private JMenuBar createMenuBar(){
JMenuBar menuBar = new JMenuBar(); // 菜单栏
//----------- “游戏”菜单 -----------//
JMenu gameMenu = new JMenu("游戏");
gameMenu.setMnemonic('G');
// 创建菜单项
JMenuItem singleItem = new JMenuItem("单人游戏",'S');
JMenuItem doubleItem = new JMenuItem("双人游戏",'D');
// 给菜单项添加事件监听器
singleItem.addActionListener(new MenuListener());
doubleItem.addActionListener(new MenuListener());
singleItem.setActionCommand("Single");
doubleItem.setActionCommand("Double");
// 将菜单项添加到“游戏”菜单中
gameMenu.add(singleItem);
gameMenu.add(doubleItem);
// 将菜单添加到菜单栏中
menuBar.add(gameMenu);
//----------- “帮助”菜单 -----------//
JMenu helpMenu = new JMenu("帮助");
helpMenu.setMnemonic('H');
// 创建菜单项
JMenuItem logionItem = new JMenuItem("箴 言",'L');
JMenuItem aboutItem = new JMenuItem("关于该程序",'A');
// 给菜单项添加事件监听器
logionItem.addActionListener(new MenuListener());
aboutItem.addActionListener(new MenuListener());
logionItem.setActionCommand("Logion");
aboutItem.setActionCommand("About");
// 将菜单项添加到“帮助”菜单中
helpMenu.add(logionItem);
helpMenu.add(aboutItem);
// 将菜单添加到菜单栏中
menuBar.add(helpMenu);
//---------- 返回菜单栏 ------------//
return menuBar;
}
/**----------- 私有方法:结束 ------------**/
/************* 私有字段:开始 **************/
// 棋盘实例
private ChessBoard chessBoard = new ChessBoard();
// 状态栏
private JToolBar statusBar = new JToolBar();
// 游戏模式
private GameMode gameMode = GameMode.SINGLE_PLAYER;
// 游戏模式提示信息标签
private JLabel gameModeLabel = new JLabel("当前游戏模式: 单人游戏");
// 机器人实例
private Robot JJJ = new Robot(chessBoard);
/**----------- 私有字段:结束 ------------**/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -