java五子棋棋型(java五子棋的实现)

今天给各位分享java五子棋棋型的知识,其中也会对java五子棋的实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、java五子棋怎么画ER图2、java五子棋源代码判断输赢,希望帮忙指出错误并完善3、五子棋棋盘java实现4、JAVA单机版五子棋怎么写5、五子棋的Java算法

java五子棋怎么画ER图

先画正方形,然后画两条对折线完成。

第一步、我们先来画一画五子棋的棋盘,画出一个棋盘,画一个四方形。

第二步、接着我们画一画棋盘的棋盘格,横横竖竖的横要平,竖要直溜溜。

第三步、接着我们画出棋盘里面的棋子,黑色和白色的棋子就完成啦。

java五子棋棋型(java五子棋的实现)

java五子棋源代码判断输赢,希望帮忙指出错误并完善

可以建立一个二维数组的数据结构:

int[][] ISFIVE = {

{2,2,1,1,1,1,1,2,2},

{1,1,1,1,1,2,2,2,2},

{2,1,1,1,1,1,2,2,2},

{2,2,2,1,1,1,1,1,2},

{2,2,2,2,1,1,1,1,1}

};

中间那个就是目前下子的位置,1表示和目前子相同颜色,2表示任意。0表示必须是空子,才合格,比如

int[][] ISFOUR = { {0,1,1,1,1,0,2,2,2},

{2,0,1,1,1,1,0,2,2},

{2,2,0,1,1,1,1,0,2},

{2,2,2,0,1,1,1,1,0}

};以上的二维数组中的数组都是属于活四,必胜棋型了。按照这个方法可以描绘出所有棋型。

关于你说的斜线部分,其实变通一下,就是数组的旋转而已,比如X,Y是当前落子的坐标,它的横向 就是 int[] temp= new int[9];

for(int i=-4;i=4;i++){

temp[i+4] = qipan[x+i][y];

}

纵向就是

for(int i=-4;i=4;i++){

temp[i+4] = qipan[x][y+i];

}

其实规律可以加入方向因子来解决,p,q的值为[1,0]表横向,[0.1]表纵向,[1,1]和[-1,-1]表两个斜向。

for(int i = -4;i=4;i++){

temp[i+4] = qipan[x+p*i][y+p*i]

}

这个temp数组和上面的二维数组比较,合格就是那个棋型,就能得到4个走向的棋型。我的思路大致是这样,具体AI的设计就不一一细说了。

五子棋棋盘java实现

其实我也有用JAVA做五子棋呢~,棋盘都是用画的,我把代码发下,你自己试下,也不定合你一意.事件代码我都去啦,因为是简单的麻烦事.~!

import java.awt.*;

import javax.swing.*;

@SuppressWarnings(“serial”)

public class ChessBoard extends JPanel{

/*

* 制作棋盘的宽高;

*/

public static final int BOARD_WIDTH=515;

/*

* 计算棋盘表格坐标(单元格宽高相等)

*/

public static int [] location=new int[22];

static{

for(int i=0,WIDTH=30;ilocation.length;i++,WIDTH+=22){

location[i]=WIDTH;

}

}

public ChessBoard(int x,int y){

super(null);

this.setBounds(x, y, BOARD_WIDTH, BOARD_WIDTH);

this.setBackground(new Color(255, 164, 85));

}

/**

* 重写方法,绘制棋盘表格图;

*/

public void paintComponent(Graphics g){

super.paintComponent(g);

char ch=’A’;

g.setFont(new Font(“宋体”,Font.BOLD,12));

//画横线

for(int i=0,width=30+22*21;ilocation.length;i++,ch++){

g.setColor(Color.black);

g.drawLine(30,location[i],width,location[i]);

g.setColor(Color.blue);

g.drawString(“”+ch,5,location[i]+3);

}

//画竖线

for(int i=0,width=30+22*21;ilocation.length;i++){

g.setColor(Color.black);

g.drawLine(location[i],30,location[i],width);

g.setColor(Color.blue);

g.drawString(“”+(i+1),location[i]-3,13);

}

}

}

JAVA单机版五子棋怎么写

界面思路:

用按钮数组模拟棋盘。

改变按钮的背景图片标志这个棋盘的格子上是黑棋、白棋、空。同时使用一个二维数组记录棋盘棋子的分布,比如qipan[0][0]=1标示第1行第一列的棋子是黑棋子,乙烯类推。

循环检测是否某行、某列、某斜线上是否已经有五个颜色相同的棋子。

简单的算法就是判断某行、某列、某斜线的妻子数目那个最多。通过2个for循环遍历棋盘。

复杂的算法,你看看下面的参考资料,不过下面这段材料如果看不懂的话,用简单的算法实现了五子棋也是很好的了,^_^

五子棋算法(AI)

任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描

整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三

个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:

gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3

gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4

在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:

Const DIR_UP = 1

Const DIR_UPRIGHT = 2

Const DIR_RIGHT = 3

Const DIR_RIGHTDOWN = 4

Const DIR_DOWN = 5

Const DIR_DOWNLEFT = 6

Const DIR_LEFT = 7

Const DIR_LEFTUP = 8

这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:

———

———

—oo—-

-ox*xx—

———

———

图中的*点从标为(4,4),(打*的位置是空位),则:

gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1

gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2

gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2

gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3

一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的

棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出

来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。然而,对各种棋型应该取什么值呢?我们可以先作如下假设:

Fn 表示先手n个棋子的活棋型,如:F4表示先手活四

Fn’表示先手n个棋子的冲棋型,如:F4’表示先手冲四

Ln 表示后手n个棋子的活棋型,如:L3表示后手活三

Ln’表示后手n个棋子的冲棋型,如:L3’表示后手冲三

.

.

.

根据在一行中的棋型分析,得到如下关系:

L1’=F1’L2’=F2’=L1F1L2F2L3’=F3’L4’F4’=F4

从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下

棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4*F3L4’这个关系,同样,我们还可以得到其它的关系,如:4*F2L3、4*L3F3…,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1’值定为1,则我们就得

到了下面各种棋型的分值,由C语言表示为:

F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};

L[2][5]={{0,1,5,50,3750},{0,10,30,150,4000}};

F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2’对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二

个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分

值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。

五子棋的Java算法

五子棋的算法是比较简单的。

把棋盘当作一个 2 维数组。 用2维数组来当作棋盘的坐标系

当落子 之后。 把落子,插入到 数组中 获得 棋盘 的数组, 循环刚才数组, 判断,

刚才 数组元素 的 横向坐标 -5 到刚才 数组元素坐标 + 5 是否都是 一个数字(黑子代表 1 ,白子代表0) 只要其中 有连续 5个 都是 黑子,或者白子, 则黑子或白子 赢了。

判断,刚才元素 纵向坐标 -5 到 + 5 如上判断。

判断 右斜线。 判断 横向坐标 -5 y -5 到 横向坐标 + 5 y + 5

判断 y + 5 x + 5 到 y-5 x -5

简单来说。

用2维数组 来代表 棋盘 , 每次在 界面上, 由白子,或黑子 落子之后, 在数组相应坐标,放入 1 或者0 。

然后循环数组判断, 数组横向 竖向 右斜线 左斜线 是否是 黑子或者白子 连续的。 如果是,则获胜。

java五子棋棋型的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java五子棋的实现、java五子棋棋型的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月1日 23:06:45
下一篇 2024年4月1日 23:14:04

相关推荐

  • java引入数学计算,java如何进行数学计算

    java定义一个实现常用数学运算的类MyMath }//四个普通方法public void max(){};…}之后在另一个主类的main方法中,new一个MyMath类,调用方法。 Math类是Java点的编程工具类提供了许多数学计算相关的方法。下面是Math类中常用的方法及其解释:abs(double a):返回参数的绝对值。ceil(dou…

    2024年5月20日
    3400
  • java如何获取json数据,java 读取 json

    java怎么得到json中的数据 1、在Java中,可以使用Jackson库将Java对象转换为JSON格式。 2、你好,Java读取json数据格式,你只需要使用JsonStore 等等工具包即可进行便捷的读取了。代码比较简单,通俗易懂,具体JsonStore可以百度一下详细信息。 3、jsonobj); //可以将json对象转换成json对符串 的第二…

    2024年5月20日
    3800
  • 配置java环境变量无效,配置java环境变量无效怎么解决

    为什么每次重启电脑后之前配置好的java环境变量都会失效,必须重新配置… 检查环境变量是否正确设置:打开“控制面板”-“系统和安全”-“系统”-“高级系统设置”-“环境变量”,确认环境变量是否正确设置。 你的环境变量配置的有问题,你重新配置一下,我也一直用的都是1的,一年多了。 你的JAVA_HOME环境变量设置不对,如上图;另外还需要设置一下c…

    2024年5月20日
    3500
  • java上传图片命名,java上传图片到文件服务器

    java实现文件批量上传是否需要将文件重命名(包括图片,word文档,录音… 只需要改动几个地方而已即可。首先是上传页面,由于要上传多个文件,所以就必须有多个供用户选择的文件框,然后修改Action,把action中属性的类型修改为list。 概述在最初的 http 协议中,没有上传文件方面的功能。 rfc1867 (http://)为 http…

    2024年5月20日
    3500
  • java初始化static变量,java怎样初始化变量

    java类中的静态变量是什么时候初始化的 1、静态初始化块:当类第一次加载时执行。非静态初始化块:非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被执行。区别如下:执行次数不同 静态块只执行一次,初始化块可以执行多次。 2、静态方法是你手动调用的时候执行。静态变量与类一起加载,最优先的。然后是,静态初始化器(只初始化静态成员变量)。然后是,属性…

    2024年5月20日
    3700
  • java超卖,java编程超市打折

    上海哪里有周末java培训班 1、上海java培训机构【达内教育】的最可靠,【达内教育】是引领行业的职业教育公司,致力于面向IT互联网行业培养人才,达内大型T专场招聘会每年定期举行,为学员搭建快捷高效的双选绿色通道。 2、各地各式各样的Java培训班有很多。不过业余学习培训Java开发的,能教的好的那真是少。 3、Java培训推荐选择【达内教育】,达内“因材…

    2024年5月20日
    3400
  • java动态代理视频,java动态代理使用

    JAVA动态代理解析 1、OverviewJava在java.lang.reflect包下,定义了自己的代理。利用这个包下的类,我们可以在运行时动态地创建一个代理类,实现一个或多个接口。并将方法的调用转发到你所指定的类。 2、这句话的意思是,在Java中,动态代理(java.lang.reflect.Proxy)主要用于在编译时无法确定要实现的接口或者需要在…

    2024年5月20日
    3400
  • 二分查找递归java,二分查找递归代码

    用递归的方式实现二分查找 1、在节点B处,取数组中间位置mid作为比较的基准点。然后节点C与目标值target比较大小,如果相等则返回true表示找到了目标值,否则继续往下查找。 2、二分查找又叫折半查找,但是有一个前提条件,就是你要查找的数据必须是按顺序储存,以关键字大小来排列的。 3、折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如…

    2024年5月20日
    3700
  • java可变int数组,java可变变量

    java如何将byte类型数组变成int类型的数组? 这里简单记录下两种转换方式:第一种:int与byte[]之间的转换(类似的byte short,long型)[java] view plain copy /** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 byte的大小为8bits而int的大小为32bit…

    2024年5月20日
    3900
  • java嵌入谷歌内核,java内嵌chrome

    java可以用来开发什么软件呀(java开发能做什么) Java可以开发网站,例如,一些企业的门户网站;Java可以做软件,例如,信息管理系统、员工打卡系统;Java用于手机开发,例如,做手机系统。Java做游戏,例如一些网络游戏,手机游戏等等。 JavaSwing由于能开发出图形用户界面的客户端供交易者使用而备受欢迎,但是现在C#正在快速地取代Swing的…

    2024年5月20日
    3500

发表回复

登录后才能评论



关注微信