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

📄 frame1.java

📁 java 五子棋 v2.1 Java源码。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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 + -