2003年暑假的某一天,吴毅成教授与女儿下五子棋中,发展出这个玩法。
2004年初,吴教授的硕士班学生黄德彦参与这项研究,并作为个人的硕士论文。
2005年初,他们完成了第一个六子棋程式,与电脑对弈,这个程式大都可以击败他们。而他们也制造出各种开局的样式(有1283种),让电脑对电脑下。直到目前为止,还没有发现,对某一方,特别有利。
2005年9月,他们整理这些研究结果成为论文并发表在第十一届的国际电脑赛局发展研讨会中。其中提出一些理论,证明白方不能脱离战场,否则黑方胜。这个理论迫使双方必须从中心点开始缠斗。
2005年9月,群想网络科技完成第一个六子棋线上游戏提供免费试玩。
2005年9月20-21日,六子棋发表到台湾各大媒体。
2005年,有兴趣的相关人士,开始讨论筹组六子棋协会,并开辟六子棋论坛。
2006年5月,在意大利杜林举办的第11届奥林匹亚电脑竞赛(11th Computer Olympiad),第一次加入六子棋项目。吴教授之六子棋程式NCTU6获得金牌,可参考详细结果。
2006年7月16日,在台湾新竹举办第一届交通大学杯公开赛,可参考详细结果。
2007年8月24日,曾获得世界围棋棋王的周俊勋,公开尝试与NCTU6对弈,三战皆败北。
2007年8月26日,在台湾新竹举办第二届交通大学杯公开赛。
2007年10月,第二届中国机器博弈锦标赛中首次加入六子棋项目,东北大学棋天大圣程序夺冠。
五子棋的介绍
五子棋的棋具与围棋通用,起源于中国上古时代的传统黑白棋种之一。下面我为大家介绍五子棋吧!
五子棋又名五子连珠棋,是一项有趣、益智的棋类游戏,世界上已有几十个国家开展此项活动。世界五子棋锦标赛已举办过几届,并进入世界智力体育奥林匹克比赛,它的影响越来越大。五子连珠棋易学难精,但妙趣横生。下一局棋所费时间不多,茶余饭后“杀上一盘”,开发智力,勤于动脑,调剂感情,有利于开发智力,居家必备。
简介
五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。早在“尧造围棋”之前,可能民间就已有五子棋游戏。发展于日本,流行于欧美。
五子连珠棋五子棋容易上手,老少皆宜,而且趣味横生,引人入胜不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为 “ 连珠 ” ,英译为 “Renju” ,英文称之为 “Gobang” 或 “FIR”(Five in a Row 的缩写 ) ,亦有 “ 连五子 ” 、 “ 五子连 ” 、 “ 串珠 ” 、 “ 五目 ” 、 “ 五目碰 ” 、 “ 五格 ” 等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征 “ 短、平、快 ” ,又有古典哲学的高深学问 “ 阴阳易理 ” 它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛它的棋文化源渊流长,具有东方的神秘和西方的直观既有 “ 场 ” 的.概念,亦有 “ 点 ” 的连接。它是中西文化的交流点,是古今哲理的结晶。
传统五子棋
五子连珠棋传统五子棋的棋具与围棋大致相同,棋子分为黑白两色,棋盘为15×15,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜(正规比赛中黑棋只能连成5个。6-9个一排算禁手,另外黑棋还有33和44禁手。黑棋禁手判负。白棋没有限制)。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
称谓:
五子棋,日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为“FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion”。捷克语piskvorky,韩语omok……
五子连珠棋许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”,暗示情人之间下五子棋有利于增加情感的交流欧洲人称其为“绅士棋”,代表下五子棋的君子风度胜似绅士日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。
起源:
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。可见,五子棋颇有渊源。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。
在古代,五子棋棋具虽然与围棋相类同,但是下法却是完全不同的。正如《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。”。
现代五子棋
随着五子棋的发展,逐步发现先手优势非常大,最后得出“先手必胜”。五子棋要成为竞技运动,核心问题是怎样解决传统五子棋下法中“先手必胜”的问题。
“交换”思维
“交换”思维有个形象的比喻:一个人切蛋糕,一个人选蛋糕。即:一人开局,另一人选择黑方还是白方。此方法最为公平、最有效率,且最为简洁实用。不过此方法使开局者不走已知的必胜,把棋艺的较量演化为对局者开局的博弈,而“先手必胜”依然存在。
如:欧洲的Swap2、Swap1中国的Swap3、第一手交换规则等。
“禁手”思维
禁止以某种手段取胜。为了平衡先后手之间的差距,削弱先手优势,日本连珠提出“禁手”。后来连珠的发展证明禁手并不能平衡先后手之间的差距,依然是“先手必胜”。
“跷跷板”原理
五子棋始终是先手领先一子。如果双方轮流领先一子呢?
台湾教授发明的六子棋,就如“跷跷板”一样。先手先下一子,然后双方轮流下两子,先连成6子者胜利。六子棋为第11届奥林匹亚计算机游戏程序竞赛项目,验证其公平性与复杂性。
现代五子棋的现状
五子棋、连珠已经成为欧洲现代五子棋的组成部分,举行了很多次大大小小的比赛,并且将三种棋的世界锦标赛联合举行。
中国的现代五子棋目前处于世界领先水平。2013年中国棋院《中国五子棋竞赛规则》修改了原先的RIF规则,正式使用“三手交换,五手多打”规则,同时兼顾发展传统五子棋。
#include <stdio.h>#include <stdlib.h>#define SIZE 3
typedef enum {CBLANK, CBLACK, CWHITE} CHESS
typedef enum {GM_WIN, GM_LOST, GM_UNKNOW, GM_ERROR} GAMEFLAGvoid init_board(CHESS board[SIZE][SIZE]) //初始化
{
int i, j
for (i = 0i <SIZEi++)
{
for (j = 0j <SIZEj++)
{
board[i][j] = CBLANK
}
}
}void print_chess(CHESS board[SIZE][SIZE]) //打印棋盘
{
int i, j
putchar(' ')
for (i=0i <SIZEi++)
{
printf("%2d", i+1)
}
putchar('\n')
for (i=0i <SIZEi++)
{
printf("%-2d", i+1)
for (j=0j <SIZEj++)
{
switch (board[i][j])
{
case CWHITE:
putchar('O')
break
case CBLACK:
putchar('*')
break
case CBLANK:
putchar('_')
break
default:
putchar('?')
break
}
putchar(' ')
}
putchar('\n')
}
}void swc(CHESS chess, int *black, int *white, int *bmax, int *wmax) //判断
{
switch (chess)
{
case CBLACK:
*white = 0
(*black)++
break
case CWHITE:
*black = 0
(*white)++
break
case CBLANK:
*black = 0
*white = 0
break
default:
break
} if (*black >*bmax) *bmax = *black
if (*white >*wmax) *wmax = *white
}
GAMEFLAG res(CHESS board[SIZE][SIZE]) //判断输赢
{
int i, j
int win[4] = {0, 0, 0, 0}
int rblack, rwhite, cblack, cwhite,
loblack = 0, lowhite = 0,
roblack = 0, rowhite = 0,
bmax = 0, wmax = 0for (i=0i <SIZEi++)
{
rblack = 0
rwhite = 0
cblack = 0
cwhite = 0 swc(board[i][i], &loblack, &lowhite, &bmax, &wmax)
swc(board[i][SIZE-i-1], &roblack, &rowhite, &bmax, &wmax) for (j=0j <SIZEj++)
{
swc(board[i][j], &rblack, &rwhite, &bmax, &wmax)
swc(board[j][i], &cblack, &cwhite, &bmax, &wmax) } } if (bmax >= 3)
{
if (wmax >= 3)
{
return GM_ERROR
}
else
{
return GM_WIN
}
}
else
{
if (wmax >= 3)
{
return GM_LOST
}
else
{
return GM_UNKNOW
}
}}int move(CHESS board[SIZE][SIZE], CHESS chs, int x, int y)
{
int bs = 1
if (board[x][y])
bs = 0
else if (y >= SIZE || y <0 || x >= SIZE || x <0)
bs = 0
else
board[x][y] = chs
return bs
}int main()
{
CHESS b[SIZE][SIZE]
char *msg[] = {"BLACK WIN!\n", "WHITE LOST!", "NOT YET", "ERROR!!"}
char *plr[] = {"NON", "BLACK", "WHITE"}
CHESS p = CBLACK
GAMEFLAG flg
init_board(b)
while ((flg = res(b)) == GM_UNKNOW)
{
int x, y, bmv = 1
system("cls")
print_chess(b)
while (bmv)
{
printf("%s回合,输入坐标:", plr[p])
scanf("%d%d", &x, &y)
bmv = !move(b,p,x-1,y-1)
}
p = (CHESS)(CWHITE + CBLACK - p)
}
printf("%s", msg[flg])
system("pause")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)