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

📄 chessmap.java

📁 无禁手的五子棋带人工智能
💻 JAVA
字号:
//杨建国:ChessMap.java
// Play fivelink game
// <applet code=ChessMap width=700 height=400></applet>
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.applet.*;


public class ChessMap extends JApplet {

	private ChessBot bot;				//电脑AI
	private ImageIcon map;				//棋盘背景位图
	private ImageIcon blackchess;		//黑子位图
	private ImageIcon whitechess;		//白子位图
	private ChessPanel cp;				//棋盘
	private JMenuBar menubar;			//以下为下拉菜单
	private JMenu[] menu={new JMenu("Game"),new JMenu("Configure"),new JMenu("Help")};
	private JMenuItem[] menuitem1={new JMenuItem("Restart",KeyEvent.VK_R),new JMenuItem("Rollback",KeyEvent.VK_O),new JMenuItem("Exit",KeyEvent.VK_X)};
	private JMenuItem[] menuitem2={new JMenuItem("Configure...",KeyEvent.VK_C),new JMenuItem("About...",KeyEvent.VK_A),new JMenuItem("Human",KeyEvent.VK_U)};
	private int player;					//人执黑子还是白子
	private boolean haveai=true;		//人与人下还是人与电脑下,true与电脑下
	
	class Mouseclicked extends MouseAdapter		//判断鼠标左击并通知棋盘和电脑
	{
		public void mouseClicked(MouseEvent e)
		{
    		Point p1=new Point();
    		Point p2=new Point();
    		
    		p1=cp.addChess(e.getX(),e.getY(),player);
    		//play(sound);
    		if(cp.isSuccess(player)==true)
    		{
    			cp.gameOver(player);
    			if(player==cp.BLACK_ONE)
    			{
    				JOptionPane.showMessageDialog(null,"Game Over!Black Win!");
    			}
    			else if(player==cp.WHITE_ONE)
    			{
    				JOptionPane.showMessageDialog(null,"Game Over!White Win!");
    			}
    		}
    		else if(haveai)
    		{ 
    			if(cp.isSuccess((-1)*player)==false)
    			{
    				p2=bot.play(p1.x,p1.y);
    				cp.addChess(p2.x,p2.y,(-1)*player,true);
    				if(cp.isSuccess((-1)*player)==true)
    				{
    					cp.gameOver((-1)*player);
    					if(player==cp.BLACK_ONE)
    					{
    						JOptionPane.showMessageDialog(null,"Game Over!White Win!");
    					}
    					else if(player==cp.WHITE_ONE)
    					{
    						JOptionPane.showMessageDialog(null,"Game Over!Black Win!");
    					}
    				}
    			}
    		}
    		else player*=(-1);
    		
    	} 
    	
	}
	class MouseMoved implements MouseMotionListener		//调试用,获得鼠标位置
	{
		public void mouseMoved(MouseEvent e)
    	{
    		cp.showMousePos(e.getPoint());
    	}
    	public void mouseDragged(MouseEvent e)
    	{}
	}
	class Menuitemclicked implements ActionListener		//菜单消息处理
	{
		public void actionPerformed(ActionEvent e) 
		{
      		JMenuItem target = (JMenuItem)e.getSource();
      		String actionCommand = target.getActionCommand();
      		if(actionCommand.equals("Restart")) 		//重开一局
      		{
        		cp.reset();	
        		bot.restart();
        	//	player=cp.BLACK_ONE;
      		}
      		if(actionCommand.equals("Rollback")) 		//悔棋
      		{
        		cp.rollback();	
        		bot.rollback();
        	
      		}
      		else if(actionCommand.equals("Exit")) 		//退出
      		{
        		System.exit(1);	
      		}
      		else if(actionCommand.equals("Configure")) //执黑子还是执白子
      		{
        		Object[] options = { "Black", "White" };
        		int sel = JOptionPane.showOptionDialog(
          				null, "Your side:", "choose:",
          				JOptionPane.DEFAULT_OPTION,
          				JOptionPane.QUESTION_MESSAGE, null,
          				options, options[0]);
          		if(sel==1)
          		{
          			cp.reset();
          			player=cp.WHITE_ONE;
          			Point pt=new Point(bot.playfirst());
          			cp.addChess(pt.x,pt.y,cp.BLACK_ONE,true);
          			 
          		}
          		else
          		{
          			cp.reset();
          			player=cp.BLACK_ONE;
          		}
          		
          	}
          	else if(actionCommand.equals("Human")) 		//与人下
      		{
        		haveai=false;	
      		}
      		else if(actionCommand.equals("About")) 		//版权与帮助
      		{
        		JOptionPane.showConfirmDialog(null,"fivelink v1.0\nCopyright(c)2004 Yang Jianguo","About",JOptionPane.CLOSED_OPTION,JOptionPane.INFORMATION_MESSAGE);	
      		}
    	}

	}
	Mouseclicked mouseclicked=new Mouseclicked();
	MouseMoved mousemoved=new MouseMoved();
	Menuitemclicked menuclicked=new Menuitemclicked();
	
 	public void init() //初始化与默认值
 	{
		int i;
		
		map=new ImageIcon(getClass().getResource("map.gif"));
		blackchess=new ImageIcon(getClass().getResource("blackchess.gif"));
		whitechess=new ImageIcon(getClass().getResource("whitechess.gif"));
		cp=new ChessPanel(map,blackchess,whitechess);
		bot=new ChessBot(cp.N);
		menubar=new JMenuBar();
		menuitem1[0].setActionCommand("Restart");
		menuitem1[1].setActionCommand("Rollback");
		menuitem1[2].setActionCommand("Exit");
		menuitem2[0].setActionCommand("Configure");
		menuitem2[1].setActionCommand("About");
		menuitem2[2].setActionCommand("Human");
		for(i=0;i<3;i++)
			menu[0].add(menuitem1[i]);
		menu[1].add(menuitem2[0]);
		menu[1].add(menuitem2[2]);
		menu[2].add(menuitem2[1]);
		menu[0].setMnemonic(KeyEvent.VK_G);
		menu[1].setMnemonic(KeyEvent.VK_C);
		menu[2].setMnemonic(KeyEvent.VK_H);
		for(i=0;i<3;i++)
			menubar.add(menu[i]);
		Container p = getContentPane();
		setJMenuBar(menubar);
		p.add(cp);
		cp.addMouseListener(mouseclicked);
		cp.addMouseMotionListener(mousemoved);
		menuitem1[0].addActionListener(menuclicked);
		menuitem1[1].addActionListener(menuclicked);
		menuitem1[2].addActionListener(menuclicked);
		menuitem2[0].addActionListener(menuclicked);
		menuitem2[1].addActionListener(menuclicked);
		menuitem2[2].addActionListener(menuclicked);
		player=cp.BLACK_ONE;
	
	}
  
  public static void main(String[] args) {
    Console.run(new ChessMap(), 460, 500);	//Console 可以使该程序既可以在控制台下运行,也可在网页中运行
  }
} ///:~

⌨️ 快捷键说明

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