象棋棋盘各个含义,比如马这个棋子,在棋盘里有什么用

上传时间:
中国象棋棋子与棋盘的介绍与讲解
56官方微信
扫一扫发现精彩宋代象棋棋子棋盘及规则的介绍
宋代象棋棋子棋盘及规则的介绍
宋代象棋棋子棋盘及规则的介绍
宋代时,人们有着丰富的文娱活动,在当时诸如说唱、舞蹈、杂技、武术、相扑、围棋等活动都受到人们的喜爱,在这些文娱活动之外,象棋也受到了人们的青睐。象棋在宋朝人的娱乐生活中扮演着相当重要的角色,当时的王公、士大夫、平民都很喜爱象棋,人们在用象棋娱乐生活的同时,也对当时象棋的制式进行了许多改进,使象棋在宋代迎来了它发展的重要时期。
宋代及宋代之前的象棋发展象棋棋谱,在古代又称为象戏,在我国出现的时间很早。战国时的《楚辞·招魂》篇便有记载:“艺该象棋,有六博些。分曹并进,道相追些。成枭而牟,呼五日些。”不过当时的象棋与现代象棋的制式并不相同,只是一种掷采行棋角胜的局戏。在这之后,象棋一直缓慢发展。南北朝时的北周武帝,曾制《象经》,将象棋棋子分为天文地理等十二类,与现代的象棋多有不同。唐朝后期的大臣牛僧孺曾记载了一种象棋,在他的记载中出现了 “一马斜去三尺止,又一步卒横出一尺”(高承:《事物纪原-博弈嬉戏部四十八》)的象棋棋子游戏规则。可见在唐朝后期,象棋的游戏方式已经与现代象棋有了相类似之处,不再是靠掷采行棋角胜的局戏了。
象棋在宋代迎来了其发展的黄金时期,当时的象棋爱好者为了使象棋更有游戏性、趣味性、娱乐性,进一步改进了当时的象棋,使宋朝的象棋出现了众多制式,如大象戏、小象戏、广象戏和七国象棋等,并最终产生了与现代象棋相似的制式。
在北宋中前期,称为大象戏的象棋制式是当时的主要形式。据晁补之《鸡肋集》卷三五记载:“余为儿时,无他弄,见设局布棋??盖局纵横路十一,棋三十二为两军耳。”这种象棋由两人进行游戏,棋盘纵横各11路,共有棋子32枚。晁补之在此基础上对象棋进行了一些改进,使棋盘更为宽阔。当时的其他人也对象棋进行了改善,如司马光的七国象棋等。
司马光、晁补之生活在北宋中叶,随着他们引发的改进象棋棋谱的潮流,一种与现代象棋相类似的制式也应在此时出现,并受到当时象棋游戏者的欢迎,又经后人加工,形成现代象棋的制式,流传至今。在1983年江油市出土的“宋代窑藏”文物中,有两副珍贵的宋徽宗时期铜制象棋。其中有一副完整的当时象棋棋子,每一方各有卒5枚,象、马、炮、车、士各2枚,将1枚,共32枚,与现代象棋的棋子完全相同(曾昌林:《宋代铜质中国象棋浅析》)。这批文物的发现可以说明北宋末时的象棋棋子已与现代象棋相同。而与现代象棋制式相似的棋盘也应在北宋末南宋初时出现。它的出现也许和宋朝时另一种棋类游戏“打马”有一定的关系。根据记载,打马出现于三国时期,魏曹植始制,到宋朝时由于著名词人李清照写有《打马图序》而为人所知。打马有着多种形式,是一种靠投掷色子而进行的游戏,其棋子也与象棋有着很大的不同,诸如:“一将十马者”,或“无将二十马者”(李清照:《打马图序》)。可在李清照记载的打马中,有一种样式的棋盘图与现代象棋的棋盘几乎相同。打马与象棋在当时是两种不同的棋类游戏,如“大小象戏、弈棋,又惟可容二人,独采选、打马特为闺房雅戏”,“世间玩戏之具惟奕盛传,其次则象戏,又次则抹牌,近刻打马图人少习之”(李清照:《打马图序》)。而在打马中出现类似现代象棋的棋盘,应该有两种可能:其一,象棋发展到北宋中晚期时,当时的人们借鉴了打马的这种棋盘并将其改进,使当时大象戏的32枚棋子融人其中,最终形成了现代象棋的雏形;其二,北宋中晚期时已经出现了现代象棋的雏形,打马参照了当时已经出现的这种象棋棋盘,将其融入打马游戏中。
可见在北宋时,与现代象棋制式相似的棋子和棋盘已经形成,其行棋规则经后世之人逐渐完善后,最终流传下来。
网友还在看
”),这里特指是仕(士)相(象)和五个兵卒,这使得其他子力的活动也具有“定域”性。国际象棋则完全不同,任何棋子(除了小兵)都可以走遍棋盘的任何位置,所以子力的活动是“离域”的。在局面分析上,中国象棋更简明,之丰富是其他棋子无法比拟的,所以把炮称谓中国象棋的灵魂,这话一点也不过分。4.棋盘的三维空间无论是中国象棋还是国际象棋,棋盘都是平面的,为什么称为“三维空间”呢?这是因为棋子的行走路线除了直线和横线,中国象棋和国际象棋的大多数子可以建立对应关系,这种对应关系可以根据棋子的作用来确定:帅(将)(中国象棋)——王(国际象棋),马——马,车——车,炮——象(稍后解释为什么把炮和象对应起来),兵(卒,)——兵。在这些对应关系中,只有车的走法是完全一样的,其他棋子走法的差别形成了中国象棋和国际象棋阵形上的不同。这主要表现在以下几点:1.棋子的活动范围中国象棋的某些棋子占有固定的位置(称为“定域,线,所以线路是人为开辟的,要占领线路,首先要使用开线战术。3.灵魂棋子行走方法和攻击方法不同的子称为灵魂棋子。众所周知,国际象棋的灵魂是兵,而中国象棋中这种提法却不多,但是无论开局、残局还是杀法,炮的用法,清晰,国际象棋更复杂,变数大。2.线路和阵形中国象棋由于“定域”成分大,所以线路是天然形成的,利于长兵器车和炮的活动。利于炮发挥火力的线路是五路(中炮)和三七路(卒底炮、五七炮等),利于车炮活动的线路是二八,路(直车、进炮封车等)和四六路(也称肋道)(横车、仕角炮、五六炮等)。天然线路是双方争夺的焦点,包括直线和横线。国际象棋根本没有天然线路,所有的线路全部被兵阵所封闭,只有兵的兑换才会产生半开放线和开放,以外,还有第三种方式。很显然,国际象棋的第三维是斜线,在兵形相对完整的情况下,斜线是首先考虑开发的线路,是国际象棋的大动脉。中国象棋则有三个独特的概念——马腿、象眼和炮架子,在短兵相接时,此三者必然主导,着局势的发展,隐藏在纵横交错的格子中,很难理出头绪来,这就是中国象棋局势的复杂之处,也是中国象棋的乐趣所在。在国际象棋和中国象棋的“第三维”中,扮演重要角色的分别是象和炮,这两个子存在微妙的对应关系, 5. 防御体系 在中国象棋中,帅(将)依靠仕(士)和相(象)来保护,所以在开局的首尾阶段往往会支起仕(士)和相(象),确保帅(将)的安全。国际象棋中,王车易位后王被换到g线,f g h三兵承担着保护王
之《鸡肋集》卷三五记载:“余为儿时,无他弄,见设局布棋??盖局纵横路十一,棋三十二为两军耳。”这种象棋由两人进行游戏,棋盘纵横各11路,共有棋子32枚。晁补之在此基础上对象棋进行了一些改进,使棋盘更为宽阔,与现代象棋的棋子完全相同(曾昌林:《宋代铜质中国象棋浅析》)。这批文物的发现可以说明北宋末时的象棋棋子已与现代象棋相同。而与现代象棋制式相似的棋盘也应在北宋末南宋初时出现。它的出现也许和宋朝时另一种棋类,中晚期时,当时的人们借鉴了打马的这种棋盘并将其改进,使当时大象戏的32枚棋子融人其中,最终形成了现代象棋的雏形;其二,北宋中晚期时已经出现了现代象棋的雏形,打马参照了当时已经出现的这种象棋棋盘,将其融入,打马游戏中。可见在北宋时,与现代象棋制式相似的棋子和棋盘已经形成,其行棋规则经后世之人逐渐完善后,最终流传下来。,南北朝时的北周武帝,曾制《象经》,将象棋棋子分为天文地理等十二类,与现代的象棋多有不同。唐朝后期的大臣牛僧孺曾记载了一种象棋,在他的记载中出现了 “一马斜去三尺止,又一步卒横出一尺”(高承:《事物纪原,-博弈嬉戏部四十八》)的象棋棋子游戏规则。可见在唐朝后期,象棋的游戏方式已经与现代象棋有了相类似之处,不再是靠掷采行棋角胜的局戏了。象棋在宋代迎来了其发展的黄金时期,当时的象棋爱好者为了使象棋更有游戏性,形成现代象棋的制式,流传至今。在1983年江油市出土的“宋代窑藏”文物中,有两副珍贵的宋徽宗时期铜制象棋。其中有一副完整的当时象棋棋子,每一方各有卒5枚,象、马、炮、车、士各2枚,将1枚,共32枚,游戏“打马”有一定的关系。根据记载,打马出现于三国时期,魏曹植始制,到宋朝时由于著名词人李清照写有《打马图序》而为人所知。打马有着多种形式,是一种靠投掷色子而进行的游戏,其棋子也与象棋有着很大,的不同,诸如:“一将十马者”,或“无将二十马者”(李清照:《打马图序》)。可在李清照记载的打马中,有一种样式的棋盘图与现代象棋的棋盘几乎相同。打马与象棋在当时是两种不同的棋类游戏,如“大小象戏、弈棋,又惟可容,二人,独采选、打马特为闺房雅戏”,“世间玩戏之具惟奕盛传,其次则象戏,又次则抹牌,近刻打马图人少习之”(李清照:《打马图序》)。而在打马中出现类似现代象棋的棋盘,应该有两种可能:其一,象棋发展到北宋
有关象棋介绍网上有很多,这里游戏茶苑给大家介绍下中国象棋这个棋牌游戏的棋盘和棋子的一些相关基础知识。希望象棋初学者能通过本篇文章的介绍,对象棋棋盘和棋子有所了解。更快速的融入象棋这项智力棋牌游戏,中。象棋(为区别于国际象棋,也称中国象棋)棋盘由九道直线和十道横线交叉组成。棋盘上共有九十个交叉点,棋子就在这些交叉点上摆放和活动。双方都从自己的右边数起,红方的一路纵线就是黑方的9路纵线,二是8,依次类推, 从孤立、静止的角度看,象棋七兵种具有不同的价值。根据经验大致如下:车9分、炮4.5分、马4分、象2分、士2分、兵1分、过河兵2分。 胜负和的判定 一方棋子攻击对方的将帅,并在下一着要把它吃掉,称为, 棋盘中间没有划通直线的地方,叫做“河界”;划有斜交叉线的地方,叫做“九宫”。棋子共有三十二个,分为红黑两组。红黑各有七个兵种。红子包括帅一个、车马炮 仕相各两个,兵五个;黑子包括将一个、车马炮士象各两个,都不能后退。走一着棋时,如果自己的棋子能够走到的位置有对方棋子存在,就可以把对方的棋子吃掉并占领那个位置。除了将帅以外,其它棋子都可以听任对方吃掉,或主动送吃。吃子的一方,必须把吃掉的棋子从棋盘上拿走,、卒五个。红方着法用大写数字一到九表示。黑方着法用阿拉伯数字1到9表示。完整记录是将每一着棋用四个字表示,第一个字是棋子的名称,如“车”、“卒”、“相”等;第二个字是棋子所在直线的号码,如“三”、“5”等;第三个字是棋子的运动方向,对双方相对而言,向前走为“进”,向后走为“退”,横向走为“平”。第四个字是棋子进、退的步数(纵向走棋时)或 是到达直线的号码(横向、斜向走棋时)。红车往前走三步吃卒叫车一进,先行,双方轮流各走一着,直至分出结果。轮到走棋的一方,将某个棋子从一个交叉点走到另外一个交叉点,或者吃掉对方的棋子而占据其交叉点,都视为走了一着。双方各走一着,称为一个回合。帅、将每一着只允许走一步,两步,可进可退,俗称走田字。当田字中心有其它棋子时,俗称塞相、象眼,则不许走过去。马每着走一直一斜或一横一斜,可进可退,俗称马走日。如果在要去的方向有其它棋子挡道,俗称蹩马腿,则不许走过去。车每一着,可以直进直退横走不限制步数。炮在不吃子的时候,走法同车一样。吃子时必须隔一个棋子跳吃,俗称炮打隔子。兵卒在没有越过河界前,每着只允许向前直走一步;越过河界之后,每着可以向前直走或横走一步,但任何时候
在中国的棋牌游戏里,象棋独树一帜,以悠久的历史毅然决然的姿态矗立在那里。它的棋子不多,需要的玩家也只要两个即可,但棋盘上却有着千变万化。今天,亲朋棋牌带领大家一起了解了解象棋棋盘上的术语吧。九宫,:这就是将(帅)可以走动的地方,也就是棋盘上的“米字格”,这里常为自己最后的防守,九宫沦陷,就差不多该输了。中线:棋盘上九条线的最中间的一条竖线,也就是第五条线。肋道:这是表示中间旁边的两条竖向线路,就是第四和第六条直线。 边线:这表示棋盘的第一条和第九条竖直线。 河界限:这是与九条直线垂直的第五条线。在将帅的正中间。 宫顶线:这是第三条横线。也就是九宫里最上面那条边的线。 底二路:这是宫顶线的后一条线
介绍这个蒙古象棋的棋盘。蒙古象棋有两种,我们主要介绍常见的一种,也就是8x18格的。蒙古象棋和国际象棋一样,也是一个正方形的棋盘。它是由一黑一白的两种颜色交替的六十四个方格组成。黑白各32,双方个有十六颗棋子,象棋这种棋牌游戏在中国有着很深的文化基础,象棋也是亲朋棋牌里很受欢迎的一款游戏,每天很多的玩家在这里流连忘返。感受着小小棋盘上的千变万化,丰富多彩,如同生活一般。今天,在这里就给大家介绍,白色的叫做白格,黑色的叫做黑格。在国际象棋里,这个黑白是要分开的,另当别论的,然而在蒙古象棋里面,这个黑格和白格是没有差别的,都是一视同仁的,这似乎也侧面反应了蒙古族人们的豪放粗狂的一面。 更多棋牌文化
中国象棋起源于传说时代的神农氏。元代僧人念常在《佛祖历代通载》中说:“神农以日月星辰为象,唐相国牛僧孺用车、马、士、卒加炮代之为机矣”。中国象棋活动的场所,叫作“棋盘”。在方形的平面上,有九条,平行的竖线和十条平行的横线相交组成,共有九十个交叉点,棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。两端的中间,也就是两端第四条到第六条竖线之间的正方形,“1”~“9”来表示黑方的每条竖线。对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。“楚汉界河”指的是河南省荥阳市黄河南岸广武山上的鸿沟,部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。整个棋盘以“河界”分为相等的两部分。现行游戏规则规定:按九条竖线从右至左用中文数字一~九来表示红方的每条竖线,用阿拉伯数字
我们在玩游戏茶苑疯狂斗地主的时候有记牌和猜牌之说,那同样在玩五子棋的时候也存在着棋盘,棋子的记谱方法:相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了五子棋。早在,公元595年古人就用瓷来烧制五子棋盘了。千百年来,人们用各种材质来制造围棋的棋子,如:玻璃、瓷器、玉、玛瑙、铜等等。古代五子棋棋盘与围棋棋盘是通用的,汉魏时为十七路(17×17)棋盘,至南北朝时即已,和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。五子棋棋子亦称“棋石”分黑、白两色,形状为扁圆形,有一面凸起或两面凸起等形状,厚度不超过0.8厘米,直径为2.0~2.3厘米;一副棋子总数为225枚,其中黑子113枚,白子112枚。按质地的不同,可分为玻璃、陶瓷、塑料、智石、磁铁、蛤贝、烧料、水晶、玛瑙、玉石等棋子。 国内质量比较好的是云子,而日本常用的棋子是贝壳制作的。 五子棋正规的记谱方法,流行十九路(19×19)棋盘,直至1931年,才出现所谓五子棋专用棋盘,如图所示,为十五路(15×15)棋盘,形状近于正方形,平面上画横竖各15条平行线,线路为黑色,构成225个交叉点,邻近两个交点,的距离纵线约为2.5厘米,横线约为2.4厘米。棋盘正中一点为“天元”。棋盘两端的横线称端线,棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元,为用“五子棋稿纸”,即专供五子棋爱好者记录对局或着法的稿纸。其上印有正规专用棋盘图形,记录时只要按相应位置在纸上标明行棋的先后,即可反映对局的进行过程。非正规的记谱方法为用格子纸记录,即用单数1、3、5等记录黑
对于楚河汉界的游戏限制,玩家们各个棋子的走棋规则,玩家们合理的使用不同的技巧,来吃卒保车,这也是诸多的玩家们,必须要学会的游戏走棋技能。 所以说无论是何种游戏的玩家,从开始学习中国象棋棋盘游戏的时候,都是需要,有很多的玩家们,都是比较喜欢中国象棋棋盘游戏玩法,就是因为这种游戏,具备一定的深度,特别是是在用于计谋和策略的方向上,更加的具备一定的参与优势,对于那些攻心为上的玩家眼里,这种游戏的方式,更加的如,何这类高深玩家们的心理行为方式。加上这种中国象棋棋盘游戏,具备一定的简单性,能够符合所有的玩家们选择,无论是初学者玩家,还是象棋对弈的高手,都是可以从走其中,获得更多的盈利取胜机会,毕竟这样的游戏玩法,和游戏走棋方式,新手玩家们有新手的走棋方式,高手玩家们可以有高手玩家们的参与玩法。 其实中国象棋棋盘游戏,是需要玩家们对于游戏的全局,都是具备一定的掌控能力,才是可以从这样的游戏中,具备胜利的优势
一样,肯定会发生。少数坚持到最后的小兵会变得威力无比这是国际象棋特有的规则,小兵如果冲到对面底线,则可以升变为除了王和兵之外的任何棋子,我想大家都会选择变后吧。(译者注:原文此处有误,说能变成己方,如果您不懂国际象棋的走法,那这篇文章对您来说恐怕就索然无味了。如果您懂国际象棋但不写博客,那么这篇文章对您没有什么意义。如果您跟我一样既写博客又懂一点国际象棋的基本知识,那么我强烈推荐您读一下,的。在棋盘上,小兵就是小兵,它不能控制自己的存亡,但你不是一个棋子,你可以控制自己。也许你每次只能前进一格,但方向就在你自己的手里。如果你希望能坚持到最后,时刻提醒自己吧。,被吃掉的任何棋子,实际上是可以变成任何棋子无论有没有被吃掉,也就是可以出现一方有多个后的情况)我想大家都知道这个比喻的含义吧,一个博客作者如果能坚持下来,总有一天他会觉得这么久的努力没有白费。他会站,脱颖而出。这个现实你只能痛苦地接受,并像棋盘上的小兵一样有前冇后地冲锋,往正确的方向前进可以使你在棋盘上呆的更久。首先动的总是小兵开局的时候,只有骑士(马)能跳出来,除此之外就只能选择动小兵,基本上开局,第一步可以前进两格在棋盘上,小兵每个回合只能前进一格,但例外的是每个小兵的第一步,可以前进两格。记得你刚开始写博的时候么?是不是全身心地投入,把几乎所有可支配的时间都用在博客上了?你太没有耐心,太渴望
棋牌游戏应该算是一种传统的游戏,但是一直以来受到大家的喜爱。目前由于网络的运营,各种开发商都提供了棋盘游戏平台,那么我们应该怎样去判断一个棋盘游戏平台的好坏呢?这是我们选择一个好的棋盘游戏的真实性,的意义,这对我们来说是很重要的,所以在具体的使用过程中一定好很好的判断出适合我们自己的游戏平台。一个棋盘游戏平台的存在总有它生存的道理。但是一个好的棋盘游戏平台应该为用户提供健康,便捷,让人积极向上,的游戏。同时一个好的棋牌游戏平台应该提供有关棋牌游戏的影视娱乐及相关游戏网站等。当然了这些只是我们在选择棋盘游戏的时候应该要有的某些内容,但是从一些具体的方法上来看,我们还是可以拥有其他的一些内容
播放次数:1999
时间:2年前
播放次数:506
时间:2年前
播放次数:499
时间:2年前
播放次数:242
时间:2年前
播放次数:1
时间:11小时前
播放次数:17
时间:7天前
客服热线:
平台相关资讯
官方QQ群(点击加入)
用户交流群:
扫一扫加入QQ群中国象棋棋子及棋盘的绘制
时间: 23:21:47
&&&& 阅读:579
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&一.题目简介
& 本课程设计主要是使用Swing这个Java自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,可以设计棋谱,完成棋谱的保存和对已保存的棋谱的演示,方便现在爱棋人士对残局的收藏于研究,而且达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的。
1.当两方有一方将(帅)被吃掉后,程序不能自动结束或提示游戏结束,但想到该程序并不是要进行两方对弈,而是要设计棋谱所以在能力实现范围内可以允许该事件发生;
2.用户不能自动的将棋子删除,使得在摆棋谱过程中增加了工作量,必须从一开始进行,记录每一个棋子的行走过程,因为该程序给用户提供按照一定的思路设计防止其他非专业用户乱走和乱摆。
二.结对分工及过程
承& 担& 的& 任& 务
棋盘界面设计,对弈规则的实现,设计棋谱
保存下棋的步骤从而实现悔棋的实现,完成保存棋谱
1.棋子的设计;
(1)声明一个ChessPiece类,完成各个棋子的外观设计;
public class ChessPiece extends JLabel
&& Color backColor=null,foreC
&& String 颜色类别=
&& ChessBoard board=
int width,
& public ChessPiece(String name,Color fc,Color bc,int width,int height,ChessBoard board){
&&&& this.name=
&&&& this.board=
&&&& this.width=
&&&& this.height=
&&&& foreColor=
&&&& backColor=
&&&& setSize(width,height);
&&&& setBackground(bc);
&&&& addMouseMotionListener(board);
&&&& addMouseListener(board);}
&& public void paint(Graphics g){
&&&& g.setColor(foreColor);
&&&& g.fillOval(2,2,width-2,height-2);
&&&& g.setColor(Color.white);
&&&& g.setFont(new Font("隶书",Font.BOLD,28));&&&
&&&& g.drawString(name,7,height-8);
&&&& g.setColor(Color.yellow);
g.drawOval(2,2,width-2,height-2);}
&& public int getWidth(){}
&& public int getHeight(){}
&& public String getName(){}
&& public Color 获取棋子颜色(){ return foreC}
&& public void set棋子类别(String 类别){颜色类别=类别;}
& public String 棋子类别(){return& 颜色类别;}}
(2)实现各个棋子外观;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ChessBoard extends JPanel implements MouseListener,MouseMotionListener{
public ChessPoint point[][];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public int unitWidth,unitH&&&&&&&&&&&&&&&&&&&&&&&&&&&
int x轴长,y轴长;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
int x,y;&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
boolean move=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String&&&& 红方颜色="红色",黑方颜色="黑色";
ChessPiece 红车1,红车2,红马1,红马2,红相1,红相2,红帅,红士1,红士
2,红兵1,红兵2,红兵3,红兵4,红兵5,红炮1,红炮2;
ChessPiece 黑车1,黑车2,黑马1,黑马2,黑将,黑士1,黑士2,黑卒1,黑卒2,黑卒3,黑卒4,黑卒5,黑象1,黑象2,黑炮1,黑炮2;
&& int startX,startY;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& int startI,startJ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& public boolean 红方走棋=true,黑方走棋=&&&&&&&&&&&&&&
&& Rule rule=&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&
&& public& MakeChessManual record=&&&&&&&&&&&&&&&&&&&&&&&
&& public& ChessBoard(int w,int h,int r,int c){
&&&&&&& setLayout(null);
&&&&&&& addMouseListener(this);
&&&&&&& addMouseMotionListener(this);
&&&&&&& Color bc=getBackground();
&&&&&&& unitWidth=w;
&&&&&&& unitHeight=h;
&&&&&&& x轴长=r;
&&&&&&& y轴长=c;
&&&&&&& point=new ChessPoint[r+1][c+1];
&&&&&&& for(int i=1;i&=r;i++){
&&&&&&&&&&& for(int j=1;j&=c;j++){
point[i][j]=new ChessPoint(i*unitWidth,j*unitHeight,false); }}
&&&&&&& rule=new Rule(this,point);
&&&&&&& record=new MakeChessManual(this,point) ;&
&&&&&&& 红车1=new ChessPiece("车",Color.red,bc,w-4,h-4,this);
&&&&&&& 红车1.set棋子类别(红方颜色);
&&&&&&& &&//分别是红方各个棋子的设计
&&&&&&& 红兵5=new ChessPiece("兵",Color.red,bc,w-4,h-4,this);
&&&&&&& 红兵5.set棋子类别(红方颜色);
&&&&&&& 黑将=new ChessPiece("将",Color.blue,bc,w-4,h-4,this);
&&&&&&& 黑将.set棋子类别(黑方颜色);
&&&&&&& &&//分别是黑方各个棋子的设计
&&&&&&& 黑卒5=new ChessPiece("卒",Color.blue,bc,w-4,h-4,this);
&&&&&&& 黑卒5.set棋子类别(黑方颜色);
&&&&&&& point[1][10].setPiece(红车1,this);
&&&&&&& &&//红方的每个棋子放到与生活中棋盘位置一样
&&& &&&&point[9][7].setPiece(红兵5,this);
&&&&&&& point[1][1].setPiece(黑车1,this);
&&&//黑方的每个棋子放到与生活中棋盘位置一样
&&&&&&& point[9][4].setPiece(黑卒5,this); }
(3)棋盘的设计:
& public void paintComponent(Graphics g){
&&&& super.paintComponent(g);
&&&&& for(int j=1;j&=y轴长;j++) &&{
g.drawLine(point[1][j].x,point[1][j].y,point[x轴长][j].x,point[x轴长][j].y); }
&&&& for(int i=1;i&=x轴长;i++)&&&& {
&&&&&&&& if(i!=1&&i!=x轴长){
&&&&&&& g.drawLine(point[i][1].x,point[i][1].y,point[i][y轴长-5].x,point[i][y轴长-5].y);
&&&&&& g.drawLine(point[i][y轴长-4].x,point[i][y轴长-4].y,point[i][y轴长].x,point[i][y轴长].y); }
&&&&&&&& else{
&&&&&&& g.drawLine(point[i][1].x,point[i][1].y,point[i][y轴长].x,point[i][y轴长].y);}}&&&&&& g.drawLine(point[4][1].x,point[4][1].y,point[6][3].x,point[6][3].y);
g.drawLine(point[6][1].x,point[6][1].y,point[4][3].x,point[4][3].y);
g.drawLine(point[4][8].x,point[4][8].y,point[6][y轴长].x,point[6][y轴长].y);
g.drawLine(point[4][y轴长].x,point[4][y轴长].y,point[6][8].x,point[6][8].y);
&&&&&& for(int i=1;i&=x轴长;i++){
&&&&&& g.drawString(""+i,i*unitWidth,unitHeight/2);}int j=1;
&&&&& for(char c=‘A‘;c&=‘J‘;c++){
&&&&& g.drawString(""+c,unitWidth/4,j*unitHeight);j++;}}
(4)实现棋子按照生活中的对弈规则走棋的程序如下:
public boolean movePieceRule(ChessPiece piece,int startI,int startJ,int endI,int endJ){
&&& this.piece=this.startI=startI;this.startJ=startJ;
&&& this.endI=endI;
&&& this.endJ=endJ;
&&& int minI=Math.min(startI,endI);
&&& int maxI=Math.max(startI,endI);
&&& int minJ=Math.min(startJ,endJ);
&&& int maxJ=Math.max(startJ,endJ);
boolean 可否走棋=
if(piece.getName().equals("车")){if(startI==endI)
{int j=0;for(j=minJ+1;j&=maxJ-1;j++){
if(point[startI][j].isPiece()){可否走棋=} }
if(j==maxJ){可否走棋=}}
else if(startJ==endJ)& {& int i=0;for(i=minI+1;i&=maxI-1;i++)
{ if(point[i][startJ].isPiece()){可否走棋=
if(i==maxI){可否走棋=}}
else{可否走棋=}}
else if(piece.getName().equals("马"))
&..//以及各个棋子规则的设计
实现棋子按对弈规则的移动并记录棋子移动的位置;
public void mousePressed(MouseEvent e){
&&& ChessPiece piece=Rectangle rect=
&&& if(e.getSource()==this)move=
&&& if(move==false)
&&&&& if(e.getSource() instanceof ChessPiece){
&&&&&&&& piece=(ChessPiece)e.getSource();&&
&&&&&&&& startX=piece.getBounds().x;&&&&&&&
&&&&&&&& startY=piece.getBounds().y;&&&&
&&&&&&&&& rect=piece.getBounds();
&& &&&&&&&for(int i=1;i&=x轴长;i++){
&&&&&&& for(int j=1;j&=y轴长;j++){
&&&&&&& int x=point[i][j].getX();
&&&&&&& int y=point[i][j].getY();
&&&&&&& if(rect.contains(x,y))
&&&&&&& {startI=i;startJ=j;} }}}}
&public void mouseMoved(MouseEvent e){ }
&public void mouseDragged(MouseEvent e){
&&& ChessPiece piece=
&&&&&& if(e.getSource() instanceof ChessPiece){
&&&&&&&&&& piece=(ChessPiece)e.getSource();&& move=
e=SwingUtilities.convertMouseEvent(piece,e,this); }
&&& &&if(e.getSource()==this){if(move&&piece!=null)
&&&&& {x=e.getX(); y=e.getY();
&&&&& if(红方走棋&&((piece.棋子类别()).equals(红方颜色))){
piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}
&&&&& if(黑方走棋&&(piece.棋子类别().equals(黑方颜色))){
piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}}}}
&public void mouseReleased(MouseEvent e){ &}
public void mouseEntered(MouseEvent e){}
&public void mouseExited(MouseEvent e){}
&public void mouseClicked(MouseEvent e){ }
图中中国象棋是个菜单包括制作棋谱、保存棋谱、演示棋谱三个菜单项
设计actionPerformed事件的代码为:
public void actionPerformed(ActionEvent e){
& if(e.getSource()==制作棋谱) {con.removeAll();
保存棋谱.setEnabled(true);
&&&&&&&& this.setTitle(制作棋谱.getText());
&&&&&&&& board=new ChessBoard(45,45,9,10);
&&&&&&&& record=board.
&&&&&&&& JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,board,record);
&&&&&&&& split.setDividerSize(5);
&&&&&&&& split.setDividerLocation(460);
&&&&&&&& con.add(split,BorderLayout.CENTER);
&&&&&&&& validate();}&&
&&&& if(e.getSource()==保存棋谱) {
&&&&& int state=fileChooser.showSaveDialog(null);
&&&&& File saveFile =fileChooser.getSelectedFile();
if(saveFile!=null&&state==JFileChooser.APPROVE_OPTION)
&&&&& {try{
FileOutputStream outOne=newFileOutputStream(saveFile);
&&&& ObjectOutputStream outTwo=new ObjectOutputStream(outOne);
&&&&& outTwo.writeObject(record.获取棋谱()) ;
&&& &&outOne.close();
&&&&& outTwo.close();}
&catch(IOException event){} }}
&&&& if(e.getSource()==演示棋谱) {&&&&&&&&
&&& con.removeAll();con.repaint();con.validate(); validate();
&&&& 保存棋谱.setEnabled(false);
&&&& int state=fileChooser.showOpenDialog(null);
&&& File openFile =fileChooser.getSelectedFile();
&&&&&&&&& if(openFile!=null&&state==JFileChooser.APPROVE_OPTION)
&{try{FileInputStream inOne=new FileInputStream(openFile);
&& ObjectInputStream inTwo=new ObjectInputStream(inOne);
&&&& 棋谱=(LinkedList)inTwo.readObject() ;
&&&& inOne.close();inTwo.close();ChessBoard board=new ChessBoard(45,45,9,10);demon=new Demon(board);
&&& demon.set棋谱(棋谱);con.add(demon,BorderLayout.CENTER);
con.validate(); validate();
this.setTitle(演示棋谱.getText()+":"+openFile); }
&&&& catch(Exception event)
{JLabel label=new JLabel("不是棋谱文件");
&label.setFont(new Font("隶书",Font.BOLD,60));
label.setForeground(Color.red);
label.setHorizontalAlignment(SwingConstants.CENTER);
con.add(label,BorderLayout.CENTER);
con.validate(); this.setTitle("没有打开棋谱"); validate();} }}else
{JLabel label=new JLabel("没有打开棋谱文件呢");
&&&&&&&&&&&&&&& label.setFont(new Font("隶书",Font.BOLD,50));
&&&&&&&&&&&&&&& label.setForeground(Color.pink);
&&&&&&& label.setHorizontalAlignment(SwingConstants.CENTER);
&&&&&& con.add(label,BorderLayout.CENTER);
&&&&&& con.validate();
&&&&&&& this.setTitle("没有打开棋谱文件呢"); validate();& }}}
三.代码地址
/jixin1995/xiangqi/tree/master
四.测试情况
菜单中保存棋谱:打开保存文件
(1)&&&&&&&&& 打开棋谱
(2)&&&&&&&&& 如果没有选择棋谱文件则会有如下:
(3)&&&&&&&&& 打开棋谱文件后:
五.问题及心得
&&& 采用程序设计棋子与棋盘,使得棋子更加可观,棋子和生活中真实存在的棋子相仿,使得用户使用软件布置棋谱更加习惯,且有悔棋功能方便了用户使用在界面上有用户设计棋谱的步骤使得棋谱从一开始状态到现在状态的过程,满足用户的需要。
&&& 增加打开棋谱文件功能,增加设计棋谱的作用,增加设计过的棋谱的可读性,也可以修改已存的棋谱文件。
&&& 具有演示功能,演示棋局的形成,可以手动一步一步的观察现有棋局的形成,也可以让软件自动形成,还可以设置电脑自动形成的时间间隔,增加与用户之间的互动性,使得软件更加人性化。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/jixin-1995/p/4491272.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 棋盘上有9颗黑棋子 的文章

 

随机推荐