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

📄 game.java

📁 模仿Fyrad32编写的四子棋游戏
💻 JAVA
字号:
package fyrad;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Game extends JFrame implements ActionListener
{
	private static final long serialVersionUID = 6936248325451266049L;
	private int columns=8;//棋盘布局9行8列                
	private int rows=9;
	private int playerFlag;//下棋标志位
	private Mode playMode;//对战模式(默认人机对战)
	private Map map;      //旗子摆放
	private Table table;  //布局
	private Button[][] button;//棋子
	private int winFlag=0;
	private JMenu game;      //菜单选项
	private JMenu option;
	private JMenu help;
	private JMenuBar menubar;//菜单栏
	private JToolBar toolbar;//按钮栏
	private InfoShow infoBoard;//信息提示框
	private UserInfo user1Board,user2Board;//玩家信息
	private Dialog dialog;//对话框
	private JFileChooser filechooser;//文件夹选项
	private ActionListener listener=new MenuItemActionListener(menubar);//实例化菜单栏监听器
	private ActionListener listener1=new ButtonActionListener(toolbar);//实例化按钮栏监听器
	public Game(){ InitGame(); }
	//初始化游戏 
	public void InitGame() 
	{
		playerFlag=1;
		Container container=getContentPane();
		GridLayout tableLayout=new GridLayout(rows,columns);
		playMode=new Mode();
		//初始化布局、提示消息、菜单项、菜单栏、按钮栏、棋子、玩家信息
		table=new Table(tableLayout);//布局
		table.setBackground(Color.blue);
		infoBoard=new InfoShow();//提示消息
		game=new JMenu("Game");   //菜单项
		option=new JMenu("Option");
		help=new JMenu("Help");
		menubar=new JMenuBar();   //菜单栏
		toolbar=new JToolBar();   //按钮栏
		button=new Button[rows][columns];//棋子
		user1Board=new UserInfo("Player",Color.yellow);//玩家信息
		user2Board=new UserInfo("Computer",Color.red);
		infoBoard.SetP1Name(user1Board.userName);
		infoBoard.SetP2Name(user2Board.userName);
		filechooser=new JFileChooser();//文件夹选项
		//添加按纽和监听器
		game.setMnemonic('G');
        game.add(menuItem("New Game ...",listener,"New Game ...",'N',KeyEvent.VK_N));
        game.add(menuItem("Next Game ...",listener,"Next Game ...",'t',KeyEvent.VK_T));
        game.addSeparator();
        game.add(menuItem("Nomal Mode",listener,"Nomal Mode",0,0));
        game.add(menuItem("Net Mode",listener,"Net Mode",0,0));
        game.addSeparator();
        game.add(menuItem("Open",listener,"Open",'O',0));
        game.add(menuItem("Save As ...",listener,"Save As ...",'S',KeyEvent.VK_S));
        game.addSeparator();
        game.add(menuItem("Exit",listener,"exit",'x',0));
		option.setMnemonic('O');
        option.add(menuItem("Move",listener,"move",'M',KeyEvent.VK_M));
        option.add(menuItem("Undo Last Move",listener,"undolastmove",'U',KeyEvent.VK_U));
        option.addSeparator();
        option.add(menuItem("Break",listener,"break",'B',KeyEvent.VK_B));
        help.setMnemonic('H');
        help.add(menuItem("About...",listener,"about",'A',0));
        menubar.add(game);
        menubar.add(option);
        menubar.add(help);
        toolbar.add(button(listener1,"A1",0));
        toolbar.addSeparator();
        toolbar.add(button(listener1,"B2",1));
        toolbar.add(button(listener1,"C3",2));
        toolbar.add(button(listener1,"D4",3));
        toolbar.add(button(listener1,"E5",4));
        toolbar.addSeparator();
        toolbar.add(button(listener1,"F6",5));
        toolbar.addSeparator();
        toolbar.add(button(listener1,"G7",6));
        toolbar.add(button(listener1,"H8",7));
        toolbar.addSeparator();
        toolbar.add(button(listener1,"I9",8));
        toolbar.setFloatable(false);
		//在table布局中添加棋子
		for(int i=0;i<rows;i++)
		{
			for(int j=0;j<columns;j++)
			{
				button[i][j]=new Button();
				
				button[i][j].addActionListener(this);
				
				button[i][j].setEnabled(false);
				
				table.add(button[i][j]);
			}
		}
		//添加所有初始化的对象
		container.setLayout(null);
		container.add(table,"Center");
		container.add(infoBoard);
		container.add(user1Board);
		container.add(user2Board);
		container.add(menubar);
		container.add(toolbar);
		table.setBounds(0,62,columns*49,rows*49);
		infoBoard.setBounds(0,502,392,21);
		menubar.setBounds(0,0, 392, 27);
		toolbar.setBounds(0,27,392,35);
		user1Board.setBounds(0,522,197,44);
		user2Board.setBounds(196,522,196,44);
	}
	//设置游戏参数(玩家颜色、对战模式)
	@SuppressWarnings("deprecation")
	public void SetGame() 
	{
		dialog=new Dialog(this,playMode,user1Board,user2Board,infoBoard);
		dialog.show();
		infoBoard.SetP1Name(user1Board.userName);
		infoBoard.SetP2Name(user2Board.userName);
	}
	//开始游戏
	public void StartGame() 
	{
		map=new Map(rows,columns);
		infoBoard.ShowMessage();
		for(int i=0;i<rows;i++)
		{
			for(int j=0;j<columns;j++)
			{
				button[i][j].setEnabled(true);
			}
		}
	}
	//终止游戏
	public void StopGame()
	{
		for(int i=0;i<rows;i++)
		{
			for(int j=0;j<columns;j++)
			{
				button[i][j].setEnabled(false);
			}
		}
	}
	//重新开始游戏
	public void NewGame() 
	{
		winFlag=0;
		infoBoard.equalFlag=0;
		playerFlag=1;
		infoBoard.SetPlayerFlag(playerFlag);
		infoBoard.winFlag=0;
		map=new Map(rows,columns);
		infoBoard.ShowMessage();
		for(int i=0;i<rows;i++)
		{
			for(int j=0;j<columns;j++)
			{
				button[i][j].setEnabled(true);
				button[i][j].hitFlag=0;
				button[i][j].setBackground(getBackground());
			}
		}
	}
	//退出游戏
	public void Exit(){ dispose(); }
	//打开文件
	//public void Exit()
	//菜单下拉子项生成方法
	public static JMenuItem menuItem(String label,ActionListener listener,String command,int mnemonic,int acceleratorKey)
	{
		JMenuItem item=new JMenuItem(label);
		item.addActionListener(listener);
		item.setActionCommand(command);
		if(mnemonic!=0)item.setMnemonic((char)mnemonic);
		if(acceleratorKey!=0)item.setAccelerator(KeyStroke.getKeyStroke(acceleratorKey,java.awt.Event.CTRL_MASK));
		return item;
	}
    //菜单下拉子项监听器
	public class MenuItemActionListener implements ActionListener
	{
		Component parent;
		public MenuItemActionListener(Component parent)
		{
			this.parent=parent;
		}
		public void actionPerformed(ActionEvent e) 
		{
			JMenuItem item=(JMenuItem)e.getSource();
			String cmd=item.getActionCommand();
			if(cmd=="about"){About about=new About();about.About();}
			if(cmd=="exit"){Exit();}
			if(cmd=="Next Game ..."){StartGame();}
			if(cmd=="Nomal Mode"){NewGame();}
			if(cmd=="break"){StopGame();}
			if(cmd=="New Game ..."){SetGame();}
			if(cmd=="Open"){filechooser.showOpenDialog(menubar);}
			if(cmd=="Save As ..."){filechooser.showSaveDialog(menubar);}
		}
	}
    //按钮图标生成方法
	static ImageIcon createImageIcon(String path) 
    {
	    java.net.URL imgURL=Game.class.getResource(path);
	    if (imgURL!=null) { return new ImageIcon(imgURL); }
	    else 
	    {
	      System.err.println("Couldn't find file: "+path);
	      return null;
	    }
	}
    //按钮生成方法
    public static JButton button(ActionListener listener,String command,int code)
	{
    	ImageIcon[] images = new ImageIcon[9];
    	String[] s=new String[9];
    	s[0]=("Switch to Network Mode");
    	s[1]=("New Game");
    	s[2]=("Next Game");
    	s[3]=("Make Computer Move");
    	s[4]=("Undo Last Move");
    	s[5]=("Break");
    	s[6]=("Auto Minimize");
    	s[7]=("Show Progress Bar");
    	s[8]=("About");
    	for (int i = 0; i < 9; i++) 
	    {
	      images[i] = createImageIcon("images/icon/"+i+".jpg");
	    }
    	JButton button=new JButton ();
    	button.setOpaque(true);
    	
		button.addActionListener(listener);
		button.setActionCommand(command);
		ImageIcon icon = images[code];
		button.setIcon(icon);
		button.setToolTipText(s[code]);
		return button;
	}
    //按钮监听器
    public class ButtonActionListener implements ActionListener
	{
		Component parent;
		public ButtonActionListener(Component parent)
		{
			this.parent=parent;
		}
		public void actionPerformed(ActionEvent e) 
		{
			JButton button=(JButton)e.getSource();
			String cmd=button.getActionCommand();
			if(cmd=="I9"){About about=new About();about.About();}
			if(cmd=="B2"){StartGame();}
			if(cmd=="C3"){NewGame();}
			if(cmd=="E5"){StopGame();}
			if(cmd=="A1"){SetGame();}
			if(cmd=="F6"){Exit();}
		}
	}
	//地图上的主要算法在按钮上的实现
	public void actionPerformed(ActionEvent e) 
	{
		//给每个棋子添加监听器(如何下棋)
		for (int i = 0; i < rows; i++) 
		{
			for (int j = 0; j < columns; j++) 
			{
				if (e.getSource().equals(button[i][j])) 
				{ 
					//人人对战模式
					if (playMode.playMode == 1) 
					{
						System.out.println("mousePressed()");
						//判断当前玩家是否可以置子(1可以置子,0不可以置子)
						if (playerFlag == 1) 
						{
							if (button[map.Place(j)][j].hitFlag == 0) 
							{
								button[map.Place(j)][j]
										.setBackground(user1Board.userColor);
								button[map.Place(j)][j].hitFlag = playerFlag;
								map.SetPlayer(playerFlag,map.Place(j),j);//设置地图
								map.count--;
								if(map.IsEqual())//判断平局
								{
									System.out.println("equal");
									infoBoard.equalFlag=1;
									infoBoard.ShowEqual();
								}
								//判断是否可赢
								if(map.IsWin(map.Place(j),j,playerFlag))
								{
									System.out.println("end");
									infoBoard.ShowWin();
									StopGame();
								}
								map.AddPlace(j);
								playerFlag = 2;
								infoBoard.SetPlayerFlag(2);
								infoBoard.ShowMessage();
							}
						} 
						//另外一人下子
						else 
						{
							if (button[map.Place(j)][j].hitFlag == 0) 
							{
								button[map.Place(j)][j]
										.setBackground(user2Board.userColor);
								button[map.Place(j)][j].hitFlag = playerFlag;
								map.SetPlayer(playerFlag,map.Place(j),j);//设置地图
								map.count--;
								if(map.IsEqual())//判断平局
								{
									System.out.println("equal");
									infoBoard.equalFlag=1;
									infoBoard.ShowEqual();
								}
								if(map.IsWin(map.Place(j),j,playerFlag))
								{
									System.out.println("end");
									infoBoard.ShowWin();
									StopGame();
								}
								map.AddPlace(j);
								playerFlag = 1;
								infoBoard.SetPlayerFlag(1);
								infoBoard.ShowMessage();
							}
						}
					} 
					//人机对战模式
					else 
					{
                        //人置子 
						if (button[map.Place(j)][j].hitFlag == 0) 
						{
							button[map.Place(j)][j]
									.setBackground(user1Board.userColor);
							button[map.Place(j)][j].hitFlag = playerFlag;
							map.SetPlayer(playerFlag,map.Place(j),j);//设置地图
							map.count--;
							if(map.IsEqual())//判断平局
							{
								System.out.println("equal");
								infoBoard.equalFlag=1;
								infoBoard.ShowEqual();
							}
							//判断是否可赢
							if(map.IsWin(map.Place(j),j,playerFlag))
							{
								System.out.println("end");
								winFlag=1;
								infoBoard.ShowWin();
								StopGame();
							}
							map.AddPlace(j);
							playerFlag = 2;
							infoBoard.SetPlayerFlag(2);
							infoBoard.ShowMessage();
						}
						// 电脑置子 
						if (winFlag==0&&playerFlag == 2) 
						{
							int temp = map.ComputerAIPlace();
							while (button[map.Place(temp)][temp].hitFlag != 0) 
							{
								temp = map.ComputerPlace();
							}
							button[map.Place(temp)][temp]
									.setBackground(user2Board.userColor);
							button[map.Place(temp)][temp].hitFlag = playerFlag;
							map.SetPlayer(playerFlag,map.Place(temp),temp);//设置地图
							map.count--;
							if(map.IsEqual())//判断平局
							{
								System.out.println("equal");
								infoBoard.equalFlag=1;
								infoBoard.ShowEqual();
							}
							if(map.IsWin(map.Place(temp),temp,playerFlag))
							{
								System.out.println("end");
								infoBoard.ShowWin();
								StopGame();
							}
							map.AddPlace(temp);
							playerFlag = 1;							
							infoBoard.SetPlayerFlag(1);
							infoBoard.ShowMessage();
						}

					}
				}
            }
		}
	}
	public static void main(String[] args) 
	{
		Cover cover=new Cover();
		cover.Cover();
		Game panel=new Game();
		panel.setTitle("Fyrad 32");
		panel.setSize(400, 600);
		panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//居中窗体
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		int ScreenWidth=screenSize.width;
		int ScreenHeight=screenSize.height;
		int x=(ScreenWidth-panel.getWidth())/2;
		int y=(ScreenHeight-panel.getHeight())/2;
		panel.setLocation(x,y);
		panel.setVisible(true);
    }
}
 

⌨️ 快捷键说明

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