?? frame1.java
字號:
package ball;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JScrollPane;
import javax.swing.JEditorPane;
import javax.swing.JSplitPane;
import javax.swing.JOptionPane;
import java.io.InputStream;
import sun.audio.*;
import java.net.URL;
import java.util.Random;
/**
* <p>Title: 類說明</p>
*
* <p>Description: 程序主類</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author goodboy
* @version 2.1
*/
public class Frame1 extends JFrame {
int size=16; //棋盤大小
int[][] board=new int[size][size]; //棋盤數(shù)據(jù) 0:無棋子 1:用戶棋子 2:AI棋子
int time=0;; //游戲時間
boolean suspend=true; //是否暫停
int aiX, aiY; //AI下子坐標
Random rand=new Random(); //隨機數(shù)對象
String aiText1, aiText2, aiText3, aiText4, aiText5, aiText6, aiText7, aiText8, aiText9
, aiText10, aiText11, aiText12, aiText13, aiText14, aiText15, aiText16, aiText17
, aiText18, aiText19, aiText20; //AI表情說明文字
//記錄棋子的歷史位置
ArrayList userLastX=new ArrayList(); //用戶棋子橫坐標
ArrayList userLastY=new ArrayList(); //用戶棋子縱坐標
ArrayList aiLastX=new ArrayList(); //AI棋子橫坐標
ArrayList aiLastY=new ArrayList(); //AI棋子縱坐標
ArrayList lastText=new ArrayList(); //AI分析文本信息
int backStep=0; //可以悔棋的步數(shù)
String tempText=""; //AI分析的臨時文本信息
static int turn=0; //目前下子方
static int winner=0; //游戲結(jié)果 1:用戶勝 2:AI勝 3:平局
static int userStep=0; //用戶行棋步數(shù)
static int aiStep=0; //AI行棋步數(shù)
static int userFourLine=0; //用戶4子成線數(shù)
static int aiFourLine=0; //AI4子成線數(shù)
static int userThreeLine=0; //用戶3子成線數(shù)
static int aiThreeLine=0; //AI3子成線數(shù)
static int userMultiLine=0; //用戶多線成型數(shù)
static int aiMultiLine=0; //AI多線成型數(shù)
static int forbidStyle=0; //禁手次數(shù)
static int regretTime=0; //悔棋次數(shù)
static int retroSpeed=1000; //回顧演示的速度
static boolean retroSuspend=true; //回顧演示線程標記
ControlThread thread1=new ControlThread();//控制線程對象
RetroThread thread2=new RetroThread(); //回顧演示線程
UserChess user=new UserChess(); //用戶對象
AIChess ai=new AIChess(); //AI對象
AIShow show=new AIShow();//AI分析演示對象
Result result=new Result(); //結(jié)果顯示對象
Information info=new Information(); //關于信息對象
Rule rule=new Rule(); //規(guī)則信息對象
Retrospect retro=new Retrospect(); //回顧演示控制對象
URL url; //資源位置對象
JPanel contentPane;
Canvas canvas = new Canvas();
JPanel jPanel1 = new JPanel();
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenu1 = new JMenu();
JMenu jMenu2 = new JMenu();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem2 = new JMenuItem();
JMenuItem jMenuItem3 = new JMenuItem();
JMenuItem jMenuItem4 = new JMenuItem();
JScrollPane jScrollPane1 = new JScrollPane();
JEditorPane jEditorPane1 = new JEditorPane();
JScrollPane jScrollPane2 = new JScrollPane();
JEditorPane jEditorPane2 = new JEditorPane();
JMenuItem jMenuItem5 = new JMenuItem();
JMenuItem jMenuItem6 = new JMenuItem();
JSplitPane jSplitPane1 = new JSplitPane();
JMenuItem jMenuItem8 = new JMenuItem();
JMenuItem jMenuItem7 = new JMenuItem();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
thread1.start();
thread2.start();
} catch (Exception exception) {
exception.printStackTrace();
JOptionPane.showMessageDialog(null, exception.toString(), "程序面板初始化產(chǎn)生異常", JOptionPane.ERROR_MESSAGE);
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
this.setJMenuBar(jMenuBar1);
this.setResizable(false);
setSize(new Dimension(820, 715));
setTitle("java 五子棋 v2.1");
canvas.setBounds(new Rectangle(15, 15, 630, 630));
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(new Rectangle(660, 30, 135, 601));
jPanel1.setLayout(null);
jMenu1.setText("游戲");
jMenu2.setText("幫助");
jMenuItem1.setToolTipText("程序信息");
jMenuItem1.setText("關于");
jMenuItem1.addActionListener(new Frame1_jMenuItem1_actionAdapter(this));
jMenuItem2.setToolTipText("開始游戲");
jMenuItem2.setText("開始");
jMenuItem2.addActionListener(new Frame1_jMenuItem2_actionAdapter(this));
jMenuItem3.setToolTipText("退出游戲");
jMenuItem3.setText("結(jié)束");
jMenuItem3.addActionListener(new Frame1_jMenuItem3_actionAdapter(this));
jMenuItem4.setToolTipText("五子棋的游戲規(guī)則");
jMenuItem4.setText("規(guī)則");
jMenuItem4.addActionListener(new Frame1_jMenuItem4_actionAdapter(this));
jMenuItem6.setEnabled(false);
jMenuItem6.setToolTipText("恢復到上一步的棋盤狀態(tài)");
jMenuItem6.setText("悔棋");
jMenuItem6.addActionListener(new Frame1_jMenuItem6_actionAdapter(this));
jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
jSplitPane1.setDividerSize(10);
jSplitPane1.setOneTouchExpandable(true);
jSplitPane1.setBounds(new Rectangle(10, 9, 115, 580));
jEditorPane2.setToolTipText("AI表情");
jEditorPane1.setToolTipText("AI分析");
jMenuItem8.setEnabled(false);
jMenuItem8.setToolTipText("查看該局棋的行棋過程");
jMenuItem8.setText("回顧");
jMenuItem8.addActionListener(new Frame1_jMenuItem8_actionAdapter(this));
jMenuItem7.setToolTipText("查看AI分析數(shù)據(jù)");
jMenuItem7.setText("AI數(shù)據(jù)");
jMenuItem7.addActionListener(new Frame1_jMenuItem7_actionAdapter(this));
contentPane.add(canvas, null);
contentPane.add(jPanel1);
jPanel1.add(jSplitPane1);
jMenuBar1.add(jMenu1);
jMenuBar1.add(jMenu2);
jMenu2.add(jMenuItem7);
jMenu2.add(jMenuItem4);
jMenu2.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu1.add(jMenuItem6);
jMenu1.add(jMenuItem8);
jMenu1.add(jMenuItem3);
jSplitPane1.add(jScrollPane2, JSplitPane.TOP);
jSplitPane1.add(jScrollPane1, JSplitPane.BOTTOM);
jScrollPane1.getViewport().add(jEditorPane1);
jScrollPane2.getViewport().add(jEditorPane2);
jEditorPane1.setContentType("text/html");
jEditorPane2.setContentType("text/html");
jSplitPane1.setDividerLocation(100);
jEditorPane1.setText("<html><b>AI分析</b>");
//圖片資源
url=this.getClass().getResource("pic/nb.gif");
aiText1="<html><center><img src="+url+"><br><font color=purple>和我來一局吧</font>";
url=this.getClass().getResource("pic/find.gif");
aiText2="<html><center><img src="+url+"><br><font color=purple>我再想想看</font>";
url=this.getClass().getResource("pic/vic.gif");
aiText3="<html><center><img src="+url+"><br><font color=purple>繼續(xù)加油吧</font>";
url=this.getClass().getResource("pic/dk.gif");
aiText4="<html><center><img src="+url+"><br><font color=purple>再來一局~</font>";
url=this.getClass().getResource("pic/gongxi.gif");
aiText5="<html><center><img src="+url+"><br><font color=purple>和氣生財哈</font>";
url=this.getClass().getResource("pic/why.gif");
aiText6="<html><center><img src="+url+"><br><font color=purple>禁手不算</font>";
url=this.getClass().getResource("pic/music.gif");
aiText7="<html><center><img src="+url+"><br><font color=purple>休息一會</font>";
url=this.getClass().getResource("pic/daxiao.gif");
aiText8="<html><center><img src="+url+"><br><font color=purple>將軍~</font>";
url=this.getClass().getResource("pic/bomb.gif");
aiText9="<html><center><img src="+url+"><br><font color=purple>好險~</font>";
url=this.getClass().getResource("pic/kubi.gif");
aiText10="<html><center><img src="+url+"><br><font color=purple>看招</font>";
url=this.getClass().getResource("pic/mon.gif");
aiText11="<html><center><img src="+url+"><br><font color=purple>貌似有難度</font>";
url=this.getClass().getResource("pic/anwei.gif");
aiText12="<html><center><img src="+url+"><br><font color=purple>慢慢來哈</font>";
url=this.getClass().getResource("pic/df.gif");
aiText13="<html><center><img src="+url+"><br><font color=purple>好累~</font>";
url=this.getClass().getResource("pic/smile.gif");
aiText14="<html><center><img src="+url+"><br><font color=purple>just for fun</font>";
url=this.getClass().getResource("pic/yumen.gif");
aiText15="<html><center><img src="+url+"><br><font color=purple>計算量太大了</font>";
url=this.getClass().getResource("pic/kiss.gif");
aiText16="<html><center><img src="+url+"><br><font color=purple>開小差了</font>";
url=this.getClass().getResource("pic/kk.gif");
aiText17="<html><center><img src="+url+"><br><font color=purple>希望沒bug</font>";
url=this.getClass().getResource("pic/shy.gif");
aiText18="<html><center><img src="+url+"><br><font color=purple>活動一下~</font>";
url=this.getClass().getResource("pic/no.gif");
aiText19="<html><center><img src="+url+"><br><font color=purple>別急~別急~</font>";
url=this.getClass().getResource("pic/yun.gif");
aiText20="<html><center><img src="+url+"><br><font color=purple>棋盤快滿了</font>";
jEditorPane2.setText(aiText1);
}
/**
*
* <p>Title: 類說明</p>
*
* <p>Description: 控制線程類</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author goodboy
* @version 2.1
*/
class ControlThread extends Thread{
public void run(){
try{
while(true){
if(!suspend){ //未選擇暫停
if(turn==1){ //輪到AI下子
board[canvas.userX][canvas.userY]=1;
canvas.board=board;
canvas.repaint();
userStep++;
jMenuItem6.setEnabled(true);
if(checkLine()){ //用戶勝利
suspend=true;
jMenuItem6.setEnabled(false);
jMenuItem8.setEnabled(true);
result.updateData();
result.setVisible(true);
playSound(2);
jEditorPane2.setText(aiText4);
}
else if(checkEqual()){ //平局
suspend=true;
jMenuItem6.setEnabled(false);
jMenuItem8.setEnabled(true);
result.updateData();
result.setVisible(true);
playSound(2);
jEditorPane2.setText(aiText5);
}
else{
clearTable(canvas.userX,canvas.userY);
refreshTable(1); //更新用戶預測表
refreshTable(2); //更新AI預測表
select();
board[aiX][aiY]=2;
canvas.board=board;
canvas.setLast(aiX,aiY);
canvas.repaint();
aiStep++;
if(checkLine()){ //ai勝利
suspend=true;
jMenuItem6.setEnabled(false);
jMenuItem8.setEnabled(true);
result.updateData();
result.setVisible(true);
playSound(2);
jEditorPane2.setText(aiText3);
}
else if(checkEqual()){ //平局
suspend=true;
jMenuItem6.setEnabled(false);
jMenuItem8.setEnabled(true);
result.updateData();
result.setVisible(true);
playSound(2);
jEditorPane2.setText(aiText5);
}
else{ //輪到用戶下子
clearTable(aiX,aiY);
refreshTable(1); //更新用戶預測表
refreshTable(2); //更新AI預測表
//禁手檢測
canvas.setForbid(false);
if(user.maxValue2>1){ //檢測4,4禁手(高優(yōu)先級)
for(int i=0; i<user.number2; i++){
canvas.setForbidLocation(Integer.parseInt(user.maxX2.get(i).toString()), Integer.parseInt(user.maxY2.get(i).toString()));
}
jEditorPane2.setText(aiText6);
}
if(user.maxValue3>1){ //檢測4,4禁手(低優(yōu)先級)
for(int i=0; i<user.number3; i++){
canvas.setForbidLocation(Integer.parseInt(user.maxX3.get(i).toString()), Integer.parseInt(user.maxY3.get(i).toString()));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -