中國象棋博弈系統(tǒng)設(shè)計_第1頁
中國象棋博弈系統(tǒng)設(shè)計_第2頁
中國象棋博弈系統(tǒng)設(shè)計_第3頁
中國象棋博弈系統(tǒng)設(shè)計_第4頁
中國象棋博弈系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、中國象棋對弈系統(tǒng)XXXX【摘要】象棋是我們國家特有的一項棋類益智游戲,中國象棋在中國有著三千多年的歷史,屬于二人對抗性游戲的一種。由于用具簡單,趣味性強,成為流行極為廣泛的棋藝活動。隨著科技的不斷進步,人們不再局限于現(xiàn)實中在棋盤上雙人面對面對弈,象棋的 “下法”也在改變。網(wǎng)絡(luò)上流傳的關(guān)于象棋的小游戲自然而然也就多了起來。從開始的鍵盤控制走棋到之后的鼠標控制走棋。人們對這個系統(tǒng)的需求越來越高了,現(xiàn)在人們已經(jīng)不滿足于手動的控制進行游戲了,隨著語音識別的出現(xiàn)人們更傾向與語音操作實現(xiàn)走棋了。語音是現(xiàn)下最先進的操控方式,他可以不通過手動控制就能夠?qū)崿F(xiàn)我們之前手動操作的任務(wù),就如之前說的能簡單就簡單。這是

2、我們現(xiàn)下的最終狀態(tài)了,能少動手就少動手,能不動手就更好的理念之下我們著手了這次的中國象棋游戲編程,我們采用了Microsoft Speech SDK來實現(xiàn)了我們的語音操作功能來實現(xiàn)了最新的走棋功能。【關(guān)鍵詞】中國象棋;語音操控;打譜,悔棋;目錄1 概述11.1項目背景11.2系統(tǒng)簡介11.3開發(fā)環(huán)境11.4主要技術(shù)11.5小組分工12 需求分析22.1用戶分析22.1.1系統(tǒng)定位22.1.2用戶面臨的問題22.1.3系統(tǒng)的運行環(huán)境22.1.4時間約束與資源約束22.2用戶設(shè)計流程22.2.1用戶的觀察與分析22.2.2設(shè)計22.3任務(wù)分析43 概要設(shè)計63.1界面設(shè)計原則6

3、3.2設(shè)計模型63.3.系統(tǒng)描述93.4使用的交互技術(shù)104 詳細設(shè)計與實現(xiàn)114.1界面設(shè)計:114.2棋盤的繪制:114.2.1豎線的繪制代碼:114.2.2橫線的繪制代碼:124.2.3兵處折線的繪制:124.2.4炮處折線的繪制:154.2.5楚河漢界的繪制:164.3棋子的規(guī)則實現(xiàn):174.3.1兵/卒的走棋規(guī)則:174.3.2車的走棋規(guī)則:194.3.3馬的走棋規(guī)則實現(xiàn):204.3.4炮的走棋規(guī)則實現(xiàn):214.3.5士的規(guī)則:224.3.6相的規(guī)則:234.3.7帥的規(guī)則:254.4悔棋:264.5播放/關(guān)閉背景音樂:364.6殘局:374.7幫助與關(guān)于:395 可用性評估415.

4、1評估指標體系415.1.1對整個系統(tǒng)的內(nèi)容功能界面等方面進行評估415.1.2對整個系統(tǒng)運行效率方面進行評估415.1.3對整個系統(tǒng)給用戶的體驗感滿意度方面進行評估415.2具體步驟425.3結(jié)果分析426 結(jié)論436.1總結(jié):436.2不足之處:436.3心得體會:431 概述1.1項目背景總所周知,隨著互聯(lián)網(wǎng)技術(shù)迅猛的發(fā)展,在各行各業(yè)得到了很廣泛的應(yīng)用。同時,隨著時代的進步,產(chǎn)業(yè)的發(fā)展,生活質(zhì)量的提高,人們的業(yè)余時間在很大方面的空閑了出來,各種各樣建立在互聯(lián)網(wǎng)基礎(chǔ)上的游戲也是不斷的出現(xiàn),在人們空余的時間填充他們的生活,網(wǎng)絡(luò)游戲是一類,但是網(wǎng)絡(luò)游戲要具備有網(wǎng)絡(luò)的情況下進行操作,在這種條件受

5、限的情況下,單機游戲的推廣更是休閑娛樂一族玩家們的主流,而且貼近生活所設(shè)計的單機游戲更是大眾的喜愛。中國象棋這類的游戲第一,貼近生活,從小耳濡目染的游戲,更是深受大眾的喜愛,成為許多人在平時閑暇時間娛樂消遣的一款游戲,為了滿足廣大玩家的需求,擴大中國象棋的應(yīng)用范圍是針對目前社會形式可以進行的一項,所以針對網(wǎng)上象棋這類游戲的開發(fā)對于我們作為計算機科學(xué)與技術(shù)專業(yè)的學(xué)生,更是我們應(yīng)該是重點去面對的一項。1.2系統(tǒng)簡介整個系統(tǒng)采用C#語言編寫,之所以使用C#,因為C#在帶來對應(yīng)用程序的快速開發(fā)能力的同時,并沒有犧牲C與C+程序員所關(guān)心的各種特性。它忠實地繼承了C和C+的優(yōu)點。里面包括簡潔的語法。精心地

6、面向?qū)ο笤O(shè)計、與Web的緊密結(jié)合、完整的安全性與錯誤處理、版本處理技術(shù)、靈活性與兼容性等。在整個系統(tǒng)功能中有最基本的新建一個棋盤,新建棋盤相當(dāng)于我們對弈時的重新開局,如果中間出現(xiàn)勝負,或者有人中途離場改變對弈對手等等,使用新建棋盤來解決。系統(tǒng)的走棋是最基本的對弈操作。系統(tǒng)的悔棋功能實現(xiàn)的是對上一個走棋步驟的訪問,使棋盤回到上一個走棋時的狀態(tài)。系統(tǒng)的語言識別包括對走棋中間落棋的語音播報等等。這幾個是系統(tǒng)最基本功能的實現(xiàn)。整個系統(tǒng)運行過程較為流暢,可以實現(xiàn)基本的雙方對弈操作。1.3開發(fā)環(huán)境計算機可使用WindowsXP/Windows7/Windows8系統(tǒng)運行,這些系統(tǒng)都是個人電腦上最忌泵具備的

7、系統(tǒng),針對開發(fā)過程中使用的軟件所支持的硬件條件,這些是開發(fā)系統(tǒng)的必須前提。編碼使用Visual studio 2010軟件進行編碼,Visual studio 2010是一個很強大的軟件,他是集合最基本的所有編程語言為一體的一個軟件,使用Visual studio 2010的最大意義在于它的簡易操作性,和對錯誤點的及時提示功能,Visual studio 2010讓整個系統(tǒng)在開發(fā)的過程中少走了很多彎路,很多問題漏洞都能很快的發(fā)現(xiàn)和解決。使用Panel繪畫軟件進行棋盤的繪制,Panel繪畫軟件是一款針對性很強的軟件,對于繪畫這一塊有著相當(dāng)方便的操作界面,使得整個棋盤的繪制沒有花費過多時間。1.4

8、主要技術(shù)主要使用了堆棧技術(shù),堆棧是一種抽象數(shù)據(jù)結(jié)構(gòu),其操作機理是后進先出。當(dāng)你把新條目推進堆棧時,已經(jīng)在堆棧內(nèi)的任何條目都會壓到堆棧的深處。同樣的,把一個條目從堆棧移出則會讓堆棧內(nèi)的其他條目都向堆棧的頂部移動。只有堆棧最頂端的條目能從堆棧中取出,條目離開堆棧的順序和它們被推進堆棧的順序一樣。類的定義,類實際上就是抽象的概念,把某些具有類似或者相同屬性的東西歸整一起,類的定義包括對系統(tǒng)中各個類型的設(shè)置和命名,以及在類定義下對他們功能進行編寫。Speech SDK的使用,這是一個微軟開發(fā)的實現(xiàn)語音識別的語音引擎,利用它提供的接口,我們可以用任何語言編寫一種語音識別軟件或者文字轉(zhuǎn)換聲音文件的軟件。1

9、.5小組分工我們小組主要分工如下:小組成員XX主要負責(zé)走棋,悔棋等功能代碼生成這一部分,對于這一部分應(yīng)該是整個開發(fā)系統(tǒng)最困難的一部分,針對每一個步驟的構(gòu)思,緊密的連接性等等,都要從整體上面進行考慮。小組成員XX主要負責(zé)棋盤的繪制和基本界面的設(shè)計,這一塊屬于系統(tǒng)基本用戶界面設(shè)計模塊,對于整個界面的設(shè)計第一個要考慮用戶的慣性視覺,怎么樣的界面和棋盤會讓人覺得貼近生活,而且對于一些細節(jié)的東西也要進行考慮設(shè)計。小組成員XX主要負責(zé)檢驗和修改系統(tǒng)和后期的文檔整合,檢驗和修改系統(tǒng)漏洞需要通過在運行測試中發(fā)現(xiàn)的問題進行改進,文檔的整合,要根據(jù)每個組員在整個系統(tǒng)編寫過程中的一些想法和重要部分信息進行整22 需

10、求分析2.1用戶分析2.1.1系統(tǒng)定位具有語音功能簡單的單機象棋小游戲。2.1.2用戶面臨的問題需要一個簡單的雙人對弈棋局;需要我們實現(xiàn)悔棋功能和打譜的功能操作;需要我們實現(xiàn)簡單的語音識別操作2.1.3系統(tǒng)的運行環(huán)境用戶需求要在XP、WIN7、WIN8系統(tǒng)上運行。2.1.4時間約束與資源約束系統(tǒng)需要在2015年6月22日前完成,需要用來完成象棋的簡單操作功能。2.2用戶設(shè)計流程2.2.1用戶的觀察與分析這是一個中國象棋對弈系統(tǒng),可以采取人人單機對弈。需要有棋盤棋子的局面、鼠標響應(yīng)控制棋子移動、通過語音識別放置棋子。用戶可以根據(jù)自己的需要悔棋,用戶還可以選擇打譜,把對弈雙方之前的棋局一步一步還原

11、,還原時可以在將棋局動態(tài)顯示并使用語音合成將每一步的操作度出來。2.2.2設(shè)計圖.1 初步系統(tǒng)結(jié)構(gòu)圖圖.2 中國象棋游戲活動圖2.3任務(wù)分析(1)首先我們要繪制出整體的框架布局(2)開始著手在Panel框體中間把棋盤的繪制寫出來,將棋盤繪制出來(3)在繪制好的棋盤中寫入棋子的放置語句,將棋子擺放到繪制好了的棋盤上(4)實現(xiàn)棋局開始行走后棋局能夠按照活動圖的流程進行(5)繼而在可以實現(xiàn)基本的走棋功能之后我們能夠在原本的基礎(chǔ)上實現(xiàn)悔棋功能(6)利用悔棋功能的功能棧來實現(xiàn)打譜的功能,利用下棋的文字信息來實現(xiàn)語音合成的讀譜功能。 圖.3 中國象棋用例圖 圖.4 中國象棋狀態(tài)圖 圖.5 中國象棋序列圖

12、圖.6 中國象棋活動圖453 概要設(shè)計3.1界面設(shè)計原則用戶界面可以分為命令行界面、圖形界面和多通道用戶界面三種基本界面。 命令界面:這是第一人機界面,在我們的中國象棋對弈程序中有選擇棋子、復(fù)選棋子替換原先選中棋子、重新放置選中棋子、悔棋讓棋子回到上一個狀態(tài)位置。 圖形界面:可以看作是第二人機界面,是基于圖形方式的人機界面。由于引入了圖片的話可以大量的減少中國象棋系統(tǒng)中繪制中國象棋棋盤的龐大的代碼量,減少程序的代碼復(fù)雜度。 多通道用戶界面:進一步綜合采用了語音、視覺、設(shè)備和交互技術(shù),使用戶利用多個通道的實現(xiàn)人機交互。更好的的捕捉到用戶的行為方式和動作與想法。3.2設(shè)計模型 圖.7 中國象棋設(shè)置

13、LOTOS圖實現(xiàn)的中國象棋基本功能簡化圖應(yīng)當(dāng)如上述LOTOS圖所示,形成一個簡單的功能結(jié)構(gòu)模塊,在這個簡述設(shè)計中我們可以看出我們實現(xiàn)的基礎(chǔ)功能都有下棋 悔棋和打譜三項功能模塊。圖.8 象棋棋盤設(shè)計模型圖.9 象棋棋子放置模型圖.10 象棋殘局模型3.3.系統(tǒng)描述我們的中國象棋系統(tǒng)中實現(xiàn)了棋盤和棋子的布局,我們的布局實現(xiàn)操作采用的是命令行界面設(shè)計的方式來實現(xiàn)的,通過代碼來繪制棋盤,之后在采用循環(huán)語句將棋子一一擺放在棋盤上實現(xiàn)棋盤和棋子的布局。實現(xiàn)了棋盤和棋子的布局之后我們開始著手棋局中棋子的規(guī)則的描述,通過定義類定義出七種類型的棋子,每種棋子有著自己的走棋規(guī)則,完善了規(guī)則之后我們就要考慮棋局的走

14、勢了。中國象棋是雙方對弈的一種游戲,一人一步。所以我們在主界面中加入了規(guī)則,這就實現(xiàn)了基本的下棋功能了。能實現(xiàn)下棋之后就是簡單的悔棋,和回放式的打譜功能。3.4使用的交互技術(shù)在中國象棋系統(tǒng)中我們使用了語音交互技術(shù)實現(xiàn)了語音合成功能。在下棋落子的時候會讀出象棋的行走路徑。 還使用到了筆交互技術(shù)來實現(xiàn)了棋盤和棋子的繪制。使用循環(huán)語句達成利用筆交互技術(shù)的使用來繪制基礎(chǔ)棋盤。使用基本交互技術(shù)來實現(xiàn)了背景音樂的播放棋子的定位選擇以及幫助信息等框架。4 詳細設(shè)計與實現(xiàn)4.1界面設(shè)計:使用panel控件(繪制棋盤)、menuStrip控件(菜單欄)、axWindowsMediaPlayer(用于播放mp3背

15、景音樂)、time控件(用于記錄紅黑各方的用時)等。圖.11 初始界面設(shè)計4.2棋盤的繪制:4.2.1豎線的繪制代碼:(利用DrawLine函數(shù)繪制棋盤的豎向線以及紅黑雙方的交叉線,需注意豎線在楚河漢界處有中斷)#region 創(chuàng)建繪畫對象 #region 豎向線 /兩邊的豎向線 g.DrawLine(p, point.X, point.Y, point.X, point.Y + wei * 9); g.DrawLine(p, point.X + wei * 8, point.Y, point.X + wei * 8, point.Y + wei * 9); /上半邊的豎向線 for (int

16、 i = 1; i <= 7; i+) g.DrawLine(p, point.X + wei * i, point.Y, point.X + wei * i, point.Y + wei * 4); /下半邊的豎向線 for (int i = 1; i <= 7; i+) g.DrawLine(p, point.X + wei * i, point.Y + wei * 5, point.X + wei * i, point.Y + wei * 9); #endregion /兩邊的交叉線 g.DrawLine(p, point.X + wei * 3, point.Y, poin

17、t.X + wei * 5, point.Y + wei * 2); g.DrawLine(p, point.X + wei * 5, point.Y, point.X + wei * 3, point.Y + wei * 2); g.DrawLine(p, point.X + wei * 3, point.Y + wei * 9, point.X + wei * 5, point.Y + wei * 7); g.DrawLine(p, point.X + wei * 5, point.Y + wei * 9, point.X + wei * 3, point.X + wei * 7);4.2

18、.2橫線的繪制代碼:(利用DrawLine函數(shù)繪制棋盤的橫向線)#region 創(chuàng)建繪畫對象 int wei = 50; Point point = new Point(25, 25); Graphics g = this.panel1.CreateGraphics(); Pen p = new Pen(Color.Black, 2); /橫向線 for (int i = 0; i <= 9; i+) g.DrawLine(p, point.X, point.Y + wei * i, point.X + wei * 8, point.Y + wei * i); 4.2.3兵處折線的繪制:

19、(利用DrawLine函數(shù)繪制兵處的折線)#region "兵"的折線 for (int i = Convert.ToInt16(wei * 0.1); i < wei * 8; i += wei * 2) /右上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.7), point.X + i, point.Y + Convert.ToInt16(wei * 2.9); /右下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt1

20、6(wei * 3.1), point.X + i, point.Y + Convert.ToInt16(wei * 3.3); /右上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.9), point.X + i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 2.9); /右下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 3.1), point.X +

21、 i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 3.1); /右上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 5.7), point.X + i, point.Y + Convert.ToInt16(wei * 5.9); /右下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.1), point.X + i, point.Y + Convert.T

22、oInt16(wei * 6.3); /右上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 5.9), point.X + i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 5.9); /右下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.1), point.X + i + Convert.ToInt16(wei * 0.2), point.Y + Con

23、vert.ToInt16(wei * 6.1); for (int i = Convert.ToInt16(wei * 1.9); i < wei * 8; i += wei * 2) /左上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.7), point.X + i, point.Y + Convert.ToInt16(wei * 2.9); /左下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 3.1), point.X

24、 + i, point.Y + Convert.ToInt16(wei * 3.3); /左上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.9), point.X + i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 2.9); /左下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 3.1), point.X + i - Convert.ToInt16(

25、wei * 0.2), point.Y + Convert.ToInt16(wei * 3.1); /左上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 5.7), point.X + i, point.Y + Convert.ToInt16(wei * 5.9); /左下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.1), point.X + i, point.Y + Convert.ToInt16(wei * 6.3); /左

26、上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 5.9), point.X + i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 5.9); /左下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.1), point.X + i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 6.

27、1); #endregion4.2.4炮處折線的繪制:(利用DrawLine函數(shù)繪制炮處的折線)#region 炮的繪制線 for (int i = Convert.ToInt16(wei * 1.1); i < wei * 8; i += wei * 6) /上方右上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 1.7), point.X + i, point.Y + Convert.ToInt16(wei * 1.9); /上方右上角、橫線 g.DrawLine(p, point.X + i, poin

28、t.Y + Convert.ToInt16(wei * 1.9), point.X + i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 1.9); /上方右下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.1), point.X + i, point.Y + Convert.ToInt16(wei * 2.3); /上方右下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt

29、16(wei * 2.1), point.X + i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 2.1); /下方右上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.7), point.X + i, point.Y + Convert.ToInt16(wei * 6.9); /下方右上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.9), poin

30、t.X + i + Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 6.9); /下方右下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 7.1), point.X + i, point.Y + Convert.ToInt16(wei * 7.3); /下方右下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 7.1), point.X + i + Convert.T

31、oInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 7.1); for (int i = Convert.ToInt16(wei * 0.9); i < wei * 8; i += wei * 6) /上方左上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 1.7), point.X + i, point.Y + Convert.ToInt16(wei * 1.9); /上方左上角、橫線 g.DrawLine(p, point.X + i, point.Y +

32、 Convert.ToInt16(wei * 1.9), point.X + i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 1.9); /上方左下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 2.1), point.X + i, point.Y + Convert.ToInt16(wei * 2.3); /上方左下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(we

33、i * 2.1), point.X + i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 2.1); /下方左下角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 7.1), point.X + i, point.Y + Convert.ToInt16(wei * 7.3); /下方左下角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 7.1), point.X +

34、 i - Convert.ToInt16(wei * 0.2), point.Y + Convert.ToInt16(wei * 7.1); /下方左上角、縱線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.7), point.X + i, point.Y + Convert.ToInt16(wei * 6.9); /下方左上角、橫線 g.DrawLine(p, point.X + i, point.Y + Convert.ToInt16(wei * 6.9), point.X + i - Convert.ToInt1

35、6(wei * 0.2), point.Y + Convert.ToInt16(wei * 6.9); #endregion4.2.5楚河漢界的繪制:在棋盤的中間添加楚河漢界,以及設(shè)置其基本屬性/"楚河","漢界"字 FontFamily fm = new FontFamily("宋體"); Font f = new Font(fm, 35); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; g.DrawString("楚河

36、", f, Brushes.Black, point.X + wei - 20, point.Y + wei * 4, sf); g.DrawString("漢界", f, Brushes.Black, point.X + wei * 5, point.Y + wei * 4, sf); /f.Dispose(); g.Dispose(); #endregion Point Grid = new Point(25, 25); IChessItem.IChess selectChess; IChessItem.Enums.ChessType _type = IChe

37、ssItem.Enums.ChessType.Black;圖.12 棋盤繪制效果圖4.3棋子的規(guī)則實現(xiàn):4.3.1兵/卒的走棋規(guī)則:移動范圍:任何位置。移動規(guī)則:每步只能向前移動一點。過河以后,它便增加了向左右移動的能力,兵不允許向后移動。private Shuai shuai1; protected override bool LimitPoint(int x, int y) if (base.LimitPoint(x, y) /個性條件 /判斷哪一方 /判斷必須是向前行 /判斷是否過河 /過河以后,可以橫行 /未過河,只能直行 /直線行駛 if (x = GridX | y = GridY

38、) if (type = IChessItem.Enums.ChessType.Black) if (x = GridX) && (GridY - y) = -1)/沒過河之前不能橫走和倒走 return true; else if (y > 4) && (Math.Abs(GridX - x) = 1)/過河之后 return true; else return false; else if (type = IChessItem.Enums.ChessType.Red) if (x = GridX) && (y - GridY = -1)

39、/沒過河之前不能橫走和倒走 return true; else if (y < 5) && (Math.Abs(GridX - x) = 1)/過河之后 return true; else return false; /return base.LimitPoint(x, y); return false; /return true; /返回真假 else return false; private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = ne

40、w System.ComponentModel.ComponentResourceManager(typeof(Bing); this.shuai1 = new ChessItem.Shuai(); this.SuspendLayout(); / / shuai1 / this.shuai1.AutoSize = true; this.shuai1.BackColor = System.Drawing.SystemColors.Menu; this.shuai1.Font = new System.Drawing.Font("宋體", 30F, System.Drawing

41、.FontStyle.Bold); this.shuai1.ForeColor = System.Drawing.Color.Black; this.shuai1.GridX = 0; this.shuai1.GridY = 0; this.shuai1.Image = (System.Drawing.Image)(resources.GetObject("shuai1"); this.shuai1.ImageAlign = System.Drawing.ContentAlignment.TopLeft; this.shuai1.IsChecked = false; thi

42、s.shuai1.Location = new System.Drawing.Point(0, 0); this.shuai1.Name = "shuai1" this.shuai1.Size = new System.Drawing.Size(51, 51); this.shuai1.TabIndex = 0; this.shuai1.Text = "shuai1" this.shuai1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.shuai1.type = IChes

43、sItem.Enums.ChessType.Black; this.shuai1.Click += new System.EventHandler(this.shuai1_Click); this.ResumeLayout(false); 4.3.2車的走棋規(guī)則:移動范圍:任何位置。移動規(guī)則:可以水平或垂直方向移動任意個無阻礙的點。public class Ju : ChessBase protected override bool LimitPoint(int x, int y) if (base.LimitPoint(x, y) /個性條件 int count = 0; Panel panel = (Panel)this.Parent; try count = Get

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論