最近自己编了一个四子棋的游戏。说明如下:

游戏简介: 一种常见的四子棋游戏,可以是人机对战,两人对战,或者网上对战.
游戏的双方轮流落子,每人持有21颗子.棋子共有6*7个位置,玩家的棋子总是落到
当前列的最底处.当落子后,在横,竖,正斜或着反斜方向上连成4子时,当前玩家则
胜利.当所有子均用完时,游戏结束.
类的说明:
com.lilijun.game.bingo.ui:
GameUI:  游戏的主界面

com.lilijun.game.bingo.util:
GameCtroller:包含启动游戏,终止游戏等常用操作
GameTable: 游戏数据,用来判断胜利,结束等
TestWin: 提供了判断游戏胜利的算法

com.lilijun.game.bingo.player:
Player: 所有玩家的抽象类
AIPlayer:代表电脑角色的玩家,能自动取最优的选择
ManPlayer:代表人的玩家
NetPlayer:网络上的对手

目前只能是单机游戏,双人玩。网络游戏待研究。代码会在后面随后给出

主程序:

/** */ /**
 * created on 2006-10-1
 * TO Do to create a bingo game user interface
 */
package  com.lilijun.game.bingo.ui;

import  javax.swing.SwingUtilities;
import  javax.swing.JPanel;
import  javax.swing.JFrame;
import  java.awt.Rectangle;
import  javax.swing.JButton;
import  javax.swing.JLabel;
import  javax.swing.BorderFactory;
import  javax.swing.border.BevelBorder;
import  javax.swing.JOptionPane;
import  java.awt.event. * ;
import  java.util. * ;

import  com.lilijun.game.bingo.player. * ;
import  com.lilijun.game.bingo.util.GameTable;
/** */ /**
 * @author Administrator
 *
 */
public   class  MainUI  extends  JFrame  implements  Observer ... {

    private static final long serialVersionUID = 1L;
    private boolean begin = false;
    private boolean isPlayer1Now = true;

    private JPanel jContentPane = null;

    private JPanel jPanel1 = null;

    private JButton jButtonBegin = null;

    private JButton jButtonQuit = null;

    private JPanel jPanel3 = null;

    private JLabel jLabel = null;

    private JLabel jLabel2 = null;

    private JLabel jLabel3 = null;

    private JLabel jLabel4 = null;

    private JPanel jPanel2 = null;

    private Player player1 = null;  //  @jve:decl-index=0:
    
    private Player player2 = null;  //  @jve:decl-index=0:
    
    /** *//**
     * This method initializes jPanel1    
     *     
     * @return javax.swing.JPanel    
     */
    private JPanel getJPanel1() ...{
        if (jPanel1 == null) ...{
            jPanel1 = new JPanel();
            jPanel1.setLayout(null);
            jPanel1.setBounds(new Rectangle(-1, 0, 115, 231));
            jPanel1.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
            jPanel1.add(getJButtonBegin(), null);
            jPanel1.add(getJButtonQuit(), null);
        }
        return jPanel1;
    }

    /** *//**
     * This method initializes jButtonBegin    
     *     
     * @return javax.swing.JButton    
     */
    private JButton getJButtonBegin() ...{
        if (jButtonBegin == null) ...{
            jButtonBegin = new JButton();
            jButtonBegin.setBounds(new Rectangle(17, 136, 74, 23));
            jButtonBegin.setText("begin");
            jButtonBegin.addActionListener(new ActionListener()...{
                public void actionPerformed(ActionEvent e)...{
                    beginGame();
                }
            });
        }
        return jButtonBegin;
    }

    /** *//**
     * This method initializes jButtonQuit    
     *     
     * @return javax.swing.JButton    
     */
    private JButton getJButtonQuit() ...{
        if (jButtonQuit == null) ...{
            jButtonQuit = new JButton();
            jButtonQuit.setBounds(new Rectangle(18, 175, 72, 25));
            jButtonQuit.setText("quit");
            jButtonQuit.addActionListener(new ActionListener()...{
                public void actionPerformed(ActionEvent e)...{
                    endGame();
                    System.exit(0);
                }
            });
        }
        return jButtonQuit;
    }

    /** *//**
     * This method initializes jPanel3    
     *     
     * @return javax.swing.JPanel    
     */
    private JPanel getJPanel3() ...{
        if (jPanel3 == null) ...{
            jLabel4 = new JLabel();
            jLabel4.setBounds(new Rectangle(3, 75, 30, 25));
            jLabel4.setText("false");
            jLabel3 = new JLabel();
            jLabel3.setBounds(new Rectangle(3, 40, 30, 27));
            jLabel3.setText("true");
            jLabel2 = new JLabel();
            jLabel2.setBounds(new Rectangle(38, 73, 50, 27));
            jLabel2.setText("玩家2");
            jLabel = new JLabel();
            jLabel.setText("玩家1");
            jLabel.setBounds(new Rectangle(38, 39, 50, 25));
            jPanel3 = new JPanel();
            jPanel3.setLayout(null);
            jPanel3.setBounds(new Rectangle(371, 0, 94, 234));
            jPanel3.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
            jPanel3.add(jLabel, null);
            jPanel3.add(jLabel2, null);
            jPanel3.add(jLabel3, null);
            jPanel3.add(jLabel4, null);
        }
        return jPanel3;
    }

    /** *//**
     * This method initializes jPanel2    
     *     
     * @return bingo.ui.ChessBoardPanel    
     */
    private JPanel getJPanel2() ...{
        if (jPanel2 == null) ...{
            jPanel2 = new ChessBoardPanel();
            jPanel2.setBounds(new Rectangle(114, 0, 258, 231));
            jPanel2.addMouseListener(new MouseAdapter()...{
                public void mouseClicked(MouseEvent e)...{
                    int mouseX = e.getX();
                    //int mouseY = e.getY();
                    int i = mouseX/(jPanel2.getWidth()/7);
                    //int j = mouseY/jPanel2.getHeight();
                    if(begin)...{
                        if(isPlayer1Now)...{ 
                            getPlayer1().putChess(i);
                            isPlayer1Now = !isPlayer1Now;
                            jLabel3.setText(""+false);
                        }
                        else ...{
                            getPlayer2().putChess(i);
                            isPlayer1Now = !isPlayer1Now;
                            jLabel4.setText(""+true);
                        }
                    }
                    jPanel2.repaint();
                }
            });
        }
        return jPanel2;
    }
    
    /** *//**
     * This method initializes player1
     * 
     * @return bingo.player.Player
     */
    private Player getPlayer1() ...{
        if (player1 == null)...{
            player1 = new ManPlayer();
        }
        return player1;
    }
    
    /** *//**
     * This method initializes player2
     * 
     * @return bingo.player.Player
     */
    private Player getPlayer2() ...{
        if (player2 == null)...{
            player2 = new ManPlayer();
        }
        return player2;
    }
    
    /** *//**
     * @param args
     */
    public static void main(String[] args) ...{
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() ...{
            public void run() ...{
                MainUI thisClass = new MainUI(GameTable.getInstance());
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }
     
    /** *//**
     * This is the default constructor
     */
    public MainUI(GameTable gameTable) ...{
        super();
        gameTable.addObserver(this);
        
        initialize();
    }

    /** *//**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() ...{
        this.setSize(475, 265);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }

    /** *//**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() ...{
        if (jContentPane == null) ...{
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJPanel1());
            jContentPane.add(getJPanel3());
            jContentPane.add(getJPanel2());
        }
        return jContentPane;
    }
    /** *//**
     * TO DO to begin the game
     */
    private void beginGame()...{
        getPlayer1().beginGame();
        getPlayer2().beginGame();
        isPlayer1Now = true;
        begin = true;
    }
    /** *//**
     * TO DO to end the game
     */
    private void endGame()...{
        player1.endGame();
        player2.endGame();
        begin = false;
    }
    /** *//**
     * 
     */
    public void update(Observable ob,Object arg)...{
        if(isPlayer1Now) ...{
            JOptionPane.showMessageDialog(null,"Player1 win!!!");
        }
        else...{
            JOptionPane.showMessageDialog(null,"Player2 win!!!");
        }        
        beginGame();
    }
}    //   @jve:decl-index=0:visual-constraint="26,29"

四子棋游戏--bingo game相关推荐

  1. python人机对战的实验步骤_人机对战初体验:Python实现四子棋游戏

    继去年3月人机大战引发全球瞩目以来,围棋AI(人工智能)再度引发跨领域的关注:一个叫Master的围棋AI,几天时间,面对中日韩顶尖职业围棋选手,已取得60胜0败的恐怖战绩,展现出的围棋技艺已经到了人 ...

  2. 人机对战初体验:Python基于Pygame实现四子棋游戏

    人机对战初体验-四子棋游戏 继去年3月人机大战引发全球瞩目以来,围棋AI(人工智能)再度引发跨领域的关注:一个叫Master的围棋AI,几天时间,面对中日韩顶尖职业围棋选手,已取得60胜0败的恐怖战绩 ...

  3. 深圳大学计系汇编语言实验--四子棋游戏

    题面 四子棋是个双人游戏,两人轮流下棋,棋盘由行和列组成的网格,每个选手每次下一个子直到两人中有一人的棋子连成一条水平线.垂直线或者是对角线. 本实验需要在LC-3中实现简易版四子棋的游戏,两位选手通 ...

  4. 北京工业大学 大一C语言课程设计--四子棋(Bingo)(连子游戏)in TurboC 3.0

          连子游戏设计报告书                               2009年12月 目录页 目录 1 需求分析... 3 1.1功能与数据需求... 3 1.1.1题目要求的 ...

  5. [源码和文档分享]基于蒙特卡洛信心上限搜索树UTC算法的四子棋游戏

    1 实验任务简介 在M行N列的棋盘中,棋手每次只能在每一列当前的最底部落子,如果某一列已经落满,则不能在该列中落子,目标是在横向.纵向.两个斜向共四个方向中的任意一个方向上,使自己的棋子连成四个(或四 ...

  6. 四子棋 java_java智能四子棋人机大战游戏设计(附项目,以及原创PSD,设计文档)...

    本项目是使用java技术+自创"假设下子"算法开发的人机大战四子棋游戏客户端. 具体项目,以及原创PSD,设计文档,在文件末尾的百度云连接. 一. 小组说明: 组名:CST 组长: ...

  7. 【华为OD】社招算法真题:四子棋连,下棋后,棋子会落到最底部,实现一行、一列或者一条对角线 上有四个相同颜色的棋子,获胜

    四子棋 (游戏:四子连)四子连是一个两个人玩的棋盘游戏,在游戏 中,玩家轮流将有颜色的棋子放在一个m行n列的垂直悬挂的 网格中,如下所示. 这个游戏的目的是在对手实现一行.一列或者一条对角线 上有四个 ...

  8. java四子棋实验报告_Python 实现劳拉游戏的实例代码(四连环、重力四子棋)

    游戏规则:双方轮流选择棋盘的列号放进自己的棋子, 若棋盘上有四颗相同型号的棋子在一行.一列或一条斜线上连接起来, 则使用该型号棋子的玩家就赢了! 程序实现游戏,并将每局的数据保存到本地的文件中 首先我 ...

  9. 基于LC3模拟器的简单游戏设计:简易四子棋

    一.实验目的 分析和理解指定的需解决问题. 利用LC-3的汇编代码设计实现相关程序. 通过LC-3仿真器调试和运行相关程序并得到正确的结果. 二.实验内容 四子棋是一款普遍流行的简易型桌面游戏,据说, ...

最新文章

  1. 最全Python算法实现资源汇总!
  2. python ctypes教程_Python ctypes: Python file object - C FILE * | 易学教程
  3. POPUP_GET_VALUES
  4. 测试串行回收与堆初始值有关系01
  5. 小白Linux下安装mysql
  6. 第一段冲刺 站立会议 5.6
  7. ORCALE常用查询语句
  8. HTML期末大作业~海贼王大学生HTML网页制作10个页面作品(HTML+CSS+JavaScript)
  9. 易基因|典型案例:MeRIP-seq综合分析肺腺癌中的转录组m6A甲基化组
  10. python 根据名称获取pid_python 使用标准库根据进程名获取进程的pid
  11. 最新电脑cpu性能排行服务器,服务器cpu性能排行,教您服务器cpu性能排行
  12. 基于html的旅游网站的设计与实现
  13. MTK,QAC运用minicom和tftp进行uboot
  14. 搬:90 个名企笔试题和算法题
  15. 贪吃蛇大作战ai_当玩家发现《贪吃蛇大作战》是单机游戏后 世界都炸了
  16. 408计算机专业统考哪些科目,408计算机考研统考科目难度分析-计算机操作系统...
  17. 围观手机游戏: 一场还没准备好的全民冲锋
  18. es6 class 跟普通function的区别
  19. 香港主机托管:什么是主机服务器托管?
  20. 十八、部署 Vue.js 项目到生产环境

热门文章

  1. 《如何高效学习》思维导图
  2. PPT!智能工厂总体规划及实施指南
  3. Spring-SpringMVC-Mybatis项目学习
  4. [献给用智能ABC输入法的人]永恒的经典 智能ABC输入法技巧大集合.txt
  5. 加油站以后还能叫加油站吗?
  6. 【RedisTemplate】
  7. CarSim仿真快速入门(二十三)-CarSimSimulink联合仿真中的 S-Function模块
  8. 图解LeetCode——799. 香槟塔(难度:中等)
  9. 加密内容以便保护数据无法勾选?
  10. 锁定计算机 k 是什么意思,计算机中的K、M、G、T到底指的是