五子棋的棋发颤的颤怎么写写

您现在的位置: >
下五子棋的
来源:www. 作者:
时间: 14:23
【第一篇】:和老爸下五子棋“嘿!宇宇,过来陪爸爸下一场五子棋!”正在做作业的我,一听到爸爸的话,高兴得不得了,乐滋滋地跑到桌子旁边。摆好棋布后,我先向爸爸示威:“我一定能赢!”爸爸说:“哼!等着瞧吧!你先出棋!”我心里暗自高兴,拿起一颗黑棋放在中心,就这样,一场黑白大战开始了。接着,爸爸在我黑棋旁边放了一颗白棋。我便开始策划一个四三阵。这时,我暗暗念叨着:老爸不要发现我的四三阵……可爸爸还是抢先堵了我这个四三阵,他一边摆着棋一边说:“你这雕虫小计是打不过我的。”我不以为然,继续扩大我方的势力,看到我的势力不断扩展,我洋洋得意,却没想到爸爸也在策划他的“阴谋”。当我摆了一个两边都没有棋子的三时,爸爸却没有把它给堵了,我奇怪极了,要知道,下五子棋,只要有个两边都没有棋子的三时,一定要把它给堵了,要不“必死无疑”,这可是爸爸教我的啊!今天他是怎么了?接着,我也不多想,又下了一颗棋,心想,哈哈,爸爸没出路了,不管他堵哪边都会输。但爸爸不管我,在另一处摆了一子,只听爸爸说到:“我赢啦!我赢啦!”听了爸爸的话,我还没反应过来,奇道:“不对呀,明明是我赢了,怎么变你赢了?”爸爸顺手一指,说:“你看,这里有五颗了!”我一看,原来爸爸从以前的棋子里斜着拉出一条,怪不得我没注意到。唉!就这一步之差使我只好低头认输。我十分惭愧,爸爸对我说:“没关系,失败是成功之母。”我也笑着说:“呵呵,骄兵必败,只有胜不骄,败不馁,才能做最后的冠军。”爸爸笑了,我也笑了。【第二篇】:我喜欢下五子棋每个人都有自己的兴趣爱好,我也不例外,我喜欢看书、打乒乓球、上网,当然还有下五子棋。在我刚上小学的时候,有一次爸爸买回来一副五子棋要和我玩游戏,我愉快地答应了。爸爸先告诉我游戏的规则:摆棋时要想方设法让自己的棋子形成五连珠,横、竖、斜的都行,先连成五子的就是胜利者。听起来很简单嘛,我急忙拿起棋子就下,可是接连下了几盘,我是屡战屡败,每局不到几个回合就缴械投降了。看着我有点沮丧,爸爸帮我分析了原因,下五子棋不但要注意自己的棋子的走位,还要注意观察对方的棋型,一旦发现对方有三个连续的棋子形成就要阻挡。我听了恍然大悟,我又和爸爸连着下了几盘,虽然还是输,但是自从我注意防守以后,爸爸也不能只落下寥寥几子就战胜我了。学会了下五子棋后,我就迷上了它。只要爸爸有空,我就会缠上他对上几局,周末时我也会上网和网友对上几盘。经过一段时间练习,我的棋艺有了很大的长进,掌握了许多下棋的技巧,和爸爸下棋也互有胜负。记得有一次,我看见爸爸正坐在沙发上悠闲地看电视,我的棋瘾来了,就要求和爸爸对上几局。我先在棋盘中间落子,然后打造一个十字型棋局,没想到被爸爸发现了我的意图,将我的阵型堵住了。随着双方不断地落子,我的另一个井字阵型也即将搭建成功,为了不让爸爸发现我的计划,我东下一子西下一子,果然爸爸的注意力转到如何进攻下,没发现我设下的陷阱,我终于落下最后一子,兴奋地大叫:“耶,我赢了。”爸爸明白过后也只能低头认输了。 随着我的下棋水平越来越高,我也越来越喜欢下五子棋,同时也深深地体会到“胜不骄、败不馁”的道理。【第三篇】:我学会了下五子棋每当我看到“下棋”这二个字时,都会使我回想起一件美滋滋的事情来。那件事发生在去年的暑假里。一天,家里来了个十八、九岁的表姐。那天刚好停电,没有电视看,也不能上网,我和表姐都闷得发慌。突然,表姐的眼睛一亮。我顺着她的眼光望过去:啊,是个围棋盘!我失望地对她说:“看着那个没用,我又不会下围棋,你不是说你也不会下吗?你还打它的主意干什么?”表姐说:“我们可以利用它来玩另一种有趣的游戏。”我一听,高兴地跳了起来,“那咱们就开始玩吧!”我们摆好棋盘,表姐才告诉我这个游戏叫五子棋。只要谁先把五个棋子连在一起,谁就赢了。但玩起来也没那么容易,因为对方会堵死你的棋,不会让你连下去。第一局开始了,我很快就把三个棋子连在了一起,还以为就要赢了,心里正暗暗得意。不料表姐分两次就把我的棋给堵住死了。我只好在原来的棋上分杈再往下连。突然,我发现表姐的棋已经有四个棋子连在一起了,但已经晚了,再去堵已经来不及了,这局棋表姐赢了。表姐对我说:“每当对手已经把三个子连在一起时,你一定要去堵死他的棋。否则,你就会输定了。”第二盘棋,我按表姐说的去做,我堵她的棋,她堵我的棋,两人正杀得难分难解。突然,我发现其中有一处三个棋子连在一起了,只被表姐堵了一边。于是,我用了一招调虎离山之计把一个子隔着一空位放在三个子已连起的那一边。表姐没有发现,还在聚精会神地顾着连自己的棋子。这样,我赶快再下了一个子。“哈哈,我赢了。”我脱口而出。表姐却还在迷惘之中……事后,我心里甜滋滋的,就像吃了许多蜜糖一样。因为这是我第一次这样快就学会了一样本领。【第四篇】:与外公下五子棋第一局:骄兵必败我胜券在握,抢先摆出了一个三角形,心想:外公呀外公,这下您得跟着我团团转了。一会儿,我的黑棋不断下出“活三”,“拖四”。我有些得意了,真是骄兵必败呀!外公很快就摆出了“活三嵌四”。啊!我当头一棒。第二局:小心谨慎我通过了刚才那局棋的教训,便开始小心谨慎了。老样子,我先来了个三角形,我吸取教训,先看外公的棋子儿有没有“活三”、“拖四”,再仔细盘查自己能不能“双活三”、“活三嵌四”来获胜。忽然,我看见外公露出一丝得意的笑容。难道外公有什么“如意算盘”,这么胸有成竹?我又仔细地审视了一遍,忽然我眼前一亮,噢!只差一个子儿就“双活三”了!我赶紧拿出一个白子儿堵在那儿。果然,外公的脸就晴转多云了。紧接着是啧啧的赞叹声:“有进步,有进步!”我听了,有点喜形于色了。不,我猛然间想起了刚才因为得意而输了,便不再想刚才的话语,继续下棋。轮到我下了,我仔细地寻找着落子儿处,哎呀!好机会!这儿一下,就成了“双活三”啦!不等我多想,我边下边脱口而出:“双活三!”“啊!输了。”外公一愣,接着点了点头。第三局:“决战”棋我在脑子里先摆出了布阵图,然后一步一步按着走。可是,这毕竟是有漏洞的,于是,我采用斜摆,因为这样不大容易看出破绽,果然,外公只顾自己的棋,没看出斜的,我见外公没有发觉,没堵我的“活三”,便下了一子儿,成了“活四”。“我赢了!”“什么?”外公还蒙在鼓里。“活四了!”我边说边指。“哎呀!又输了!2比1,你赢了!”“耶!”我高兴得到处乱窜,边跑边说:“我赢了外公了,我赢了!这次“旅程”真是有惊无险呐!【第五篇】:下五子棋今天,辅导班举行了一次“下五子棋”比赛,大家都欢呼雀跃起来,个个都摩拳擦掌,老师拿来五子棋,分了棋子,再分组,规定是三局二胜,我先和李明比,他在班上可没怎么下棋的,心里不由得意起来:哼,就凭你,要知道我可是高手。比赛开始了,我把一颗黑棋放在中心点,把好营地,他将颗白棋放在我黑棋的旁边,先玩的很顺利,他放哪,我就跟着堵,后来他有点支撑不住了,汗珠从他的额头流了下来,眉毛皱在一块儿。我趁他不备,设下了一个斜着排了四颗的机关,只要他没注意到那,那我就赢定了,为了迷惑他,我虚晃一枪,我故意将一颗棋子放在另一处让他堵,果然不出我所料,他中计了,我得意的将一颗棋子放在那四颗棋的一边:“哦耶,我赢喽!我赢喽!”我高兴的蹦了起来,可能大家都知道我刚用的是什么计了吧!没错,这就是人们常说的“声东击西”没想到在这也能用到,只见李明垂着脸站在一边,我开心极了。只要下次赢了,冠军非我莫属。第二次我和我王军比,说实话心里不免有点紧张,因为他在班上也是个高手,和我是针头对麦芒,几乎没输过,要是这次我输了,冠军的宝座就要远离我了,为了让冠军属于我,我狠下心来决定沉着应战:“来就来吧!谁怕谁啊”我心想,可过招了大半天,终于,我有点撑不住了,心里急的很,再看看王军脸上面无表情,看样子很轻松,我怀疑他设下了机关,仔细琢磨了一下,没什么问题,然后放心起来,随便摆放了一颗棋子,没想到王军见缝插针的放下了一颗棋子,我瞪大了牛眼,一数,五颗棋一粒不少的摆在我面前,我输了,我哭丧着一张脸,但又一想比赛是重在参与,友谊第一,于是和他们一起狂欢庆祝。通过五子棋比赛,我明白了,做任何事不可以只看表面的,象而掉以轻心,学习更应该如此,将知识理解透彻,学扎实。  
  转载分享本站内容www.,请保留文章来源信息和原文链接!
关于下五子棋的作文五子棋棋子_五子棋棋子图片素材
当前位置: > 五子棋棋子
正宗先行者围棋磁性折叠棋盘套装磁力大号棋子儿童学习五子棋F-9
厂家直销/全国比赛围棋套装耐摔胶木棋子皮革棋盘围棋五子棋专用
包邮正品全国比赛围棋套装耐摔胶木棋子皮革棋盘围棋五子棋专用
十成品相 特惠便携儿童围棋套装 五子棋套装皮革棋盘精瓷围棋子
最近更新的...
友情链接:
& 看图网,,该页图片不可商用
在线图片处理软件开发,始创于09年,距今7年。DS:3/20/4
五子棋棋子素材下载国家体育总局棋牌运动管理中心
联合打造棋牌官方网站
五子棋基础入门教程(三) 单一棋形与组合棋形
  三、单一棋形与组合棋形
  单一棋形
  连珠五子棋基本的单一棋形包括:二、三、四、五连以及长连。在这几种基本单一棋形中最容易掌握的是五连和长连。成五是连珠五子棋黑白双方的基本取胜方法,五在五子棋中是至高无上的,因此规则里就有了黑棋中五与禁手同时形成禁手失效的规定。长连对于黑棋来讲是禁手,对白棋则视同五连,因此如果白棋长连则白棋获胜。
  (一)各种单一棋形
  1. 五连和长连
  五连是指相同颜色的五个棋子在某一条阴线或阳线上不间隔地连在一起。
  长连是指相同颜色的五个以上的棋子在某一条阴线或阳线上不间隔地连在一起。
  五连只有一种形状,共有横、纵、左斜、右斜4种姿态。长连有六连、七连等,每种也共有横、纵、左斜、右斜4种姿态。
  上图中有各种五,也有各种长连。 有的长连是六连,有的长连是七连;有的长连是禁手,有的长连不是禁手,请仔细鉴别。
  2. 棋形&四&
  &四&是连五取胜的前一步,所以研究好棋形&四&很重要。这里说的&四&是指己方再走一步能够成五的单一棋形,包括&活四&和&冲四&。
  活四是指在同一条阳线或阴线上有两个点可以成五的单一棋形。日本也形象的称活四为&棒四&。
  活四也是只有一种形状,4种姿态,一旦走出活四,对方靠阻挡来防守是没有用的,这样本方都可成五胜了。
  观察活四的形状,均为同一条阳线或阴线有同色的四子不间隔地相连,同时两边紧挨着的交叉点为空白交叉点,那么,可不可以用以上的棋形描述做为活四的定义呢?回答是白方可以,黑方有特例,不可以。在图X中,在A位放黑子,是长连,受禁手的限制,黑方只能在B位成五,而不是有二处成五胜了。此棋形实际上是冲四,下边我们来学习冲四的知识。
  冲四是指在同一条阳线或阴线上只有一个点可以成五的四。冲四包括连冲四和跳冲四两种,跳冲四又叫嵌五。连和跳的情况再加上阴线阳线,冲四的形状多种多样。
  冲四的共同特点是本方再走一步就可以成五,对方先防一步就可阻止本方成五。换名话说,冲四有一个点,且只有一个点可以成五。因为白棋的长连可视同五连,所以,白棋单纯的长连前一步也可视同冲四。而黑棋由于受禁手规则的限制,黑棋单纯的长连前一步则不可视为冲四。
  对方走冲四,本方只要没有冲四,就必须立即防守,否则这局棋就会以失败告终了,由于下一步就要成五,所以相对于其他没成五的单一棋形,冲四又被称为&绝对先手&。
  平时我们说到&死四&,虽然从名称上也有&四&字,但死四主方向已是成不了五的棋形,因此,死四不是四。
  上图是各种四,第一个四是活四,第二个是连冲四,第三个至第五个是跳冲四,第六个是白棋特有的&冲&,最后两行是死四。
  请您注意11路跳冲四和9路跳冲四在黑方防守后的不同之处是,11路的跳冲四在黑棋防守后还可以接着冲四。
  你能从上图中分别找出几个活四、连冲四、跳冲四和死四?(注意F线白棋所特有的&冲&)然后体会他们之间微妙的不同。
  3. 棋形&三&
  四之前就是三。活三不仅能形成活四,也能形成冲四;眠三只能形成冲四。
  活三:己方再落一子能形成活四的三。活三包括连活三和跳活三两种,跳活三又叫嵌四。要注意的是活三形成活四的点也会受到对方挡子或棋盘边界的影响。
  眠三:己方再落一子只能形成冲四的三。(言外之意,就是眠三不能形成活四)眠三包括连眠三、跳眠三、特眠三、假活三共四种。取眠三的名字,有睡眠的三之意,很形象吧,冲四就是它醒来的时候呦。
  死三:主方向已不可能形成五的三。死三已经不是三。
  提示:H点是活三能形成活四的点,A点和B点是眠三能形成冲四的点,你能体会出A、B两类冲四点有什么不同吗?5路、3路、1路左侧、13路右侧和10路是特眠三;8路的眠三和1路右侧横向的眠三及与这个三相关的竖线眠三,因其很像活三,因此叫做假活三(注意:与1路右侧相关的竖向眠三只有一个点可以冲四, X点是四四禁手,日本把8路的眠三称为&夏止&。)。
  你能从上图中分别找出几个连活三、跳活三、连眠三、跳眠三、特眠三、假活三?然后体会他们之间微妙的不同。
  4.二:
  三之前就是二。同样,活二既能形成活三,也能形成眠三;眠二只能形成眠三。
  活二:己方再落一子能形成活三的二。活二包括连活二、跳活二和大跳活二3种。
  这是三种活二及它们在一般情况下能形成活三的点。形成眠三的点你能找出来吗?
  注意观察上图的3种二,它们都是连活二,但是能形成活三的点的个数是不同的。跳活二的不同情况请读者自己去分析吧,大跳活二有不同的情况吗?连活二、跳活二和大跳活二能形成眠三的点呢?它们也同样有可能会受对方挡子或棋盘边界的影响。先想想再看下面的图。
  大跳活二形成活三的情况不受棋盘边界和对方挡子的影响。
  眠二:己方再落一子只能形成眠三的二(言外之意,就是眠二不能形成活三)。眠二包括连眠二、跳眠二、大跳眠二、特眠二和假活二5种。
  上图是眠二能形成眠三的点,图中A点形成的是连眠三,B点形成的是跳眠三,C点形成的是特眠三,D点形成的是假活三。能形成假活三的眠二就是假活二。
  死二:主方向已不可能成五的二。死二已经不是二。
  图中共有14个各种各样的二你都能找出来吗?提示:注意c4和c9以及b13和g13组成的可不是二,不要把他们两个也算进去呦。
  需要强调的无论是死四、死三还是死二,它们虽然主方向已经不可能成五,但在其它方向还是有可能被利用的,这一点您一定要注意。
  (二)、几种单一棋形之间的关系
  二、三、四是子力当中最活跃的,我们用图示加文字的方式把他们之间的关系说明一下:
  加一子
  活二&&&活三
  注意:A点形成的是连活三,B点形成的是跳活三。活二也能形成眠三。
  加一子
  眠二&&&眠三
  注意:A点形成的是连眠三,B点形成的跳眠三,C点形成的特眠三,D点形成的假活三。
  加一子
  活三&&&活四
  注意:H表示能形成活四的点。活三也能形成冲四。
  加一子
  眠三&&&冲四
  注意:A点表示只能冲一次四,B点表示能连续冲两次四。
  我们经常听到一些人把跳活三简称之为跳三,这是不准确的,其实跳活三和跳眠三都是跳三,如果只称跳三就是跳活三和跳眠三的合称。
  这些单一棋形的知识对于我们深入理解棋理,迅速提高五子棋水平也是很重要的,您可一定不要轻视呦。
  组合棋形
  除了成五,一个单一棋形是很难取胜的,因此,要想获得更多的取胜机会,需要走成各种组合棋形,由于黑棋有禁手的缘故,因此黑棋有些组合棋形是禁手,只要能避开禁手,其实我们在行棋时,一般可以认为组合棋形出现越多,越容易获得对局的优势,常见的组合棋形有以下几种:
  (一)、两种棋形的组合
  1.下图是两个三的组合:
  A点是黑棋两个活三的组合是禁手,我们将在禁手一章,系统介绍。B、C和D点,是一个活三和一个眠三的组合或者两个眠三的组合,无论是黑棋还是白棋,都不是禁手。
  两个三的组合中还有一类在一条线上两个眠三的组合(由于黑棋有长连禁手,因此此种情况只限黑棋),也叫&双眠三&。(如图)。白棋的此形就是活三了。
  前面已经说过,两个眠三的组合无论是黑棋还是白棋,都不是禁手,&双眠三&是同样道理。
  2.下图是两个四的组合:
  图中分别是两个冲四、两个活四或者是一个冲四与一个活四的组合。两个四组合也有在一条线上的,但是无论哪种组合黑棋都是禁手。
  3.一个四和一个三的组合:
  一个四和一个三组合,无论是一个冲四还是一个活三(A点),一个冲四和一个眠三(B点),一个活四和一个活三(C点),还是一个活四和一个眠三(D点),无论是白棋还是黑棋,都不是禁手。
  当然,各种二也可以与&四或三&组合,我们就不在这里都讲述了。
  (二)、三种棋形的组合
  我们所说的棋形组合是各种二、三、四都包括的,有时我们经常听到棋手说这步棋:&一子通三路&,指的就是这种三个棋形组合的情况。甚至,有时是两个棋形组合,而另一个方向,由于有冲四绝对先手,能冲出一个新的二来,也说这是一子通三路。(如图)
  黑棋可以先在A位冲,然后在B位形成一个活二,一个活三和一个眠三的组合。也可以说是一子通三路。因此在A位没冲四之前,我们也可以说B位一子通三路。
(责任编辑: 陈楠 )
有条评论,录摘要................................................................................................................................................... 21 引
言 ........................................................................................................................................... 31.1 问题的提出 ........................................................................................................................ 31.2国内外研究的现状 ............................................................................................................. 31.3 人工智能 ............................................................................................................................ 41.3.1 五子棋数学思想 ................................................................................................... 41.3.2 五子棋人工智能 ................................................................................................... 51.4 任务与分析 ........................................................................................................................ 52.总体设计方案 ............................................................................................................................... 72.1 算法设计 ........................................................................................................................... 72.1.1 总体框架图 ............................................................................................................. 72.1.2 五子棋胜负判断算法 ............................................................................................. 82.1.2 五子棋人工智能算法 ............................................................................................. 83 程序运行平台 ............................................................................................................................. 111.开发环境 ................................................................................................................... 112.运行环境 ................................................................................................................... 114.模块分析 ..................................................................................................................................... 124.1 主界面模块 ..................................................................................................................... 124.2 棋盘的设计模块 ............................................................................................................. 134.3 棋盘的鼠标事件操作模块 ............................................................................................. 144.4 五子棋棋子设计模块 ..................................................................................................... 154.5 五子棋的胜负判断模块 ................................................................................................. 154.6 五子棋的人工智能模块 ................................................................................................. 175.系统测试 ..................................................................................................................................... 216.结论............................................................................................................................................. 25致谢................................................................................................................................................. 26参考文献 ......................................................................................................................................... 27 摘要近来,随着计算机的快速发展,以计算机作为对战平台,各种棋类游戏如雨后春笋般纷纷冒出,使得那些喜爱下棋,有常常苦于没有对手的棋迷们能随时过足棋瘾,而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军—卡斯帕罗夫的“深蓝”便是最具说服力的代表。当我们与电脑对战对时,您知道这些软件是怎样像人脑一样进行思考的吗?总的来说(我们假定您熟悉五子棋的基本规则),要让电脑知道该在哪一点下子,就要根据盘面的形式,为每一可能落子点计算其重要程度,也就是当这子落下后会形成什么模型,然后通览全盘选出最重要的一点,这便是最基本的算法。当然,仅靠当前盘面进行判断是远远不够的,这样下棋很容易掉进玩家设下的陷阱,因为它没有考虑以后的变化。所以在此基础上我们需要使用好的算法是电脑能预测出今后几步的各种走法,以便做出最佳选择,这也是我们下棋时常说的“想了几步”。怎样才能达到这个程度呢?这是本文所要讨论的主要问题。作为一个五子棋游戏爱好者,在使用了众多的五子棋游戏软件后,发现当今大多数五子棋游戏软件中电脑的AI(人工智能)值不是很高,难与人脑抗衡,这是基于以上的最基本算法扩展而出的电脑最优落子算法不够优秀而造成的。本人使用JAVA语言作为开发工具,在吸收别人所编的五子棋游戏软件的基础上,再融入自己的创新思想(最优落子算法的改进),编写了这个五子棋游戏,软件实现了人机对弈和双人对弈的功能,游戏软件界面美观,操作容易,电脑的AI值也较高。关键字:五子棋、人工智能、JAVA21 引
言1.1 问题的提出五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。1.2国内外研究的现状近来,随着计算机的快速发展,以计算机作为对战平台,各种棋类游戏如雨后春笋般纷纷冒出,使得那些喜爱下棋,有常常苦于没有对手的棋迷们能随时过足棋瘾,而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军—卡斯帕罗夫的“深蓝”便是最具说服力的代表。当我们与电脑对战对时,您知道这些软件是怎样像人脑一样进行思考的吗?总的来说(我们假定您熟悉五子棋的基本规则),要让电脑知道该在哪一点下子,就要根据盘面的形式,为每一可能落子点计算其重要程度,也就是当这子落下后会形成什么模型,然后通览全盘选出最重要的一点,这便是最基本的算法。当然,仅靠当前盘面进行判断是远远不够的,这样下棋很容易掉进玩家设下的陷阱,因为它没有考虑以后的变化。所以在此基础上我们需要使用好的算法是电脑能预测出今后几步的各种走法,以便做出最佳选择,这也是我们下棋时常说的“想了几步”。怎样才能达到这个程度呢?这是本文所要讨论的主要问题。作为一个五子棋游戏爱好者,在使用了众多的五子棋游戏软件后,发现当今大多数五子棋游戏软件中电脑的AI(人工智能)值不是很高,难与人脑抗衡,这是基于以上的最基本算法扩展而出的电脑最优落子算法不够优秀而造成的。本人使用JAVA语言作为开发工具,在吸收别人所编的五子棋游戏软件的基础上,再融入自己的创新思想(最优落子算法的改进),编写了这个五子棋游戏,软件实现了人机对弈和双人对弈的功能, 3游戏软件界面美观,操作容易,电脑的AI值也较高。1.3 人工智能1.3.1 五子棋数学思想可能很少有人注意到,五子连珠游戏其中包含着一个极为深刻的数学问题。为什么不是四子连珠,或者是六子连珠?你可能会说,四子连珠,那就太容易啦,下几步就胜了。而六子连珠呢,则太难了,谁也别想连成。这就说明,五子连珠极可能是一个最佳攻守平衡值,一个达成连珠的最大值。增一子、减一子都会打破这个平衡。四子连珠太易,攻方处于绝对优势;而六子连珠太难,守方处于绝对优势。而游戏规则必须是让游戏双方处于平等的位置才可能进行,否则游戏就不成其为游戏。要想黑白棋连珠成为一种符合游戏规则的智力游戏,五子连珠无疑是一个最佳方案。中华民族的祖先在发明五子连珠的过程中,猜想肯定也不是一蹴而就,而是极可能经历了四子连珠、六子连珠的尝试过程,最后才确定为五子连珠,并流行开来。这个问题,被当代科普作家傅小松称之为五子连珠问题,又称五子连珠猜想。其准确表述是:在以横线、竖线互相交叉(一般各为15条)的方形平面(棋盘)中,黑白两种“点”(棋子)先后沿横线、竖线排列(行棋),在平面(棋盘)横线、竖线、斜线(无实线连接)上形成连续的同色“点”(棋子),五个“点”(棋子)为可能达成连珠的最大值。五子连珠是黑白棋连珠的一个最佳方案,这在实际中早已不会有人怀疑。并且,五子连珠已经存在并发展了几千年,成为了一种趣味性强,同时技巧比较复杂、竞争激烈的棋类游戏,与围棋、国际象棋、中国象棋的巧妙性、复杂性也有一拼。这似乎足以证明五子连珠的最佳性。但从科学真理的角度看,一万次实践的证明也不能代替逻辑和数学上的证明。要确定五子连珠是黑白棋连珠的一个最佳方案,五子连珠是一个最佳值、最大值,必须进行数学上的证明。“五子连珠问题”的证明可能非常复杂,这是因为,第一,它不是一个静态的问题,而是一个动态的问题。棋盘是一个静态的二维平面,但行棋博弈是一个的动态的过程。第二,这不是一个线性和确定性问题的,而是一个非线性和模糊性问题。所谓“五子连珠”的最佳值,是在千变万化的攻与防中达到 4的一种默契。因此,要解决“五子连珠猜想”,可能要运用到博弈论、模糊数学等工具。1.3.2 五子棋人工智能人工智能(Artificial Intelligence,简称AI)是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪(基因工程、纳米科学、人工智能)三大尖端技术之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。1.4 任务与分析设计一程序能完成五子棋游戏功能。五子棋规则:双方各执一色棋子,轮流下子(即将棋子放在棋盘的任一空交叉点上),直到有一方的棋子有5个排成一线(无论是横向、竖向还是斜向均可),则棋局结束,该方胜利。(1)设计游戏的核心算法;(2)设计可视化的界面且双方所使用的两色棋子和彩色棋盘得体大方、比例当;(3)双方轮流用键盘或鼠标下子。只有当鼠标单击在棋盘网格交叉点附 5近时才可下子,点击其他地方及已有子的位置不能下子,且应给出相应提示; 62.总体设计方案2.1 算法设计2.1.1 总体框架图 图2.1.1 系统总体框架图72.1.2 五子棋胜负判断算法五子棋的胜负(该软件默认是人下黑棋,电脑下白棋),在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图下图所示: 图11 判断胜负方向 2.1.2
算法流程图每当在棋盘上下一个棋子后,需要判断这个棋子的四个方向是否有连续的五个同色的棋子出现,这个需要一个二维数组来存储来存每个棋盘的坐标的颜色,还需要在每次下了棋子之后,遍历该棋盘的所有获胜的组合,来实现判断胜负。 2.1.2 五子棋人工智能算法当人下了一个棋子之后(人作为后手的第一次除外),电脑需要对棋盘进行全面的评估。1、获胜组合是一个三维数组,它记录了所有取胜的情况。也就是说,对于每一个落子坐标,获胜的组合一共有15 * 11 * 2 + 11 * 11 * 2 = 572种。而对于每个坐标的获胜组合,应该设置一个[15][15][572]大小的三维数组。 在拥有了这些获胜组合之后,就可以参照每个坐标的572种组合给自己的局面和玩家的局面进行打分,也就是根据当前盘面中某一方所拥有的获胜组合多少进行权值的估算,给出最有利于自己的一步落子坐标。由于是双方对弈,所以游戏的双方都需要一份获胜组合,也就是:private boolean[][][] white_Win = new8boolean[15][15][572];//电脑的获胜组合private boolean[][][] black_Win = newboolean[15][15][572];//人的获胜组合在每次游戏初始化的时候,需要将每个坐标下可能的获胜组合都置为true。 此外,还需要设置计算机和玩家在各个获胜组合中所填入的棋子数: private int[][] win_Count = new int[2][572];//int[0][X] 为人(黑棋)的获胜组合中的棋子数// int[1][X] 为电脑(白棋)的获胜组合中的棋子数在初始化的时候,将每个棋子数置为0。2、每当一方落子后,都需要作如下处理:如果己方此坐标的获胜组合仍为true,且仍有可能在此获胜组合处添加棋子,则将此获胜组合添加棋子数加1;如果对方此坐标的获胜组合仍为true,则将对方此坐标的获胜组合置为false,并将对方此获胜组合添加棋子数置为-1(不可能靠此组合获胜)。白棋为例:for (int i = 0; i & 572; i++) { } if (white_Win[x][y][i] && win_Count[1][i] != -1) {
} if (black_Win[x][y][i]) {
} black_Win[x][y][i] = win_Count[0][i] = -1; win_Count[1][i]++;3、该电脑下棋的时候需要遍历棋盘所有的没有棋子的坐标4、找出该坐标然后进行下子打分,如果该坐标的获胜组和仍为true,则进 9行下白棋打分和下黑棋打分,基于攻击和防守的全面性,如果哪个棋子的分高就记录这个棋子的坐标,然后再此坐标上下白棋。103 程序运行平台1.开发环境? AMD .0GHz,1G内存,160G硬盘? Microsoft(R) Windows(TM) XP Professional? 语言:JAVA? 平台:Eclipse2.运行环境? Intel(R) Pentium(R) 2及以上处理器,32M以上内存,4G以上硬盘 ? Microsoft(R) Windows(TM) 9X/NT操作系统? 800*600或以上的屏幕分辨率114.模块分析4.1 主界面模块该模块设计思想是:将java的swing包导入,定义一个类实现主界面,在主窗口中添加菜单栏,在菜单项中添加事件的监听,当点击某个菜单项时,触发特定的事件,实现程序的开始和关闭。class ChessFrame extends JFrame {public static boolean computer_Start = public ChessFrame() {super.setTitle("五子棋");super.setSize(800, 800);super.setBackground(Color.WHITE);JMenu menuFile = new JMenu("菜单");JMenu newItem = new JMenu("新游戏");JMenuItem newItem_1 = new JMenuItem("先手");JMenuItem newItem_2 = new JMenuItem("后手");newItem.add(newItem_1);newItem.add(newItem_2);JMenuItem openItem = new JMenuItem("打开");JMenuItem closeItem = new JMenuItem("保存");JMenuItem exitItem = new JMenuItem("退出"); newItem_1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("===选择了“新游戏==先手”菜单项");
newGame();ImagePanel.flag_NewGame = }});newItem_2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("===选择了“新游戏==后手”菜单项");
newGame();computer_Start =}}); openItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("===选择了“打开”菜单项");}12 }
} closeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("===选择了“保存”菜单项");
} }); exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("===选择了“退出”菜单项");
System.exit(0);
} }); menuFile.add(newItem); menuFile.add(openItem); menuFile.add(closeItem); menuFile.add(exitItem); JMenuBar menuBar = new JMenuBar(); menuBar.add(menuFile); super.setJMenuBar(menuBar); ImagePanel imagePanel = new ImagePanel(); super.add(imagePanel); super.setVisible(true); super.setResizable(false); super.setLocationRelativeTo(getOwner()); public void newGame() {
super.dispose();
T.start(); }4.2 棋盘的设计模块定义一个类(class ImagePanel extends JPanel implements MouseListener)这个类中画一个棋盘(棋盘以图片的形式存储在D盘的根目录下),通过覆写paint()方法实现,再把当前的类加载到主界面上,当初始化主界面的时候,JAVA默认会调用paint()方法: public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) 13 }
super.paintComponent(g2); //String picPath = "image/qipan.jpg"; String picPath = "d:" + File.separator +"qipan.jpg" ; Icon img = new ImageIcon(picPath); img.paintIcon(this, g, 121, 121);4.3 棋盘的鼠标事件操作模块由于棋盘添加了鼠标的监听事件,故在棋盘上的鼠标操作方法都要覆写,对当前下子采取鼠标的左键事件操作,当人点击鼠标的左键时(getButton()方法),触发左键事件,获得当前的坐标(getPoint() 方法),如果坐标在棋盘上,则继续计算该坐标和哪个交叉点最近,则把最近的交叉点记录下来:public void mouseClicked(MouseEvent e) { if (flag_NewGame) {
int c = e.getButton(); String mouseInfo = if (c == MouseEvent.BUTTON1) {
mouseInfo = "左键"; Point p = e.getPoint(); System.out.println(p.toString()); int x = (int) p.getX(); int y = (int) p.getY(); int xx = 0; int yy = 0; if (x &= 140 && x &= 630 && y &= 140 && y &= 630) {
int quotient_X = (x - 140) / 35; int compliment_X = (x - 140) % 35; int quotient_Y = (y - 140) / 35; int compliment_Y = (y - 140) % 35; if (compliment_X &= 17) { 14 xx = (quotient_X) * 35 + 140; } else if (compliment_X & 17) {
} if (compliment_Y &= 17) {
yy = (quotient_Y) * 35 + 140; quotient_X = quotient_X + 1; xx = quotient_X * 35 + 140; } else if (compliment_Y & 17) {
} System.out.println(xx + "---" + yy); quotient_Y = quotient_Y + 1; yy = quotient_Y * 35 + 140;4.4 五子棋棋子设计模块当记录下当前的坐标后,就要对棋盘进行画棋子(白棋和黑棋的绘制): 黑棋为例: public void paint_BLACk(Graphics g, int xx, int yy) {
} Graphics2D g2 = (Graphics2D) g2.setColor(Color.BLACK); g2.setStroke(new BasicStroke(2)); g2.fillArc(xx - 14, yy - 14, 30, 30, 0, 360);4.5 五子棋的胜负判断模块当任意的一方下子后都要判断这个棋子的四个方向是否组成五个相同的颜色的棋子(chess[][]存储当前棋盘所有的坐标棋子情况):public boolean isWin(int x, int y, int temp) {/*X为横坐标,Y为纵坐标,temp为当前颜色,chess[][]=0表示当前坐标没有棋子,chess[][]=1表示当前坐标为黑棋,chess[][]=2表示当前坐标为白棋*/ for (int i = 0; i & 11; i++) {//横
if (chess[i][y] == temp && chess[i + 1][y] == temp
&& chess[i + 2][y] == temp && chess[i + 3][y] == temp 15 }
&& chess[i + 4][y] == temp) { for (int j = 0; j & 11; j++) {//竖
} for (int m = 4; m & 15; m++) {//左斜
} for (int p = 0; p & 11; p++) {//右斜
for (int q = 0; q & 11; q++) {
} 16 if (chess[x][j] == temp && chess[x][j + 1] == temp
&& chess[x][j + 2] == temp && chess[x][j + 3] == temp && chess[x][j + 4] == temp) { for (int n = 0; n & 11; n++) {
} if (chess[m][n] == temp && chess[m - 1][n + 1] == temp
&& chess[m - 2][n + 2] == temp && chess[m - 3][n + 3] == temp && chess[m - 4][n + 4] == temp) { if (chess[p][q] == temp && chess[p + 1][q + 1] == temp
&& chess[p + 2][q + 2] == temp && chess[p + 3][q + 3] == temp && chess[p + 4][q + 4] == temp) { } }4.6 五子棋的人工智能模块1、获胜组合是一个三维数组,它记录了所有取胜的情况。也就是说,对于每一个落子坐标,获胜的组合一共有15 * 11 * 2 + 11 * 11 * 2 = 572种。而对于每个坐标的获胜组合,应该设置一个[15][15][572]大小的三维数组。 在拥有了这些获胜组合之后,就可以参照每个坐标的572种组合给自己的局面和玩家的局面进行打分,也就是根据当前盘面中某一方所拥有的获胜组合多少进行权值的估算,给出最有利于自己的一步落子坐标。由于是双方对弈,所以游戏的双方都需要一份获胜组合,也就是:private boolean[][][] white_Win = newboolean[15][15][572];//电脑的获胜组合private boolean[][][] black_Win = newboolean[15][15][572];//人的获胜组合在每次游戏初始化的时候,需要将每个坐标下可能的获胜组合都置为true。 此外,还需要设置计算机和玩家在各个获胜组合中所填入的棋子数:private int[][] win_Count = new int[2][572];//int[0][X] 为人(黑棋)的获胜组合中的棋子数// int[1][X] 为电脑(白棋)的获胜组合中的棋子数在初始化的时候,将每个棋子数置为0。2、每当一方落子后,都需要作如下处理:如果己方此坐标的获胜组合仍为true,且仍有可能在此获胜组合处添加棋子,则将此获胜组合添加棋子数加1;如果对方此坐标的获胜组合仍为true,则将对方此坐标的获胜组合置为 17false,并将对方此获胜组合添加棋子数置为-1(不可能靠此组合获胜)。白棋为例: for (int i = 0; i & 572; i++) { } if (white_Win[x][y][i] && win_Count[1][i] != -1) {
} if (black_Win[x][y][i]) {
} black_Win[x][y][i] = win_Count[0][i] = -1; win_Count[1][i]++;3、该电脑下棋的时候需要遍历棋盘所有的没有棋子的坐标4、找出该坐标然后进行下子打分,如果该坐标的获胜组和仍为true,则进行下白棋打分和下黑棋打分,基于攻击和防守的全面性,如果哪个棋子的分高就记录这个棋子的坐标,然后再此坐标上下白棋。核心代码: private int[][] win_Count = new int[2][572]; private boolean[][][] white_Win = new boolean[15][15][572]; private boolean[][][] black_Win = new boolean[15][15][572]; private void computer_chess() {
int[][] black_Score = new int[15][15]; int[][] white_Score = new int[15][15]; int white_Temp_Score = 0; int black_Temp_Score = 0; int white_x = 0; int white_y = 0; int black_x = 0; int black_y = 0; 18
for (int i = 0; i & 15; i++) {
for (int j = 0; j & 15; j++) {
white_Score[i][j] = 0; if (chess[i][j] == 0) {
} black_Score[i][j] = 0; if (chess[i][j] == 0) {
for (int k = 0; k & 572; k++) {
if (black_Win[i][j][k]) {
switch (win_Count[0][k]) { 19 for (int k = 0; k & 572; k++) {
} if (white_Win[i][j][k]) {
} switch (win_Count[1][k]) { case 1:
white_Score[i][j] += 5; case 2:
white_Score[i][j] += 50; case 3:
white_Score[i][j] += 180; case 4:
} white_Score[i][j] += 400; }
black_Score[i][j] += 6; case 2:
black_Score[i][j] += 52; case 3:
black_Score[i][j] += 181; case 4:
} black_Score[i][j] += 410; for (int i = 0; i & 15; i++) {
for (int j = 0; j & 15; j++) {
if (chess[i][j] == 0) {
if (white_Score[i][j] &= white_Temp_Score) {
} if (black_Score[i][j] &= black_Temp_Score) {
black_x = black_y = black_Temp_Score = black_Score[i][j]; 20 white_x = white_y = white_Temp_Score = white_Score[i][j]; }
} if (white_Temp_Score &= black_Temp_Score) {
x = white_x; y = white_y;
} } } else {
} paint_WHITE(this.getGraphics(), x * 35 + 140, y * 35 + 140); white_Opera(x, y); x = black_x; y = black_y;5.系统测试1.先将tupian.jpg 放到 D:\ 下,运行Eclipse,打开FiveChess.java 文件,点击运行,出现主界面:21 图5.1.1主界面2.点击先手,开始: 图5.1.1先手开始 223.、点击棋盘的位置,然后下棋,当点击以下过棋子的地方,则提示: 图5.1.2下棋界面 图5.1.3提示界面234、当一方的五个相同的棋子连成一条线,则胜: 图5.1.4获胜界面246.结论首先我对本次的课程设计,我认为这次的重点便是人工智能算法的研究,发现电脑不是我们想象当中的那么好,其实电脑是很笨的,当我们给了他一个很好的算法之后,他就变得很聪明了,而算法的精髓在与数学和计算机的完美结合,一个好的算法可以解决很多很大的问题。算法的世界很广,一个优秀的程序员是不够的,要懂得很多很好的算法才能让我们的代码更有价值。通过这门课的学习能够更好地掌握算法设计与分析的理论部分的内容,同时将理论运用于实践,提高综合应用算法设计的能力,通过分析算法进而对算法进行优化。经过这一阶段的训练,使学生得到抽象能力、演绎推理能力、综合概括能力的提高。 25致谢对于本次的课程设计,我要感谢很多的老师和同学,在他们的帮助我顺利的完成了本次的课程设计。首先是算法设计的老师,他讲课的方式很不一样,使得我每次上他的课都格外的认真。他总是给我们仔细的讲解各个知识点,然后给我们提供其他的参考资料,让我们下了课以后方便自己学习。还有就是我这次的课程设计指导老师,我们有什么问题直接找他,他总是可以帮我们解决。还有就是我的几个同学,在编辑程序的方便,他们给了我很多的帮助,帮助我讲解很多程序的编写格式。总之,谢谢大家的帮助。26参考文献[1]
《算法设计与分析》 宋
文等编 重庆大学出版社,2001。[2]
《算法设计与分析》 周培德
电子工业出版社,
《算法设计与分析》 王晓东
电子工业出版社,
《算法设计与分析(第2版)》吕国英 等 清华大学出版社.2009[5]
《算法设计与分析》 周培德
电子工业出版社,2000。27
欢迎转载:
推荐:    

我要回帖

更多关于 发颤的颤怎么写 的文章

 

随机推荐