双人五子棋棋可以斜起移吗?

C语言五子棋判断胜负。给个具体思路也行。我知道是要5个子同一列或同一行或同一斜线。。_百度知道
C语言五子棋判断胜负。给个具体思路也行。我知道是要5个子同一列或同一行或同一斜线。。
第1行输入两个数n和m,用空格分开,n为棋盘横纵坐标的最大值,m为步数:1&=n&=1000,0&m&=n*n
第2行到第m+1行 为第一步到第m步的坐标,每行两个数,用空格分开:x和y,1&=x,y&=n输入保证不存在重复下子。
输出首次分出胜负那一步的序号(第一步为1),如果走完了都没有分出胜负,输出“draw”。 要用C语言
不要有数据结构的知识。给个具体思路也行。我知道是要同一列或同一行或同一斜线。但不知道要怎么写。。。sample:input5 113 32 32 44 34 23 41 53 25 11 11 2output9
我有更好的答案
按默认排序
给个思路吧:对每一条输入进行判断是否构成五连珠,也就是对每一条输入去搜索它的横竖斜三个方向去检查是否存在五个连续点。存储的数据结构使用二维数组即可,注意要区分双方的不同(可以奇数步使用0,偶数步使用1标记)。横方向即x不变,y增减;竖方向即y不变,x增减;斜方向有两个,一个是x,y同增减,另一个是xy增减相反。
还是不是很懂。。 怎么判断存在五个连续点呀,而这5个点又是同色的。。而且一开始还没有5个点,能否写一段语句。存储怎么用二维数组存啊?
我每行输入的是坐标x y。 可以奇数步使用0,偶数步使用1标记。什么意思?怎么标记?
二维数组的下标表示坐标x,y,比如第一步是3 3,就a[3][3]=0,第二步a[2][3]就a[2][3]=1,以此类推检查的话,比如当前输入是x,y,那么检查横线:for (i = x -1; i & 0; i--)
if (a[i][y]==a[x][y])
count++;for (i= x+1; i &=n; i++)
if (a[i][y]==a[x][y])
count++;if (count &=5 ) 构成五子连珠其余类推
对每一条输入进行判断是否构成五连珠,也就是对每一条输入去搜索它的横竖斜三个方向去检查是否存在五个连续点。存储的数据结构使用2维数组即可,先对于一个矩阵,将给出的点全部计入矩阵,每个点有3种情况(0为没用到,1为黑,2为白,,,就是开个map【x】【y】,对于每个点x,y给矩阵上的点赋值,初始为0),每记入一个点执行多方向搜索,搜到5个点停止执行输出,没找到就继续读入。
怎么进行多方向搜索?搜到5个点是怎样搜。
还有那些点不一定连续输入的。怎样搜
cin&&x&&y;for (i = y -1; i &=1; i--)
if (map[x][i]==map[x][y])
tot++;for (i= y+1; i &=n; i++)
if (a[x][i]==a[x][y])
tot++;if (tot &=5 )
输出胜方。。。。这是左右的,其他的以此类推
public static final boolean check(int []p1,int []p2) {
if (p1[0] == p2[0] || p1[1] == p2[1])
// 两个点的x坐标相同,则是一条垂直线
// 两个点的y坐标相同,则是一条水平线
/// 在一条直线
// 在一条斜线上}
其他类似问题
五子棋的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求Java五子棋斜方向的判断思路_百度知道
求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个方向上相邻的黑棋棋子数为3gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:Const DIR_UP = 1Const DIR_UPRIGHT = 2Const DIR_RIGHT = 3Const DIR_RIGHTDOWN = 4Const DIR_DOWN = 5Const DIR_DOWNLEFT = 6Const DIR_LEFT = 7Const DIR_LEFTUP = 8这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:---------------------oo-----ox*xx---------------------图中的*点从标为(4,4),(打*的位置是空位),则:gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2gStyle(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'&=L1&F1&L2&F2&L3'&=F3'&L4'&F4'=F4
从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4*F3&L4'这个关系,同样,我们还可以得到其它的关系,如:4*F2&L3、4*L3&F3...,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得到了下面各种棋型的分值,由C语言表示为:F[2][5]=,};L[2][5]=,};
F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2'对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。
提问者评价
呵呵。。。。用的简单的方法已经解决了,,,不过谢谢给的详细资料……学习中
其他类似问题
五子棋的相关知识
其他2条回答
import java.awt.*; import java.awt.event.*; import java.util.*; 调用判断方法思路为:首先你应该有一个组的集合,就是横、竖、斜三个方向
想来你也不是想写成正式和商业的软件吧?那么穷举就行了。建立判断的函数
对两个斜方向:
对每个可能的开始点
判断剩下4个点是否和开始点同色
如果相同,return一个表示胜利的值
如果运行到了这里,表示整个棋盘上都没有胜利条件,所以return一个表示还没有胜利的值
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您当前所在位置:→→→内容
导读:前几天看群里的朋友下棋,不知道斜月怎么开,棋谱就是记不住,我就一直想写篇攻略让大家熟悉下这个局,只是一直时间不充裕,今天抽空给大家写一篇下斜月的正确开局姿势,在五子棋斜止开局里...
前几天看群里的朋友下棋,不知道斜月怎么开,棋谱就是记不住,我就一直想写篇攻略让大家熟悉下这个局,只是一直时间不充裕,今天抽空给大家写一篇下斜月的正确开局姿势,在五子棋斜止开局里,走RIF规则的话,斜月基本都是首选了,比赛上应该是开的最多的。斜月通丘月有4个打点是可以下的,今天小白菜就给大家来简单的谈谈这4个打点,小白菜写的都是一些实用容易记住的希望帮到大家。ps:本篇是针对新手和初学者,懂谱的孩子就不要喷了首先给大家看看4个打点的位置吧图(1所示)(1)斜月一打斜月一打在刚接触这个局的时候有人说是个很强的局,后来有人说的接近必胜,再到又有人说地毯出来了。对这个我没有地毯谱,所以不敢妄下定论,在这里主要是给大家分享这个局开局的定式,因为这个一打点在竞技的时候用的少,所以不深究。斜月一打定式图(2)上图所示是公认最强走法了,当然还有下面几个6手图(3)上图所示的几个6其实都可以下的,只是黑棋前期优势太大,如果想练习防守或者进攻可以试着下,不要听说是必胜就不管了斜月二打记得在很久以前,山东弓长棋的族长告诉我斜月2打的定式,那时候真是如获至宝,毕竟那时候很少看见懂谱的.现在给大家看下2打的大定式如图4图(4)这个定式大概是走的最多的一个了,怎么记住这个定式呢?其实理解前面的几手后面就是跟着走了。不少初学者理解不了定式里的8手,通常走下图5的8手(图5)看图5可以知道这个8是必败的,一子之格的差距为什么这么大呢?初盘抢先手,图5所示的8手把子力重心放在了上面,黑子则完全不用理会,8手没有对黑子造成威胁,失去了先手,看图5我们可以看出黑子在左方和下方都有一大片做棋的区域。很容易拓展。失去了外围的白子只能任其宰割在这里我要特别说一下,定式里的8手不但堵了黑的活2,而且自己多了一个可以进攻的活2,攻守兼备在下棋的时候这样的点很多都是最强的点图(6)白走了定式8手之后,很多人喜欢走图6的9去挡住白的活2,这样走也可以只是,陷入了被动。看图7走了9之后就会出现图7所示的局面,这个局面黑棋是各种无力,让白棋控制了局面。先手为攻,后手要防,黑棋的先手没了。优势也基本没了,在下一个点的时候,我们更多的考虑对面好不好走,让对面难受就是最好的点具体要怎么样记住这个定式小白菜也不说的太多,多下下就能领悟的很多孩子大定式走腻了,就想换下口味。图8是现在最为流行的走法,黑白双方相互厮杀,下起来更有趣。(图8)当然黑棋11手游很多下法,都是可行的,五子棋不能都拘泥于定式,也许有人说其中有的点不强,所谓的强点弱点是别人告诉你的,在我们的心中对强弱的把握还是在于自己(9)斜月三打废话不说,上大定式图10所示 图(10)对于定式里的8手有2个强点。图11所示11走1所示的点大家通常都会走下面的变化图12图12这是斜月3打比较流行的2种变化,所以大家要熟悉这2种棋型,看看那个更适合自己。在这里特别要说的是白棋在走定式的时候黑棋9手如果档下面,那么白棋会走出下面的棋型,白棋是可以杀的哦,大家可以思考白棋怎么杀,或许有人会说11手可以换个点,但是结局都是一样的啦。图13斜月4打斜月一打一度被认为是接近必败没有人开的局,但是我觉得,不是败那就可以下,况且4打还是有些地方是值得一下的图14这次先不上定式,因为没有什么公认的大定式,给大家看看4打的一个误区,如上图14 白6活三,走成上图所示那么黑棋就必胜了。这个局面留给大家思考下,9为最强进攻点15给大家说说几个白棋强力的走法 就说到这里吧,写了这么多只是想给大家一个大概的了解,在脑海里形成一个简单的斜月架构,和几种常规的斜月棋型如果还有不懂的问题可以加小白菜五子棋玖久家族群。。也可以加小白菜私人QQ.欢迎大家来询问小白菜不是高手也不是大神只是把自己知道的一些东西分享给大家,当然这些东西在大师眼里不算什么,但是对于想学斜月的朋友应该还是比较有用的。
文章很赞,分享给朋友五子棋可以斜起移吗?_百度知道
五子棋可以斜起移吗?
我有更好的答案
按默认排序
五子棋只能横,竖,对角,这三种
不可以,只能横竖移动
有线就可以了
其他类似问题
五子棋的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 双人五子棋 的文章

 

随机推荐