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

📄 chessframe.java

📁 我的课程设计的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * @(#)ChessFrame.java
 *
 *
 * @author 
 * @version 1.00 2008/4/11
 */

//package fivechess;

 import javax.swing.JFrame;
 import java.awt.HeadlessException;
 import javax.swing.*;
 import java.awt.event.*;
 import java.awt.*;
 import java.net.*;
 import java.io.*;
public class ChessFrame extends JFrame implements ActionListener 
{
   //背景音乐
   private Sound backsound = new Sound("aa.mid");
   private String[] strsize = {"20*15","30*20","40*30"};
   private String[] strmode = {"人机对弈"};
   private int width,height;
   private ChessModel cm;
   private MainPanel mp;
   
   private final int DEFAULT_PORT = 5454;
   private ServerSocket serversocket;
   private Socket clientsocket;
   private SocketThread socketthread;
   
   private InputStream in;
   private OutputStream out;
   
   private JMenuItem serverMenuItem;
   private JMenuItem connectMenuItem;
   private JMenuItem disconnectMenuItem;
   private JMenuItem boardMenuItem;
   private JMenu localchessMenu;
   
   public static boolean iscomputer = true,checkcomputer = true;
   //标志是否是本地人机对弈,程序运行后,默认是本地人机对弈
   public static boolean isnet = false;
   public static boolean isserver = true;
   public static boolean istoken = true;
   
   public ChessFrame(String title)
   {
   	super(title);
   	cm = new ChessModel(1);
   	mp = new MainPanel(this,cm);
   	Container com = this.getContentPane();
   	com.add(mp,"Center");
   	this.setResizable(false);
   	this.addWindowListener(
   		new WindowAdapter()
   		{
   			public void windowClosing(WindowEvent e)
   			{
   				System.exit(0);
   			}
   		}
   		);
   		
   		MapSize(20,15);
   		JMenuBar mbar = new JMenuBar();
   		this.setJMenuBar(mbar);
   		
   		//游戏菜单
   		JMenu gameMenu = new JMenu("游戏");
   		mbar.add(makeMenu(gameMenu,new Object[]
   		{
   			"开局","棋盘",null,"音乐",null,"退出"
   		},this));
   		boardMenuItem = gameMenu.getItem(1);
   		
   		//视图菜单
   		JMenu lookMenu = new JMenu("视图");
   		mbar.add(makeMenu(lookMenu,new Object[]
   		{
   			"Metal","Motif","Windows"
   		},this));
   		
   		//本地对弈菜单
   		JMenu localMenu = new JMenu("视图");
   		mbar.add(makeMenu(lookMenu,new Object[]
   		{
   			"本地对弈"
   		},this));
   		localchessMenu = localMenu;
   		
   		//网络对弈菜单
   		JMenu netMenu = new JMenu("网络对弈");
   		mbar.add(makeMenu(netMenu,new Object[]
   		{
   			"启动服务器","连接服务器","终端服务器"
   		},this));
   		serverMenuItem = netMenu.getItem(0);
   		connectMenuItem = netMenu.getItem(1);
   		disconnectMenuItem = netMenu.getItem(2);
   		disconnectMenuItem.setEnabled(false);
   		//程序运行开始时,中断连接菜单项不可用
   		
   		//帮助菜单
   		JMenu helpMenu = new JMenu("帮助");
   		mbar.add(makeMenu(helpMenu,new Object[]
   		{
   			"关于"
   		},this));
   		
 //  		backsound.hasPlayed = true;
  // 		backsound.loop();
   		this.show();		
   	}
   		
   	//设置菜单的方法
   	public JMenu makeMenu(Object parent,Object items[],Object target)
   	{
   		JMenu m = null;
   		if(parent instanceof JMenu)
   			m = (JMenu)parent;
   		else if(parent instanceof String)
   			m = new JMenu((String)parent);
   		else
   			 return null;
   		for(int i = 0;i < items.length; i++)
   			if(items[i] == null)
   				m.addSeparator();
   			else if(items[i] == "棋盘")
   			{
   				JMenu jm = new JMenu("棋盘");
   				ButtonGroup group = new ButtonGroup();
   				JRadioButtonMenuItem rmenu;
   				for(int j=0;j<strsize.length;j++)
   				{
   					rmenu=makeRadioButtonMenuItem(strsize[j],target);
   					if (j==0) rmenu.setSelected(true);
   					jm.add(rmenu);
   					group.add(rmenu);
   				}
   				m.add(jm);
   			}
   			else if(items[i] == "本地对弈")
   			{
   				ButtonGroup group = new ButtonGroup();
   				JRadioButtonMenuItem rmenu;
   				for (int h=0;h<strmode.length;h++)
   				{
   					rmenu = makeRadioButtonMenuItem(strmode[h],target);
   					if (h==0) rmenu.setSelected(true);
   					m.add(rmenu);
   					group.add(rmenu);
   				}
   			}
   			else
   				m.add(makeMenuItem(items[i],target));
   				return m;
   		}
   		//设置菜单项的方法
   		public JMenuItem makeMenuItem(Object item,Object target)
   		{
   			JMenuItem r = null;
   			if(item instanceof String )
   				r = new JMenuItem((String)item);
   			else
   			if(item instanceof JMenuItem)
   				r = (JMenuItem)item;
   				else
   					return null;
   				if (target instanceof ActionListener)
   					r.addActionListener((ActionListener)target);
   					return r;		
   		}
   		
   		//设置单选菜单项的方法
   		public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item,Object target)
   		{
   			JRadioButtonMenuItem r = null;
   			if(item instanceof String)
   				r = new JRadioButtonMenuItem((String)item);
   			else
   			if(item instanceof JRadioButtonMenuItem)
   				r = (JRadioButtonMenuItem)item;
   			else
   				return null;
   			if(target instanceof ActionListener)
   				r.addActionListener((ActionListener)target);
   				return r;			 	 
   		}
   		
   		// 以w为宽,以h为长刷新棋盘
   		//网络对战时,此功能不可用
   		public void MapSize(int w,int h)
   		{
   			setSize(w*20+50,h*20+100);
   			if(this.checkcomputer)
   				this.iscomputer = true;
   		    else
   		    	this.iscomputer = false;
   		    	mp.setMode(cm);
   		    	mp.repaint();
   		}
   		
   		public boolean getiscomputer()
   		{
   			return this.iscomputer;
   		}
   		
   		public void restart()
   		{
   			int degree = cm.getDegree();
   			if(degree <= 3&& degree >=1)
   			{
   				cm = new ChessModel(degree);
   				MapSize(cm.getWidth(),cm.getHeight());
   			} 
   				else
   				{
   					System.out.println("\u81EA\u5B9A\u4E49");
   				}
   		}
   		
   		//菜单事件的处理
   		public void actionPerformed(ActionEvent e)
   		{
   			String arg = e.getActionCommand();
   			
   			//视图菜单中的各类单项的处理,选中某一项后,改变为相应的窗口风格
   			try
   			{
   				if(arg.equals("Windows"))
   					UIManager.setLookAndFeel
   					("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
   					else if(arg.equals("Motif"))
   						UIManager.setLookAndFeel
   						("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
   						else
   							UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
   							SwingUtilities.updateComponentTreeUI(this);
   			}
   			catch (Exception ee)
   			{
   				System.out.println(ee);
   			}	
   		
   		
   		//棋盘菜单中各菜单项的处理,选中某一项后,重新设置棋盘,并看是新的一局
   		//网络对战时,不可改变棋盘的大小,即网络对战时棋盘菜单不可用
   		if(arg.equals("20*15"))
   		{
   			this.width = 20;
   			this.height = 15;
   			cm = new ChessModel(1);
   			MapSize(this.width,this.height);
   			SwingUtilities.updateComponentTreeUI(this);
   		}
   		if(arg.equals("30*20"))
   		{
   			this.width = 30;
   			this.height = 20;
   			cm = new ChessModel(2);
   			MapSize(this.width,this.height);
   			SwingUtilities.updateComponentTreeUI(this);

⌨️ 快捷键说明

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