![算法】子棋游戲制作_第1頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/26/cbc8650e-47c4-43ee-b0b3-3c24f36052cb/cbc8650e-47c4-43ee-b0b3-3c24f36052cb1.gif)
![算法】子棋游戲制作_第2頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/26/cbc8650e-47c4-43ee-b0b3-3c24f36052cb/cbc8650e-47c4-43ee-b0b3-3c24f36052cb2.gif)
![算法】子棋游戲制作_第3頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/26/cbc8650e-47c4-43ee-b0b3-3c24f36052cb/cbc8650e-47c4-43ee-b0b3-3c24f36052cb3.gif)
![算法】子棋游戲制作_第4頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/26/cbc8650e-47c4-43ee-b0b3-3c24f36052cb/cbc8650e-47c4-43ee-b0b3-3c24f36052cb4.gif)
下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學(xué)九年級(jí)上冊1.3《反比例函數(shù)的應(yīng)用》(第2課時(shí))聽評(píng)課記錄
- 蘇科版數(shù)學(xué)九年級(jí)下冊《6.1 圖上距離與實(shí)際距離》聽評(píng)課記錄
- 現(xiàn)代市場營銷從傳統(tǒng)到數(shù)字化的轉(zhuǎn)型
- 物理學(xué)經(jīng)典理論在教育游戲中的應(yīng)用
- 2025年度互聯(lián)網(wǎng)+合伙開店合同協(xié)議
- 物聯(lián)網(wǎng)平臺(tái)的安全架構(gòu)與防護(hù)技術(shù)
- 未來社區(qū)中的現(xiàn)代科技與傳統(tǒng)生活
- 現(xiàn)代人如何通過中醫(yī)實(shí)現(xiàn)身心和諧
- 現(xiàn)代辦公樓宇如何利用先進(jìn)的大氣治理技術(shù)實(shí)現(xiàn)綠色辦公
- 2025年度環(huán)保工程顧問專業(yè)聘用合同
- 人教版五年級(jí)上冊小數(shù)除法豎式計(jì)算練習(xí)練習(xí)300題及答案
- 綜合素質(zhì)提升培訓(xùn)全面提升個(gè)人綜合素質(zhì)
- 如何克服高中生的社交恐懼癥
- 城市軌道交通列車網(wǎng)絡(luò)控制及應(yīng)用 課件 項(xiàng)目6、7 列車網(wǎng)絡(luò)控制管理系統(tǒng)、城軌列車網(wǎng)絡(luò)控制及應(yīng)用
- 聚焦任務(wù)的學(xué)習(xí)設(shè)計(jì)作業(yè)改革新視角
- 2024高二語文期末試卷(選必上、中)及詳細(xì)答案
- 2022中儲(chǔ)糧油脂有限公司招聘試題及答案解析
- 分布式光伏項(xiàng)目規(guī)劃設(shè)計(jì)方案
- 計(jì)算機(jī)軟件確認(rèn)控制程序
- 造價(jià)員安全生產(chǎn)責(zé)任制
- 橋梁樁基專項(xiàng)施工方案-
評(píng)論
0/150
提交評(píng)論