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

📄 fivechessappletdemo.java

📁 java经典10例子
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;/* *main方法创建了ChessFrame类的一个实例对象(cf), *并启动屏幕显示显示该实例对象。 **/public class FiveChessAppletDemo {	public static void main(String args[]){		ChessFrame cf = new ChessFrame();		cf.show();	}}/* *类ChessFrame主要功能是创建五子棋游戏主窗体和菜单 **/class ChessFrame extends JFrame implements ActionListener {	private String[] strsize={"20x15","30x20","40x30"};	private String[] strmode={"人机对弈","人人对弈"};	public static boolean iscomputer=true,checkcomputer=true;	private int width,height;	private ChessModel cm;	private MainPanel mp;		//构造五子棋游戏的主窗体	public ChessFrame() {		this.setTitle("五子棋游戏");		cm=new ChessModel(1);		mp=new MainPanel(cm);		Container con=this.getContentPane();		con.add(mp,"Center");		this.setResizable(false);		this.addWindowListener(new ChessWindowEvent());		MapSize(20,15);		JMenuBar mbar = new JMenuBar();		this.setJMenuBar(mbar);		JMenu gameMenu = new JMenu("游戏");		mbar.add(makeMenu(gameMenu, new Object[] {			"开局", "棋盘","模式", null, "退出"			}, this));		JMenu lookMenu =new JMenu("视图");		mbar.add(makeMenu(lookMenu,new Object[] {			"Metal","Motif","Windows"			},this));		JMenu helpMenu = new JMenu("帮助");		mbar.add(makeMenu(helpMenu, new Object[] {			"关于"		}, this));	}	//构造五子棋游戏的主菜单	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] == "模式"){				JMenu jm = new JMenu("模式");				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);					jm.add(rmenu);					group.add(rmenu);				}				m.add(jm);			}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;    }        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.setModel(cm);    	mp.repaint();    }        public boolean getiscomputer(){    	return this.iscomputer;    }        public void restart(){    	int modeChess = cm.getModeChess();    	if(modeChess <= 3 && modeChess >= 1){    		cm = new ChessModel(modeChess);    		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){}		if(arg.equals("20x15")){			this.width=20;			this.height=15;			cm=new ChessModel(1);			MapSize(this.width,this.height);			SwingUtilities.updateComponentTreeUI(this);		}		if(arg.equals("30x20")){			this.width=30;			this.height=20;			cm=new ChessModel(2);			MapSize(this.width,this.height);			SwingUtilities.updateComponentTreeUI(this);		}		if(arg.equals("40x30")){			this.width=40;			this.height=30;			cm=new ChessModel(3);			MapSize(this.width,this.height);			SwingUtilities.updateComponentTreeUI(this);		}		if(arg.equals("人机对弈")){			this.checkcomputer=true;			this.iscomputer=true;			cm=new ChessModel(cm.getModeChess());			MapSize(cm.getWidth(),cm.getHeight());			SwingUtilities.updateComponentTreeUI(this);		}		if(arg.equals("人人对弈")){			this.checkcomputer=false;			this.iscomputer=false;			cm=new ChessModel(cm.getModeChess());			MapSize(cm.getWidth(),cm.getHeight());			SwingUtilities.updateComponentTreeUI(this);		}		if(arg.equals("开局")){			restart();		}		if(arg.equals("关于"))			JOptionPane.showMessageDialog(this, "五子棋游戏测试版本", "关于", 0);		if(arg.equals("退出"))			System.exit(0);	}}/* *类ChessModel实现了整个五子棋程序算法的核心 */class ChessModel {	//棋盘的宽度、高度、棋盘的模式(如20×15)	private int width,height,modeChess;	//棋盘方格的横向、纵向坐标	private int x=0,y=0;	//棋盘方格的横向、纵向坐标所对应的棋子颜色,	//数组arrMapShow只有3个值:1,2,3,-5,	//其中1代表该棋盘方格上下的棋子为黑子,	//2代表该棋盘方格上下的棋子为白子,	//3代表为该棋盘方格上没有棋子,	//-5代表该棋盘方格不能够下棋子	private int[][] arrMapShow;	//交换棋手的标识,棋盘方格上是否有棋子的标识符	private boolean isOdd,isExist;	public ChessModel() {}		//该构造方法根据不同的棋盘模式(modeChess)来构建对应大小的棋盘	public ChessModel(int modeChess){		this.isOdd=true;		if(modeChess == 1){			PanelInit(20, 15, modeChess);		}		if(modeChess == 2){			PanelInit(30, 20, modeChess);		}		if(modeChess == 3){			PanelInit(40, 30, modeChess);		}	}		//按照棋盘模式构建棋盘大小	private void PanelInit(int width, int height, int modeChess){		this.width = width;		this.height = height;		this.modeChess = modeChess;		arrMapShow = new int[width+1][height+1];		for(int i = 0; i <= width; i++){			for(int j = 0; j <= height; j++){				arrMapShow[i][j] = -5;			}		}	}		//获取是否交换棋手的标识符	public boolean getisOdd(){		return this.isOdd;	}	//设置交换棋手的标识符	public void setisOdd(boolean isodd){		if(isodd)			this.isOdd=true;		else			this.isOdd=false;	}		//获取某棋盘方格是否有棋子的标识值	public boolean getisExist(){		return this.isExist;	}		//获取棋盘宽度	public int getWidth(){		return this.width;	}		//获取棋盘高度	public int getHeight(){		return this.height;	}		//获取棋盘模式	public int getModeChess(){		return this.modeChess;	}	//获取棋盘方格上棋子的信息	public int[][] getarrMapShow(){		return arrMapShow;	}	//判断下子的横向、纵向坐标是否越界	private boolean badxy(int x, int y){		if(x >= width+20 || x < 0)			return true;		return y >= height+20 || y < 0;	}	//计算棋盘上某一方格上八个方向棋子的最大值,	//这八个方向分别是:左、右、上、下、左上、左下、右上、右下	public boolean chessExist(int i,int j){		if(this.arrMapShow[i][j]==1 || this.arrMapShow[i][j]==2)			return true;		return false;	}	//判断该坐标位置是否可下棋子	public void readyplay(int x,int y){		if(badxy(x,y))			return;		if (chessExist(x,y))			return;		this.arrMapShow[x][y]=3;	}	//在该坐标位置下棋子	public void play(int x,int y){		if(badxy(x,y))			return;		if(chessExist(x,y)){			this.isExist=true;			return;		}else			this.isExist=false;		if(getisOdd()){			setisOdd(false);		this.arrMapShow[x][y]=1;		}else{			setisOdd(true);			this.arrMapShow[x][y]=2;		}	}	//计算机走棋	/*	 *说明:用穷举法判断每一个坐标点的四个方向的的最大棋子数,	 *最后得出棋子数最大值的坐标,下子	 **/	public void computerDo(int width,int height){		int max_black,max_white,max_temp,max=0;		setisOdd(true);		System.out.println("计算机走棋 ...");		for(int i = 0; i <= width; i++){			for(int j = 0; j <= height; j++){				if(!chessExist(i,j)){//算法判断是否下子					max_white=checkMax(i,j,2);//判断白子的最大值					max_black=checkMax(i,j,1);//判断黑子的最大值					max_temp=Math.max(max_white,max_black);					if(max_temp>max){						max=max_temp;						this.x=i;						this.y=j;					}				}			}		}		setX(this.x);		setY(this.y);		this.arrMapShow[this.x][this.y]=2;	}		//记录电脑下子后的横向坐标	public void setX(int x){		this.x=x;	}		//记录电脑下子后的纵向坐标	public void setY(int y){		this.y=y;	}		//获取电脑下子的横向坐标	public int getX(){		return this.x;

⌨️ 快捷键说明

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