今天给各位分享java五子棋棋型的知识,其中也会对java五子棋的实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、java五子棋怎么画ER图2、java五子棋源代码判断输赢,希望帮忙指出错误并完善3、五子棋棋盘java实现4、JAVA单机版五子棋怎么写5、五子棋的Java算法
java五子棋怎么画ER图
先画正方形,然后画两条对折线完成。
第一步、我们先来画一画五子棋的棋盘,画出一个棋盘,画一个四方形。
第二步、接着我们画一画棋盘的棋盘格,横横竖竖的横要平,竖要直溜溜。
第三步、接着我们画出棋盘里面的棋子,黑色和白色的棋子就完成啦。
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五子棋棋型的信息别忘了在本站进行查找喔。