五子棋第一版

public class Board {
    private int[][] b = new int[15][15];
    private boolean blackTurn = true;            // 是否轮到黑方走棋

    /**
     * 绘制棋盘
     * @param g 画笔
     */
    public void draw(Graphics g) {
        g.setColor(Color.BLACK);

        Graphics2D g2d = (Graphics2D) g;
        Stroke oldStroke = g2d.getStroke();        // 记录画笔原来的粗细(保存现场)
        g2d.setStroke(new BasicStroke(5));        // 修改画笔的粗细
        g.drawRect(50, 50, 700, 700);            // 绘制棋盘边框
        g2d.setStroke(oldStroke);                // 将画笔还原为原来的粗细(恢复现场)

        // 绘制横纵线条
        for (int i = 0; i < 13; i++) {
            g.drawLine(50, 100 + 50 * i, 750, 100 + 50 * i);
            g.drawLine(100 + 50 * i, 50, 100 + 50 * i, 750);
        }

        g.fillOval(395, 395, 10, 10);            // 绘制天元
        // 绘制四个星
        g.fillOval(195, 195, 10, 10);
        g.fillOval(595, 595, 10, 10);
        g.fillOval(195, 595, 10, 10);
        g.fillOval(595, 195, 10, 10);

        // 画棋子
        for(int i = 0; i < b.length; i++) {            // 行控制纵坐标
            for(int j = 0; j < b[i].length; j++) {    // 列控制横坐标
                if(b[i][j] != 0) {
                    g.setColor(b[i][j] == 1? Color.BLACK : Color.WHITE);
                    g.fillOval(25 + 50 * j, 25 + 50 * i, 50, 50);
                }
            }
        }
    }

    /**
     * 随机下棋
     */
    public void makeAMove() {
        int row = (int) (Math.random() * 15);
        int col = (int) (Math.random() * 15);
        if(b[row][col] == 0) {
            b[row][col] = blackTurn ? 1 : 2;    // 用数字1表示黑棋用; 数字2表示白棋
            blackTurn = !blackTurn;                // 交换走棋方
        }
    }

}

//游戏窗口

public class MyFrame extends JFrame {
    private Board board = new Board();                    // 创建棋盘类的对象
    private Image offImage = new BufferedImage(800, 800, BufferedImage.TYPE_INT_RGB);

    public MyFrame() {
        this.setTitle("五子棋");                            // 设置窗口标题
        this.setSize(800, 800);                            // 设置窗口宽度和高度
        this.setResizable(false);                        // 设置窗口大小不可改变
        this.setLocationRelativeTo(null);                // 设置窗口居中
        this.getContentPane().setBackground(new Color(200, 185, 25));    // 设置窗口背景色
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);    // 关闭窗口时结束应用程序

        Timer timer = new Timer(1000, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                board.makeAMove();
                repaint();        // 通知操作系统通知你的窗口调用paint方法重新绘制界面
            }
        });
        timer.start();
    }

    @Override
    public void paint(Graphics g) {    // 重写此方法的目的是在窗口上绘制自己想要的东西
        Graphics newG = offImage.getGraphics();
        super.paint(newG);
        board.draw(newG);
        g.drawImage(offImage, 0, 0, 800, 800, null);
    }

}

//游戏运行

public class GameRunner {

    public static void main(String[] args) {
        new MyFrame().setVisible(true);
    }
}
时间: 2024-10-06 18:22:37

五子棋第一版的相关文章

双人组队作业:五子棋

双人组成员:李志刚,刘海威 五子棋作为一款棋类竞技运动在民间十分流行,许多人喜欢玩五子棋,为了熟悉五子棋的规则技巧以及简单的人工智能,决定用JAVA开发五子棋游戏.游戏分为人机对战和人人对战.首先 设计一个15╳15围棋棋盘,由两玩家或人与电脑交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序(黑先白后) 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示.以防不小心点错了. 最后判断某一方是否为五子连珠. 实现一个简单的多用户五子棋的游戏程序,包括

五子棋计算思路

五子棋分为有禁手和无禁手,有禁手就是在无禁手的规则的基础上加上禁手规则,具体是规则不讲了.所以就人机对战来讲,从无禁手来做,比较好做.这里只讲无禁手的情况.无禁手就是只要能连成5个子,或者5个子以上,就算赢.    而计算机博弈要解决的问题,抽象地讲只有一个问题“下一步怎么走”,对五子棋来讲,就是下一步在哪个点落子.一般的思路在 棋类人机对战的一般原理 - BillySir - 博客园  已经有说.下面重点讲五子棋特有的算法思路. 下一步怎么走,总体思路:    1.如果下一步能赢,就走这一步 

结对-五子棋游戏-开发环境搭建过程

项目名称:五子棋游戏 参加项目人员:李一轩.程吉 环境搭建:下载HBuilder软件,下载Google浏览器:依次安装即可使用

五子棋C++实现

#include<iostream> #include<iomanip> #include<cstdlib> #include<cstdio> #include<string.h> using namespace std; const int X = 21; //棋盘行数 const int Y = 21; //棋盘列数 char p[X][Y];  //定义棋盘 int m=0;//定义临时点,保存输入坐标 int n=0; void disp

简单程序设计-五子棋

<程序设计-五子棋> 作者:蜡笔小黑(原创博文,转载请说明) 前言:很多刚刚接触编程的人都不知道怎么下手编写程序,特别是学习了新的知识点,不知道有什么用,那么本文将以简单的存储结构及简单的运算,条件语句,分支语句,循环语句结合,带来一个双人对战版五子棋,这是一个简单的模型,实现了五子棋最最基本的功能,还有好多地方需要补全,如边界问题,设计问题,游戏逻辑问题,希望读者阅读后能够注意,通过自己的努力来完善它,还能扩展各种功能,如悔棋,网络对战等,有时候写程序和小生命一样,慢慢会成长,而我们作为&q

人机ai五子棋 ——五子棋AI算法之Java实现

人机ai五子棋 下载:chess.jar (可直接运行) 源码:https://github.com/xcr1234/chess 其实机器博弈最重要的就是打分,分数也就是权重,把棋子下到分数大的地方,我获胜的概率就更大. 而在下棋过程中,大部分的点的得分都很小,或者接近,因此无需对每一个点都打分,只需要在我方附近(进攻)或者敌方附近(防守)的几个点进行打分. 具体原理大家可以看源码中的注释,说明的很清楚. 参考 http://blog.csdn.net/pi9nc/article/details

五子棋游戏:使用javascript

文件夹建立: UI image logo.jsp yw.jsp cw.jsp js script.js css style.css index.html index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>五子棋游戏</title>     <link rel="styl

团队项目:五子棋

五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜. 棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一.主要流行于华人和汉字文化圈的国家以及欧美一些地区,是世界上最古老的棋. 容易上手,老少皆宜,而且趣味横生,引人入胜:不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性.已在各个游戏平台有应用.

android程序----&gt;android五子棋的实现

在慕课网上学习了五子棋的课程,感觉挺不错.然后自己写了个关于五子棋的android程序,从中还是能够学习到很多东西的.现在我们开始今天五子棋程序的编写历程.程序的源码请参见友情链接: 目录导航 一些前期做准备的代码 自定义棋盘的View 保存残局并恢复棋局 判断游戏是否结束的算法 友情链接 好了,我们现在开始一步步的构建出项目来,首先是如下的项目结构图: 运行的效果图: 一些前期做准备的代码 一. 主活动类MainActivity,在菜单中加入了再来一局的功能: public class Mai