算法】子棋游戲制作_第1頁
算法】子棋游戲制作_第2頁
算法】子棋游戲制作_第3頁
算法】子棋游戲制作_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、五子棋游戲的制作五子連珠,在民間俗稱”五子棋”,是一種流傳很廣的益智棋類游戲,游戲規(guī)則非常簡單,適合各個年齡段的朋友玩,相信 大家以前也一定玩過此游戲,下面我們就來學(xué)習(xí)使用Director來制作一個簡單的五子棋個游戲。本文分為三個部分來介紹,界面比較簡單,主要是和大家討論一下制作的思路。仁 從游戲的玩法開始討論游戲的制作思路。2. lingo代碼的設(shè)計,移子走棋,以及判斷游戲勝負(fù)后。3. lingo代碼的設(shè)計,棋子布置和后悔按鈕的代碼設(shè)計。一游戲制作思路我們這里介紹的的是一種最簡單的五子棋游戲,玩法很簡單,黑白雙方交替用鼠標(biāo)拖動棋子來下棋,看誰先擺好連續(xù)的五粒包括水平方向,垂直方向和傾斜方向(

2、45度和135度),但是不能有拐點,必須是一條直線,哪一方先連好,則勝利。畫面 如圖:-f * KTG 軸 k之所以簡單是因為我們這里沒有涉及到人和電腦下,沒有人工智能(AI ),如果要涉及到AI,算法就會麻煩一點,而沒有AI的話,主要就是掃描檢測了.現(xiàn)在就和大家一起討論制作思路:1. 首先要有一個交叉點列表(loclist)棋盤上每個交叉點的坐標(biāo)值,我們這里為18*18的棋盤(每個格子寬20個象素)完成記錄。2. 由于需要游戲過程中判斷該位置是否有棋子,所以還需要一個同樣是二維的列表(onlist)來記錄棋子信息,為了方便我們沒有棋子的地方為0,黑子為1,白子為-1,初始化時全部為0。上面的

3、代碼均在電影腳本中書寫:global loclist,onliston startMovieloclist=onlist=repeat with i= 1 to 18tlist=ttlist=repeat with j= 1 to 18add tlist, point (20*j, 20*i)add ttlist, 0end repeatadd loclist,tlistadd onlist,ttlistend repeatend這段代碼讓我們得到并初始化了兩個關(guān)鍵的二維列表(兩個全局變量)loclist和onlist分別記錄交叉點位置信息和 棋子信息。我們可以在 message 窗口中用 p

4、ut 命令查看它們的內(nèi)容和規(guī)律,就會理解,這將為后面的走棋和判斷勝負(fù)做準(zhǔn)備。 put loclistpoint(20, 20), point(40, 20), point(60, 20), point(80, 20), point(100, 20), point(120, 20), point(140, 20), point(160, 20),point(180, 20), point(200, 20),int(340;36Op,opoint(36O, 360) put onlist0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00, 0, 0, 0

5、, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,二.移子走棋,以及判斷游戲勝負(fù)后1 .接下來介紹移動棋子代碼 :要實現(xiàn)的是,用戶用鼠標(biāo)按住來移動棋子,并當(dāng)用戶松開鼠標(biāo)后,對當(dāng)前棋子位置的判斷 ,看是否足夠靠近離其最近的一個可放點,如果是就會自動放置好。 移動棋子的代碼相對簡單, 這里就重點介紹是否足夠靠近離其最近的一個可放點: 定義相關(guān)屬性并初始化。property pmousedown,sel,poldloc,moveEnable,OnlinePoson beginsprite mesel=sprite (me.spritenum ) -代表自身 pol

6、dloc=sel. loc - 棋子的原始位置 pmousedown= 0 - 是否鼠標(biāo)按下 moveEnable= 1 - 是否可以移動OnlinePos= -移動的歷史記錄:記錄我移動完成后的位置信息和我的棋子信息(黑棋還是白棋),End10 ) , 并沒有棋子(即這里的判斷原則是掃描所有交叉點,找到一個距離適當(dāng)(與該點水平坐標(biāo)差和垂直坐標(biāo)差都要小于 onlistij=0 )的點來放好棋子。on ifcloseenough me cursor -1-通過一個二重循環(huán)來遍歷二維列表中的每個坐標(biāo)點 repeat with i = 1 to 18repeat with j= 1 to 18myL

7、oc=sel. locif abs(myLoc 1 -loclistij 1) 10 and abs(myLoc 2-loclistij 2) 10 and onlistij= 0 then-如果找到一個開放點,則放置到該位置上 sel.loc=loclistij-不能在被移動sel.moveEnable= 0if sel. member .name = white then - 棋子信息列表記錄該點棋子信息 t= 1onlistij=tOnlinePos=i,j,telset=- 1onlistij=tOnlinePos=i,j,tend if-檢測是否有玩家獲勝(具體代碼稍后在講)chec

8、klT(i,j,t)-找到點并放置好后就可以中止后面剩下的循環(huán)判斷操作了,否則一直掃描完exitend ifend repeatend repeat-在上面,如果沒有一個點靠得足夠近,就會回原位sel.loc=poldlocend2. 判斷游戲勝負(fù):用checkIT(i,j,t)程序檢測是否有玩家獲勝。(即判斷否至少有一個方向存在連續(xù)5個或以上的同色棋子)實際操作時我們根據(jù)當(dāng)前點確定我們可以確定四條直線(實際上是四個列表),這里我們需要對四個直線逐一進(jìn)行判斷。這四條直線分別是,水平方向,垂直方向和傾斜方向(45度和135度)。參考下圖中的四條藍(lán)色的粗線。on checkIT i,j,num-水

9、平方向:-所在點橫線掃描,掃描水平信息列表scan(onlisti)-垂直方向-所在點縱向掃描tlist=repeat with m= 1 to 18add tlist,onlistmj-通過循環(huán)獲取縱向信息列表end repeatscan(tlist)-進(jìn)行掃描- 所在點斜率為 1 的直線掃描( y=x-b ),即傾斜方向 45 度 b=i-jtlist=repeat with y=1 to 181 的直線信息列表-1 的直線信息列表repeat with x=1 to 18if x=y-b then add tlist,onlist yx -通過循環(huán)獲取有該點決定的斜率為 end repe

10、atend repeat scan(tlist) - 進(jìn)行掃描- 所在點斜率為 -1 的直線掃描( y=-x+b ),即傾斜方向 135 度 b=i+jtlist=repeat with y=1 to 18repeat with x=1 to 18if x=- y+b then add tlist,onlist y x - 通過循環(huán)獲取有該點決定的斜率為 end repeatend repeat scan(tlist) - 進(jìn)行掃描 setUser(num)endon scan(t) - 掃描列表程序 ,看是否有一方以獲勝(即累計數(shù)目等于5)blackNum= 0whiteNum= 0repe

11、at with n= 1 to t. countif tn 0 then if tn= 1 thenblackNum=blackNum+ 1 whiteNum= 0if blackNum= 5 then - 是否黑方獲勝 win( 1) abortend if elsewhiteNum=whiteNum+ 1 blackNum= 0if whiteNum= 5 then - 是否白方獲勝win(- 1) abort end if end ifelse blackNum= 0 whiteNum= 0end ifend repeat end由以上我們就可以判斷游戲勝負(fù)了。三.棋子布置和后悔按鈕的代

12、碼設(shè)計1. 介紹一下棋子的布置。 初始時舞臺上沒有棋子, 我們通過 puppetsprite 來動態(tài)的根據(jù)需要把棋子放在舞臺上并激活移動 用戶使用,這樣不必在舞臺上拖大量的精靈,時游戲顯得混亂。我們這里用 41 及 41 以后的通道來共擺放棋子。具體運用 時我們在電影腳本里面定義一個函數(shù)來完成這一需要多次用到的操作:根據(jù) nowNum 的值來設(shè)置,為 1是設(shè)置為黑子用戶走子, -1 則為白子用戶。on setUser nowNumif nowNum= 1 then nextname= black member (info ).text = 黑子走 elsenextname= white mem

13、ber (info ).text = 白子走 end ifrepeat with o= 41 to the lastchannel- 從 41 通道開始找到第一個 memberNum 為空的演員,來對其關(guān)聯(lián)給對應(yīng)的演員 if sprite (o). memberNum = 0 then-開始控制該通道 puppetsprite o,true -設(shè)置位置等相關(guān)精靈屬性 sprite (o). loc = point (322 ,390) sprite (o). ink = 36 sprite (o). width =18 sprite (o). height =18 - 設(shè)置對應(yīng) members

14、prite (o). member = member (nextname)- 添加按鈕腳本x = script (chess ). new ()- 因為設(shè)置 scriptInstanceList 時,不能覆蓋已有的元素,固需要加入 sprite(o).scriptInstanceList= sprite (o). scriptInstanceList =sprite (o). scriptInstanceList .add(x)-強迫初始化sendsprite o, #beginspriteexit repeat end if end repeat end每次下完一顆棋子后,當(dāng)沒有玩家獲勝時,

15、則調(diào)用setUser ( num )出現(xiàn)下一顆棋子讓玩家移動。2. 后悔按鈕,就是把棋盤上的最近放置的一顆棋子去掉,并設(shè)置新的當(dāng)前玩家。on mouseup me puppetsound 1,regret - 播放音效 repeat with i= the lastchannel down to 42 - 從最好一個通道往前面掃描- 找到第一個 memberNum 不為空的通道,即最近放置的棋子if sprite (i). memberNum 0 thenPos= sprite (i- 1 ).OnlinePos -得到棋子的位置信息 onlistPos 1 Pos 2= 0-將 onlist 對應(yīng)位置

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論