请先看演示:
千禧夜那天,和MM在黄鹤楼看完礼花,为了迎接新千年的第一缕曙光,就去北京路的玩具吧打发时间,看到乐这个玩具。在玩具吧里,“单身贵族”是设奖的项目,你可以试一试。:)。BTW,有朋友说它也叫做“独立棋”。
游戏方法
“单身贵族”的基本走法和跳棋类似,只能隔着一颗珠子走到前方的空格中,所不同的是作为“桥”被跳过的珠子要被拿掉。珠子沿前后左右方向跳动,但是不能斜着跳。
灰色是珠子,绿色是棋盘和棋盘上的凹洞,鼠标点击某颗珠子时,珠子会被选中成红色,第二次点击珠子跳动的目的凹洞,你会看到珠子出现在凹洞中,同时,中间被跳过的珠子消失。屏幕右下脚的“RESET”按钮,可以重新开始游戏。
有多种玩法:
玩法1:一次走一步,不能连跳,将最后一颗珠子留在棋盘的中间。(见右图) | |
玩法2:一次走一步,不能连跳,将最后一颗珠子留在棋盘的任意一处。 | |
玩法3:可以在直线上连跳,最后用18步,将最后一颗珠子留在棋盘的中间。 |
请到这里下载原始代码
制作过程
1.建立symbol,ball,movieclip
ball是movieclip,有两个主要的frame。frame 1显示ball的初始状态,frame checked显示被选中的状态,checked是frame的label哟。
2.建立symbol,hole,button
hole是按钮button,在over frame上加乐个黄圈作为指示。
3.建立symbol,reset,button
reset按钮就是flash lib中的ping pong按钮乐。
4.建立symbol,title,movieclip
用mask作的光sao扫过字的效果,类似的做法在“闪光地带”有介绍。
5.建立ball array,Instance名称如下表,背景为绿色的是在FLA文件中有效的Instance :
b_1_1 | b_1_2 | b_1_3 | b_1_4 | b_1_5 | b_1_6 | b_1_7 |
b_2_1 | b_2_2 | b_2_3 | b_2_4 | b_2_5 | b_2_6 | b_2_7 |
b_3_1 | b_3_2 | b_3_3 | b_3_4 | b_3_5 | b_3_6 | b_3_7 |
b_4_1 | b_4_2 | b_4_3 | b_4_4 | b_4_5 | b_4_6 | b_4_7 |
b_5_1 | b_5_2 | b_5_3 | b_5_4 | b_5_5 | b_5_6 | b_5_7 |
b_6_1 | b_6_2 | b_6_3 | b_6_4 | b_6_5 | b_6_6 | b_6_7 |
b_7_1 | b_7_2 | b_7_3 | b_7_4 | b_7_5 | b_7_6 | b_7_7 |
6.建立hole array,在每个hole中设置action如下,因为每个hole所代表的坐标需要单独设置,所以需要为每个hole的action作修改。所修改的部分在下面的代码中以红色问号 ? 表示,其相应的数字在凹洞坐标表中体现。格式为:cur_i , cur_j。//表示讲解的部分。
On (Release) Set Variable: "cur_i" = ? Set Variable: "cur_j" = ? If (not ball_checked) //ball_checked表示是否有珠子被选中,此条件表示“如果没有珠子被选中” If (GetProperty ("b_"&cur_i&"_"&cur_j,_visible )) //如果当前凹洞中的珠子可见,则选中此珠 Set Variable: "check_i" = cur_i Set Variable: "check_j" = cur_j Set Variable: "ball_checked" = true Begin Tell Target ("b_"&cur_i&"_"&cur_j) Go to and Stop ("checked") //珠子变成红色 End Tell Target End If Else //不论第二次选择的凹洞里是什么都作个初始化,这样如果所选的凹洞 不符合条件,就会取消上次所选的珠子 Set Variable: "ball_checked" = false Begin Tell Target ("b_"&check_i&"_"&check_j) Go to and Stop (1) End Tell Target If (not GetProperty ("b_"&cur_i&"_"&cur_j,_visible )) //如果当前凹洞中的珠子不可见,即此凹洞为空 If ((((((check_i - cur_i) = 2) or ((check_i - cur_i) = -2) ) and (check_j = cur_j) ) or ((((check_j - cur_j) = 2) or ((check_j - cur_j) = -2)) and (check_i = cur_i))) and (GetProperty ( "b_"&((check_i + cur_i) /2 )&"_"&((check_j + cur_j) /2 ),_visible ))) //判断是否直线跳动,并且中间的珠子可见 Set Property ("b_"&check_i&"_"&check_j,Visibility) = false Set Variable: "check_i" = (check_i + cur_i)/2 Set Variable: "check_j" = (check_j + cur_j)/2 Set Property ("b_"&check_i&"_"&check_j, Visibility) = false Set Property ("b_"&cur_i&"_"&cur_j, Visibility) = true End If End If End If End On
1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | 1,7 |
2,1 | 2,2 | 2,3 | 2,4 | 2,5 | 2,6 | 2,7 |
3,1 | 3,2 | 3,3 | 3,4 | 3,5 | 3,6 | 3,7 |
4,1 | 4,2 | 4,3 | 4,4 | 4,5 | 4,6 | 4,7 |
5,1 | 5,2 | 5,3 | 5,4 | 5,5 | 5,6 | 5,7 |
6,1 | 6,2 | 6,3 | 6,4 | 6,5 | 6,6 | 6,7 |
7,1 | 7,2 | 7,3 | 7,4 | 7,5 | 7,6 | 7,7 |
凹洞坐标表
在这段代码中,对于每个凹洞,除了前两行的:
Set Variable: "cur_i" = ? Set Variable: "cur_j" = ?
后面的大段代码都是不变的,所以最好做成一个过程调用。在flash 中可以用:
Call (“frame label”)
来模拟,具体的做法是:在某一层创建一个空 key frame ,然后在时间线上双击它,在它的action中加入相应的代码,填上其label,例如:BallClicked ,然后在其他按钮的action中使用:
Call (“BallCilcked”)
就行乐。:)。我因为作完后,才知道如此模拟过程,够衰是吧,:(,所以...等到下一版(动画版)时再说乐。:)
6.reset按钮的action,值得注意一点的就是双重循环。
On (Release) Set Variable: "i" = 1 Loop While (i <= 7) Set Variable: "j" = 1 Loop While (j <= 7) Set Property ("b_"&i&"_"&j, Visibility) = true Begin Tell Target ("b_"&i&"_"&j) Go to and Stop (1) End Tell Target Set Variable: "j" = j + 1 End Loop Set Variable: "i" = i + 1 End Loop Set Property ("b_4_4", Visibility) = false Set Variable: "ball_checked" = false End On
7.起始frame的初始化action,也可以使用reset按钮的action。
Set Property ("b_4_4", Visibility) = false Set Variable: "ball_checked" = false
8.棋盘背景就没什么好说乐。还有什么吗?
游戏解法
如果你有什么心得,分享一下好吗?来信请到:iasc@263.net
(完)
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |