張昊



【摘 要】Java語言具有平臺無關性、易移植性等諸多特征,得到了廣泛的應用。程序開發費用少,工作效率高,并擁有很好的用戶界面和強大的開發工具。網上數據編程體現的非常充分,是其它語言無法做到的。
本論文著眼于Java技術的應用,開發中國象棋游戲程序,完成基于Java技術象棋游戲的分析與設計,充分在游戲中體現了java的優勢。
【關鍵詞】Java 象棋 游戲 類 接口
【中圖分類號】TP311 【文獻標識碼】A 【文章編號】2095-3089(2017)06-0063-02
中國象棋被譽為中國的“國粹”,從誕生到現在已經成為國人最喜歡的棋類競技游戲,對青少年的影響也是很廣泛,雙方在象棋的對弈過程中,體驗著智慧對壘的快樂。
隨著游戲與Java技術平臺的合作,越來越多的游戲編程愛好者把Java作為了實現游戲程序的首選。如今Java技術在游戲產業中發展迅猛,并在網絡的支持下,在游戲領域中開辟了自己的廣闊天地。
游戲設計目的及意義
象棋歷史悠久,棋類博弈游戲越來越受廣大游戲愛好者的喜愛,它不僅能給對弈的雙方帶來快樂,而且還在競技的過程中感受使用計策戰術,戰勝對手的自豪感。
功能需求
通過對中國象棋游戲的需求分析,該游戲應實現棋盤界面的顯示功能,雙方下棋使用鼠標挪動棋子并吃子的功能,每走一步棋對棋譜進行記錄的功能,嚴格實現中國象棋走棋規則的功能,關閉退出游戲等功能。
象棋游戲設計的幾個要點
對弈的程序,至少應具備如下幾個部分:
①在機器中表示棋盤的方法,能夠提供一個最基本的操作界面,有了這個界面才能運行。
②產生中國象棋走法的規則,以使對弈正確地進行,并可判斷雙方是否亂走。
③實現吃子過程中的圖形替換、重繪,使得雙方能看出游戲當前的形勢。
象棋游戲棋盤的設計
中國象棋的棋盤與其它博弈類的棋盤不同,對陣雙方各執一方戰場,中間有空白河界相隔,俗稱“楚河漢界”。在己方各有一個交點互相連接的田字格,俗稱“九宮格”,“將”和“士”只能在這個范圍內走動,不能踏出。
中國象棋的棋盤如圖1-1所示:
棋盤表示就是使用一種數據結構來描述棋盤及棋盤上的棋子,通常是使用一個二維數組。一個典型的中國象棋棋盤是使用9×10的二維數組表示。每一個元素代表棋盤上的一個交點。在Java中我們在ChessBoard這個類下來具體實現,定義一個ChessPoint point[ ][ ]二維數組,縱列從1到9,橫列從A到J,這樣就表示了象棋棋盤的9×10的方陣,為每個棋子提供了放置位置。
中國象棋游戲規則的實現描述
從中國象棋游戲的棋子和規則可以看出,由于將或帥、仕和士、象和相、卒和兵的走法相同,只是棋子的標示不同,再加上車、馬、炮,所以規則的主要實現點有七點,以下對中國象棋游戲的部分棋子行棋規則實現加以描述。
首先我們對每個棋子行棋時的初始和中止位置設置為startI,startJ,endI,endJ。這樣我們就可以用這四個值表示出棋子的初始及中止位置的坐標點。
接著,我們再定義兩個整形變量xAxle和yAxle,他們分別表示初始與終止坐標值之間差值的絕對值。
將或帥:只能在王宮內移動。每一步只可以水平或垂直移動一點。
將或帥的行棋思路如圖1-2所示:
分析描述:對于帥的活動范圍,通過if(endI<=6&&endI>=4&&endJ>=8)語句限定,如果滿足則可以走棋,不滿足則不能走棋,這就限定棋盤下方的帥不能走出九宮格。對于將的活動范圍,通過if(endI<=6&&endI>=4&&endJ<=3)語句限定,原理同上。
行棋規則則通過if((xAxle==1&&yAxle==0)||(xAxle==0&&yAxle==1))這條語句限定,就圖1-2所示,帥只能移動到(x2,y1)、(x2,y3)、(x1,y2)、(x3,y2)四個點,他們的坐標差絕對值只有滿足上面語句這兩種情況才可以行棋。
象或相:河界的一側。每一步只可以沿對角線方向移動兩點,另外,在移動的過程中不能夠穿越障礙。
象或相的行棋思路如圖1-3所示:
分析描述:對于象的活動范圍,通過if(endJ<=5)語句就可限定,如果滿足則可以走棋,不滿足則不能走棋,這就限定了象不能越過河界到對方盤面去。對于相的活動范圍,通過if(endJ>=6)語句限定,原理同上。
行棋規則比較特殊,它是沿對角線方向移動兩點,另外,在移動的過程中不能夠穿越障礙。就圖1-3所示,象要走到(x3,y3)這一點上的前提條件是(x2,y2)這個田字格的中心,也就是“象眼”的位置沒有棋子,對于這一點的坐標,我們要定義兩個變量centerI=(startI+endI)/2和centerJ=(startJ+endJ)/2,這樣當我們行棋時,就可以用if(point[centerI][centerJ].isPiece())這條語句判斷“象眼”位置是否有棋子,如果有則返回false,無則返回true。對于沿對角線方向移動兩點的實現,則通過if(xAxle==2&&yAxle==2)語句來限定,他們的坐標差絕對值只有滿足上面語句這種情況才可以行棋。
馬:任何位置。每一步只可以水平或垂直移動一點,再按對角線方面向左或者右移動。另移動的過程中不能夠穿越障礙。
馬的行棋思路如圖1-4,1-5所示,有兩種形式:
分析描述:行棋規則比較特殊,每一步只可以水平或垂直移動一點,再按對角線方面向左或者右移動。另外移動的過程中不能夠穿越障礙。
就圖1-4所示,這種跳躍形式屬于if(xAxle==2&&yAxle==1)這一情況,馬可以走到(x1,y1)(x5,y1)(x1,y3)(x5,y3)這四個點上的前提條件是(x2,y2)(x4,y2)這兩個點上,也就是“馬腿”的位置沒有棋子。
對于棋子向右側跳的情況,即滿足if(endI>startI)時,我們判斷“馬腿”位置的棋子通過if(point[startI+1][startJ].isPiece())語句來判斷;對于棋子向左側跳的情況,即滿足if(endI 車:任何位置。可以水平或垂直方向移動任意個無阻礙的點。 車的行棋思路如圖1-6所示: 分析描述:可以水平或垂直方向移動任意個無阻礙的點。就圖1-6所示,對于車縱向行棋情況,即if(startI==endI),先賦j=0,通過對車初始位置和中止位置之間進行掃描,通過if(point[startI][j].isPiece())這條語句判斷有無阻礙的棋子。對于車橫向行棋情況,即if(startJ==endJ),先賦i=0,通過對車初始位置和中止位置之間進行掃描,通過if(point[i][startJ].isPiece())這條語句判斷有無阻礙的棋子。 炮:任何位置。移動起來和車很相似,但它必須跳過一個棋子來吃掉對方的一個棋子。 炮的行棋思路如圖1-7所示: 分析描述:移動起來和車很相似,但它必須跳過一個棋子來吃掉對方的一個棋子。就圖1-7所示,對于炮縱向行棋情況,即if(startI==endI),我們為了判斷行棋路線上是否有棋子,引入一個變量number,然后賦j=0,通過對炮初始位置和中止位置之間進行掃描,通過if(point[startI][j].isPiece())這條語句判斷有無阻礙的棋子,如果有棋子,則number++,這樣number這個變量就相當于一個計數器,對炮初始位置和中止位置之間棋子的數量進行統計。if(number>1),則表示初始位置和中止位置之間多于1個棋子,返回值false,不能走棋;if(number==1),則表示初始位置和中止位置之間有1個棋子,且if(point[endI][endJ].isPiece()),表示中止位置上有對方棋子,則可以走棋吃子;if(number==0&&!point[endI][endJ].isPiece()),表示初始位置和中止位置之間沒有棋子,則可以行棋。對于炮橫向行棋情況,原理同上。 本論文主要研究基于Java技術象棋游戲的分析與設計,對java 在中國象棋游戲編程中的方法和思想進行了深刻的分析,對中國象棋特殊的走棋規則給予了細致理解,充分體現了在中國象棋游戲中java的優勢。 參考文獻: [1]耿祥義編著.《JAVA 課程設計》.清華大學出版社. [2]王克宏編著.《Java技術教程(基礎篇)》.2002年4月第一版.清華大學出版社. [3]孫鑫編著. 《Java Web開發詳解》. 2006年4月第一版. 電子工業出版社. [4]朱戰立,沈偉編著. 《Java程序設計實用教程》. 電子工業出版社. [5]《Java Web開發詳解》光盤視頻教程 [6]Thomas Petche編著.《Java游戲編程》.清華大學出版社. [7]王小春編著.《PC游戲編程》.重慶大學出版社. [8]中文Java技術網 http://www.cn-java.com/ [9]Sun中國技術社區http://developers.sun.com.cn/home/sdnchina/home [10]Java高級編程專區 http://dev.yesky.com/javagaoji/