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

📄 mainframe.java

📁 很不错的一一个五子棋
💻 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 + -