上一篇 | 下一篇

用Director 制作配对记忆游戏

发布: 2007-1-25 15:45 | 作者: 爱伊 | 来源: aougu.net | 查看: 205次

  配对记忆游戏也算是一款比较经典的小游戏了,今天和大家一起讨论如何用Director来制作这类游戏。
6iZ}t#bW$|@
Xl~'uK*E 一.游戏介绍:奥古多媒体;pNT{ u1A ^
   配对记忆游戏的玩法很简单,在牌上按一下鼠标左键就会翻开一张卡片,最多可以同时翻开两张,如果是两张相同,就可以配对消掉,不同的话就会自动盖回去,让用户继续选择。一般会有个时间限制,必须要在规定的时间内完成。直到把所有的卡片都消去之后游戏结束。这之中其实并没有什幺特殊技巧,完全是要靠瞬间的印象来回想自己点过的卡片花色与位置,然后逐一配对消去。(如图)
,A.g,R6Yz@*B"I ^
M$JraI-I"a3` 二.游戏制作:奥古多媒体!{A9I5UaW8I
奥古多媒体&GEint)}F X
  游戏制作思路和玩法一样也很简单,这里我们以一个实例来比较详细的讨论整个过程。
#vX f-f jy8~pHl
2sP.EIp   游戏程序设计可以分为三个部分来,游戏初始化代码(相当于出题),卡片代码和计时器代码。奥古多媒体+tI6?K4['lU ` r
奥古多媒体d(O2M P#_
(1) 游戏初始化代码:
,Doo,n'hRB O
&o}l7tc5WWa   分析:奥古多媒体/cb6| ~8V,D F
奥古多媒体BbwaT,@"Wt
  进行游戏的初始化,这里我们用到了10种不同的卡片,由于要配对每一张卡片在舞台上都会出现两个,也就是说我们要在舞台上随机放好20张卡片,开始时不会看到卡片正面,都统一显示为背面。这里我们将卡片一次编号为p1,p2..p10。奥古多媒体4p3k2`(uT
奥古多媒体\7_9tI$}t r,wy
代码:奥古多媒体&Mk1y#Ax_f)h%qu

W'Oi R+D rt 1> 我们先要得到一个代码编号列表,由于每个卡片出现两次,所以每个都添加了两次。奥古多媒体6@'A | g'Z.W[{ro
奥古多媒体.l]1@Jwc$B-H#Kg
tlist=[]奥古多媒体2i6_j:b#m T Sp
  repeat with i = 1 to 10
/w k%]-T!r/^I)f     add tlist,i奥古多媒体0aj zbRH jdLWC
    add tlist,i奥古多媒体 G'q3|wn*L
  end repeat
~V"t+?q 奥古多媒体Wo&q5CZC2j1PG
2> 将列表随机打散。奥古多媒体/[x W3v]s
奥古多媒体[%]/{b){NPG7U
tlist=randomlist(tlist)
#t({#L,q+[:Ag
f%Z.z/X6}"a randomlist()是一个自定义的将指定列表随机打散的函数,论坛上有相关的讨论,这里就不做具体介绍了。奥古多媒体-X.{2zv4hnVb T

6R|E:fFv 3> 然后对应的设置好这20个卡片精灵的pMember属性。奥古多媒体:d{S)XI+lG-j'K s-X
奥古多媒体oRY2MI"w3w J6o
  len=tlist.count奥古多媒体@B e I5u4`;n
  repeat with i=1 to len
-RP llq(N5O,c"hf     sprite(10+i).pMember=member("p"&tlist[i])
G"@(nt#c  end repeat
$Bz%T%t:G"G.F:ET vs J
f/Ws~ l PMember记录了每个卡片精灵的正面member。(不是直接将sprite(10+i). member =member("p"&tlist[i]),因为开始时都显示为背面,即 member “back”。)
&S7f,D n#B"|
l^L H2Y3Q/?9e&N 4> 相关变量初始化:
x6G(_{k
QO$E0}I:E3]D --gSelSpNumList记录了用户选择的精灵通道号列表。奥古多媒体.p5a-G%O N~4uQTm F
  gSelSpNumList=[]奥古多媒体tzJ5Ur5c:}E
--gRightNum记录了用户已经配对成功的对数。奥古多媒体}.T)yban}RRj
  gRightNum=0奥古多媒体&z{#Aa0L]Gdo3UCE

@"CrV5H B(}-q (2) 卡片精灵代码:奥古多媒体2SfD~g#h
奥古多媒体)T_1YB(@*`
    接下来介绍核心的卡片代码了。奥古多媒体|D p8l d

VmJOb%n1`$^#l \ 1> 定义好属性变量:
$T Hrn8k b2N}S 奥古多媒体ICRjn'@
property pSelf --自己奥古多媒体JROH+W,wP'VI
property spriteNum --自己的精灵号奥古多媒体F"SV} CX7Au
property pMember --自己正面的Member奥古多媒体!MlmU'j;d
property pClicked --是否已经点击
Xc/RA v:S s{ 奥古多媒体AoHp F/glN
2> 精灵初始化:奥古多媒体5P!d1TwKtR'l

7L'@$f f/V#a Y on beginSprite me
ni6M.Cn!|\8e   pSelf=sprite(me.spriteNum)
,mo h`6i   pClicked=0奥古多媒体-@p_(OM8H,F
end奥古多媒体X cQ _.E8FDa5^

SG:Or u%J 3> 卡片的鼠标点击判断:奥古多媒体HY iAN
奥古多媒体?"Le,R9F
on mouseDown me
Q&l}&O:^D2\:^ --在一次判断中,一个已经点击的卡片不能再次被点击
6~] oGR6T NTEuw   if not pClicked then 奥古多媒体 _fue/aH {
    --点击后播放点选音效并显示正面图片。奥古多媒体:j3[ ]6t#U!iG6s6t Mc
    puppetsound 1,"down" 奥古多媒体+s$zgJ+^}
    pSelf.member=pMember奥古多媒体['W:A+bd9qw
    pClicked=1奥古多媒体$h KSN4N u
    --添加自身精灵号到一个记录列表,如果用户已经选择好了两个卡片就开始比较,看看是否匹配。奥古多媒体;LXus?]
    add gSelSpNumList,spriteNum奥古多媒体1C4lE7W4a#B3^}4z
    if gSelSpNumList.count=2 then checkIfMatch(me) 奥古多媒体 t5V[7A-?U
  end if 奥古多媒体L"F^g`'j
end
w7d4uHC 奥古多媒体2UZ4T pB;W7U'x
4> 检测是否匹配(看看是否匹配)奥古多媒体'TC[2Ag4o xg9p \

s#D _.}0qu^El on checkIfMatch me 奥古多媒体$H-ApB?4X@q&u1A|
  --如果匹配则播放音效
Gh-|1@#y if sprite(gSelSpNumList[1]).member=sprite(gSelSpNumList[2]).member then
gf ol-y*HO     puppetsound 1,"up"
4yI)@xBX-D*u     --等待声音播放完成,一个自定义函数。奥古多媒体*Ta^EF1F&e0A(x_j
    delayWaitSound(1,1) 奥古多媒体`m%n CN
    sprite(gSelSpNumList[1]).blend=0奥古多媒体6N)B f oXxy
    sprite(gSelSpNumList[2]).blend=0 奥古多媒体(`lknrqx P5P8Q
    --正确数加一奥古多媒体mY1i,g9q
    gRightNum=gRightNum+1奥古多媒体H4N$K7sD)Me
    --如果正确的数目等于10则游戏成功。
$?:|uY VOK     if gRightNum=10 then
.Pw I1z C(y"\'W1M+f       go "win"
7i9O5~F1U }H     end if 奥古多媒体e8t7jzj ^ q$R-` K
  else 奥古多媒体JL7QwV]n6k_;r,y
    --延时40个ticks即2/3秒,让用户在看一下卡片就翻回背面。
;yc9oO0i3S&m ]vX C     delayTime(40,1)
t5Vbm0v)T n~@     --不匹配则将该两个卡片显示回背面奥古多媒体a8n1j xe1z aH
    sprite(gSelSpNumList[1]).member=member("back")奥古多媒体_ ?1TVi7^gJ
    sprite(gSelSpNumList[2]).member=member("back") 奥古多媒体XK;|&F~-o0_
    --pClicked=0恢复可点选状态。
hL]El y l     sprite(gSelSpNumList[1]).pClicked=0
?&q f'|MgeP9@     sprite(gSelSpNumList[2]).pClicked=0 奥古多媒体 [I/G:sM!U(R
  end if
@&@r'O_\2E^[+`i   --清空用户选择卡片记录列表,为后面的选择做好准备。
s:[J(O#M^ j   gSelSpNumList=[] 奥古多媒体G0t-O|5F Cs
end奥古多媒体HQ0mM2zU"T"i
奥古多媒体W't-q h ed8?3A+P!GM
  至此整个游戏的核心代码都介绍玩了,还剩下一个计时器代码。奥古多媒体M.L&w#fTzI

7E|m:_1k,\ (3) 计时器代码:奥古多媒体_]E}1E0lk3I

;iGS|S2t 这里就简单的介绍一下计时器代码。奥古多媒体N y5afe!`3yx

skO^%o${uf'b z 1> 定义并初始化属性变量:奥古多媒体2UD9B#Lgj*}4H
property pOldtime
w B B0G+O wuo on beginsprite me奥古多媒体]g2c}.v6Z
   iniTimer(me) 奥古多媒体9K2S T P@?|-S
end奥古多媒体,EX&R8m\
on iniTimer(me) 奥古多媒体NW7J$bym'R/Q
  --初始化计时器
+D Vg]u?!B2E --pOldtime记录的游戏开始时的时间。
jw9O,s2r`G h   pOldtime=the timer
,DC:EqWhbau   member("Timer").text="80"
&I Dw4xJi&?M$} end
H+Qr9x?6VvM 奥古多媒体0f S7s:fy,|/{I
2> 更新计时器显示,并检测时间是否已经用完。奥古多媒体-Gi/K9l(k%s"h
奥古多媒体$@)S0Hr&r&rm
on exitframe me
.e yVKe [Rd[,}   --更新计时器,得到已用时间(单位:秒数)奥古多媒体sUAkR+v
  passed=(the timer-pOldtime)/60
ImU.\a \^   member("Timer").text=string(80-passed)奥古多媒体 Ln Jk~g}?[ I$T
  --如果已用时间等于80秒就去到游戏结束画面。奥古多媒体A,U[;fg a4CwT
  if passed=80 then 奥古多媒体J;]\0biDo.X
    go "lose"奥古多媒体]|D,~2U_F tz
  end if 奥古多媒体~,f9Qa\ V5U
  go the frame
{ d+O_Pt9mX-q end奥古多媒体#vTk"P&FU
奥古多媒体r2Wb-]*f,XhcC

I i2jk^G   至此,整个游戏的代码设计过程就介绍玩了,希望大家能从中学到一些东西。本文以介绍代码设计为核心,大家完全可以把它设计得更漂亮,加上更多得创意。奥古多媒体)XS+TX CJ(X6ci

k"n1r-tVzY7S   下载范例

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


音乐
落叶 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 如果爱能早些说出来
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 为你而活 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
城府 假如 花海 兰亭序 爱太痛 舍不得 你若成风 女人如烟 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错