📄 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]; //棋盘数据 0:无棋子 1:用户棋子 2:AI棋子
int time=0;; //游戏时间
boolean suspend=true; //是否暂停
int aiX, aiY; //AI下子坐标
Random rand=new Random(); //随机数对象
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; //可以悔棋的步数
String tempText=""; //AI分析的临时文本信息
static int turn=0; //目前下子方
static int winner=0; //游戏结果 1:用户胜 2:AI胜 3:平局
static int userStep=0; //用户行棋步数
static int aiStep=0; //AI行棋步数
static int userFourLine=0; //用户4子成线数
static int aiFourLine=0; //AI4子成线数
static int userThreeLine=0; //用户3子成线数
static int aiThreeLine=0; //AI3子成线数
static int userMultiLine=0; //用户多线成型数
static int aiMultiLine=0; //AI多线成型数
static int forbidStyle=0; //禁手次数
static int regretTime=0; //悔棋次数
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(); //结果显示对象
Information info=new Information(); //关于信息对象
Rule rule=new Rule(); //规则信息对象
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(), "程序面板初始化产生异常", 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("结束");
jMenuItem3.addActionListener(new Frame1_jMenuItem3_actionAdapter(this));
jMenuItem4.setToolTipText("五子棋的游戏规则");
jMenuItem4.setText("规则");
jMenuItem4.addActionListener(new Frame1_jMenuItem4_actionAdapter(this));
jMenuItem6.setEnabled(false);
jMenuItem6.setToolTipText("恢复到上一步的棋盘状态");
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分析数据");
jMenuItem7.setText("AI数据");
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>继续加油吧</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禁手(高优先级)
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禁手(低优先级)
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 + -