五子棋,是我们大家都喜爱玩的智力棋类游戏,在学完了界面以及绘图之后便一直想做一个,如今终于如愿以偿,虽然还没有更好的美化该游戏,但是大局已定。高兴!

五子棋我们需要很多常量,比如说棋子的大小,棋盘格子的间距,棋盘行列的其实位置。所以我们需要首先定义一个借口来存储这些常量,以便我们能更好的使用它,以及更快捷的改变其值的大小。

package com.czh130708;

public interface Config {

public static final int x=45;

public static final int y=45;//x,y的起始位置

public static final int row=15;

public static final int columns=15;

public static final int csize=30;

public static final int size=45;

public static final int[][] chess = new int[row][columns];

}

其次我们要定义一个棋盘界面,该界面类继承了JFrame。在该类中我们获取了画布,实例化了鼠标事件对象。重写了paint方法,并在该方法中调用了画棋盘的方法,以及棋子和棋盘的重绘方法。

package com.czh130708;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class MyDraw extends JFrame{

Graphics g;

public static void main(String [] args){

MyDraw dl = new MyDraw();

dl.initUI();

}

private void initUI() {

this.setName("五子棋");

this.setSize(1100,730);//设置窗口大小

this.setDefaultCloseOperation(3);

this.setLocation(00,00);//设置窗口位置

this.setVisible(true);

this.g=this.getGraphics();

ChessL cl=new ChessL(g);

this.addMouseListener(cl);

}

public void paint(Graphics g){

//调用父类的重绘方法

super.paint(g);

drawChessTable(g);

draw(g);

}

public void drawChessTable(Graphics g){

//绘制棋盘

super.paint(g);

//绘制15条横线

for(int i=0;i

五子棋游戏的重中之重我觉得就是两个人交互下棋的方法定义。

首先我们要获得鼠标事件发生时,所得到的位置,并循环遍历棋盘,得到该位置最接近的横纵直线的焦点位置,并在该位置上画上一颗棋子。

当下第二颗棋子时,颜色不能与上一颗一样,并且切记已经下过棋子的地方不能再次下棋,所以我们需要一个数组来记住所有下过棋子的地方,并且给该位置设置一个权值,该权值会记住该位置下的是黑棋还是白旗。

判定胜负方式也是重点。因为我们需要判断横向斜向纵向每一条线上是否有五颗棋子相连,若有五颗棋子相连则提示胜出!

在棋子重绘的方法中我们也会用到数组。

五子棋的代码实现如下!

package com.czh130708;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;

public class ChessL extends MouseAdapter {

private Graphics g;

private int c=0;//计数器

public ChessL(Graphics g) {

this.g=g;

}

//定义一个鼠标监听器

public void mouseReleased(MouseEvent e){

int x1 = e.getX();

int y1 = e.getY();

for(int i=0;ix-Config.size/3 && x1 < x+Config.size/3 && y1>y-Config.size/3 && y1=0;i--){

if(Config.chess[i][y]==Config.chess[x][y]){

count++;

}

else{

break;

}

}

if(count>=5){

JOptionPane.showMessageDialog(null,

"大神,你胜利了");

}

return count;

}

//检查纵向是否有五子相连

public int checkcolumns(int x,int y){

int count=0;

for(int i=y;i=0;i--){

if(Config.chess[x][i]==Config.chess[x][y]){

count++;

}

else{

break;

}

}

if(count>=5){

JOptionPane.showMessageDialog(null,

"大神,你胜利了");

}

return count;

}

//斜向方向是否有棋子

public int checkrowc(int x,int y){

int count=0;

for(int i=x,j=y;i=0&&j>=0;i--,j--){

if(Config.chess[x][y]==Config.chess[i][j]){

count++;

}

else{

break;

}}

if(count>=5){

JOptionPane.showMessageDialog(null,

"大神,你胜利了");

}

return count;

}

public int checkrcolumns(int x,int y){

int count=0;

for(int i=x,j=y;i=0;i++,j--){

if(Config.chess[x][y]==Config.chess[i][j]){

count++;}

else{

break;

}}

for(int i=x-1,j=y+1;i>=0&&j=5){

JOptionPane.showMessageDialog(null,

"大神,你胜利了");

}

return count;

}

}

JAVA权值法实现五子棋_java游戏之 五子棋实现人人对战!相关推荐

  1. 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  2. 五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  3. 权值法实现五子棋AI

    权值法实现五子棋AI 前言 五子棋AI,能根据棋盘局势判断棋子应落在何处获胜,主要有权值法和博弈树法两种实现方案.本篇博客将就权值法展开介绍,笔者水平有限,望各路大神有所建议评论提出,谢谢. 权值法 ...

  4. 简易五子棋AI权值法(2)

    简易五子棋&AI权值法(2) 权值法 权值法实现AI,就是给每个无子的地方给一个权值,然后选出权值最大的让电脑落子. 具体到每个位置,权值根据周围一定范围的落子情况给出. 就我的想法来说,我觉 ...

  5. java五子棋博弈,五子棋(人機對弈)——Java權值法五子棋博弈

    五子棋人機博弈 五子棋,人與人之間博弈,我們不用考慮太多,都是玩家自動思考. 但是如果我們要玩一個單機的五子棋,實現人機的對戰,那么我就得"幫"電腦考慮下走哪步了. 實現的方法大概 ...

  6. java设计五子棋_JAVA课程设计+五子棋(团队博客)

    JAVA课程设计 利用所学习的JAVA知识设计一个五子棋小游戏 1.团队名称.团队成员介绍(菜鸟三人组) 杨泽斌[组长]:201521123049 网络1512 叶文柠[组员]:20152112305 ...

  7. java设计五子棋_JAVA课程设计(五子棋)--个人博客

    JAVA课程设计(五子棋)--个人博客(李金妲) 1.题目及我负责的内容 1.1题目:五子棋 1.2负责内容:游戏界面的GUI设计.背景音乐功能.趣味对战算法实现 2.本人负责的主要功能展示与代码截图 ...

  8. 前端实现五子棋小游戏1(本地双人对战)

    运用canvas写一个本地五子棋小游戏 HTML部分 JS 部分 CSS 部分 实现效果 HTML部分 <!DOCTYPE html> <html lang="en&quo ...

  9. java 五子棋_java实现联机五子棋

    a.jpg Config.xml ~ 122B <?xml version='1.0' encoding='UTF-8'?>5088 Main.java ~ 112B import pan ...

最新文章

  1. Android Studio 第一次配置及其使用
  2. unable to access ‘https://gitee...‘: Failed to connect to 127.0.0.1 port 31181 after 2029 ms: Connec
  3. 阿里推荐的Redis使用规范,Redis就要这么用
  4. 自己定义九宫格手势解锁
  5. 栏目图片 栏目描述_昕街拍|长期福利栏目来啦,秀街拍赢礼品!
  6. 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
  7. 一个servlet,多个dwr.xml配置文件
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的婚纱影楼摄影网站
  9. jQuery点击图片弹出大图遮罩层
  10. ubuntu下搭建车场环境(代码使用jekins构建)
  11. Leetcode. 14. Longest Common Prefix
  12. Android音视频之协议介绍
  13. 32位oracle10,『三思笔记』-- Solaris10下安装32位Oracle10g -- Solaris 10下安装ORACLE10G
  14. 计算机的冷门知识课件,PPT竟然还能这么玩!7组超实用冷门PPT小技巧
  15. txt 文本文件替换快捷键
  16. win7 变wifi热点
  17. PS打造唯美冷色调照片
  18. idea 2019.2顶部菜单栏隐藏的恢复办法
  19. 【连麦demo】信令
  20. 微信分享之SPA的坑

热门文章

  1. ERP系统:帮助企业实现一体化管理
  2. Linux中的sudoers没有root ALL=(ALL) ALL这一行
  3. 我们为什么需要技术论坛?
  4. linux中sfewfesfs病毒删除记
  5. 山东大学暑期项目实训——云主机服务比价与预测系统
  6. GOF23(3)之建造者模式(创建型模式)
  7. 2015移动开发之iOS回顾
  8. 聚集搜索引擎java实现
  9. 基于YoloV3卫星图像的储油罐容积占用率研究
  10. MIME---multipart类型