?? game.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 + -