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

下載本文檔

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

文檔簡介

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

2、45度和135度),但是不能有拐點(diǎn),必須是一條直線,哪一方先連好,則勝利。畫面 如圖:-f * KTG 軸 k之所以簡單是因?yàn)槲覀冞@里沒有涉及到人和電腦下,沒有人工智能(AI ),如果要涉及到AI,算法就會(huì)麻煩一點(diǎn),而沒有AI的話,主要就是掃描檢測了.現(xiàn)在就和大家一起討論制作思路:1. 首先要有一個(gè)交叉點(diǎn)列表(loclist)棋盤上每個(gè)交叉點(diǎn)的坐標(biāo)值,我們這里為18*18的棋盤(每個(gè)格子寬20個(gè)象素)完成記錄。2. 由于需要游戲過程中判斷該位置是否有棋子,所以還需要一個(gè)同樣是二維的列表(onlist)來記錄棋子信息,為了方便我們沒有棋子的地方為0,黑子為1,白子為-1,初始化時(shí)全部為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這段代碼讓我們得到并初始化了兩個(gè)關(guān)鍵的二維列表(兩個(gè)全局變量)loclist和onlist分別記錄交叉點(diǎn)位置信息和 棋子信息。我們可以在 message 窗口中用 p

4、ut 命令查看它們的內(nèi)容和規(guī)律,就會(huì)理解,這將為后面的走棋和判斷勝負(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 .接下來介紹移動(dòng)棋子代碼 :要實(shí)現(xiàn)的是,用戶用鼠標(biāo)按住來移動(dòng)棋子,并當(dāng)用戶松開鼠標(biāo)后,對(duì)當(dāng)前棋子位置的判斷 ,看是否足夠靠近離其最近的一個(gè)可放點(diǎn),如果是就會(huì)自動(dòng)放置好。 移動(dòng)棋子的代碼相對(duì)簡單, 這里就重點(diǎn)介紹是否足夠靠近離其最近的一個(gè)可放點(diǎn): 定義相關(guān)屬性并初始化。property pmousedown,sel,poldloc,moveEnable,OnlinePoson beginsprite mesel=sprite (me.spritenum ) -代表自身 pol

6、dloc=sel. loc - 棋子的原始位置 pmousedown= 0 - 是否鼠標(biāo)按下 moveEnable= 1 - 是否可以移動(dòng)OnlinePos= -移動(dòng)的歷史記錄:記錄我移動(dòng)完成后的位置信息和我的棋子信息(黑棋還是白棋),End10 ) , 并沒有棋子(即這里的判斷原則是掃描所有交叉點(diǎn),找到一個(gè)距離適當(dāng)(與該點(diǎn)水平坐標(biāo)差和垂直坐標(biāo)差都要小于 onlistij=0 )的點(diǎn)來放好棋子。on ifcloseenough me cursor -1-通過一個(gè)二重循環(huán)來遍歷二維列表中的每個(gè)坐標(biāo)點(diǎn) 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-如果找到一個(gè)開放點(diǎn),則放置到該位置上 sel.loc=loclistij-不能在被移動(dòng)sel.moveEnable= 0if sel. member .name = white then - 棋子信息列表記錄該點(diǎn)棋子信息 t= 1onlistij=tOnlinePos=i,j,telset=- 1onlistij=tOnlinePos=i,j,tend if-檢測是否有玩家獲勝(具體代碼稍后在講)chec

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

9、平方向:-所在點(diǎn)橫線掃描,掃描水平信息列表scan(onlisti)-垂直方向-所在點(diǎn)縱向掃描tlist=repeat with m= 1 to 18add tlist,onlistmj-通過循環(huán)獲取縱向信息列表end repeatscan(tlist)-進(jìn)行掃描- 所在點(diǎ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)獲取有該點(diǎn)決定的斜率為 end repe

10、atend repeat scan(tlist) - 進(jìn)行掃描- 所在點(diǎ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)獲取有該點(diǎn)決定的斜率為 end repeatend repeat scan(tlist) - 進(jìn)行掃描 setUser(num)endon scan(t) - 掃描列表程序 ,看是否有一方以獲勝(即累計(jì)數(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è)計(jì)1. 介紹一下棋子的布置。 初始時(shí)舞臺(tái)上沒有棋子, 我們通過 puppetsprite 來動(dòng)態(tài)的根據(jù)需要把棋子放在舞臺(tái)上并激活移動(dòng) 用戶使用,這樣不必在舞臺(tái)上拖大量的精靈,時(shí)游戲顯得混亂。我們這里用 41 及 41 以后的通道來共擺放棋子。具體運(yùn)用 時(shí)我們在電影腳本里面定義一個(gè)函數(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 通道開始找到第一個(gè) memberNum 為空的演員,來對(duì)其關(guān)聯(lián)給對(duì)應(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è)置對(duì)應(yīng) members

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論