作者morphise (QQQQQ)
看板Flash
标题Re: [问题] ActionScript 3.0 的作业
时间Mon Mar 14 08:20:32 2011
※ 引述《morphise (QQQQQ)》之铭言:
: 目前老师出了一个设计小游戏的题目
: 老师要我们在画面上绘制几个方块
: 然後每个方块从红橙黄绿蓝靛紫七种颜色中随机挑选
: 每个方块被按到的时候就会按照上面的颜色顺序变换
: 变到紫色後就在跳回红色
: 然後我希望是使用者要在这七个方块的颜色搭配上达到一定的组合後
: 才可以进行下一步
: 举例来说就是要一直按方块来改颜色达到像是这个组合才成功 ▉▉▉▉▉▉▉
: 目前我用tweenLite to 来变换颜色
: 但是却没办法设定哪一个方块颜色被改了 而且改成甚麽
: 所以也没办法用if来看是否达到正确组合
: 板上有人可以指点一下方向应该是大概要怎麽做吗?
: (因为才刚上4,5堂课
: 所以老师只教了基本的东西
: 我想破头都想不到要怎麽用老师教的东西做这个作业)
我用了最阳春的笨方法写出来了
以下是程式内容
不知道有没有人知道有什麽方法可以不要写五个functions来跑?XD
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
public class Main extends Sprite
{
public var allBlocks:Array;
public var totalItems:uint;
public var red:Number = 0xff0000;
public var green:Number = 0x00ff00;
public var blue:Number = 0x0000ff;
public var yellow:Number = 0xffff00;
public var pink:Number = 0xff00ff;
public var color:Array;
public var answer:Number = 0;
public function Main()
{
allBlocks = new Array();
color = new Array();
totalItems = 5;
for (var i:uint; i < totalItems; i++)
{
var randomNum:Number = Math.round(Math.random());
if (randomNum <= .2) color[i] = red;
if (.2< randomNum && randomNum <= .4) color[i] = green;
if (.4< randomNum && randomNum <= .6) color[i] = blue;
if (.6< randomNum && randomNum <= .8) color[i] = yellow;
if (.8< randomNum && randomNum <= 1) color[i] = pink;
var tempBlocks:DrawBlocks = new DrawBlocks (color[i]);
tempBlocks.x = 30 + stage.stageWidth/5 * i;
tempBlocks.y = stage.stageHeight/2;
allBlocks.push(tempBlocks);
addChild (allBlocks[i]);
}
trace("To unlock, you need to find the combination below");
trace("Red Green Blue Yellow Pink");
if (color[0] == red) answer = answer +1;
if (color[1] == green) answer = answer +1;
if (color[2] == blue) answer = answer +1;
if (color[3] == yellow) answer = answer +1;
if (color[4] == pink) answer = answer +1;
endGame(answer);
trace(answer);
allBlocks[0].addEventListener(MouseEvent.MOUSE_DOWN, firstMouseClickHandler);
allBlocks[1].addEventListener(MouseEvent.MOUSE_DOWN, secondMouseClickHandler);
allBlocks[2].addEventListener(MouseEvent.MOUSE_DOWN, thirdMouseClickHandler);
allBlocks[3].addEventListener(MouseEvent.MOUSE_DOWN, forthMouseClickHandler);
allBlocks[4].addEventListener(MouseEvent.MOUSE_DOWN, fifthMouseClickHandler);
}
public function firstMouseClickHandler (e:MouseEvent) : void
{
TweenPlugin.activate([TintPlugin]);
var checktimes:Boolean = true;
if (color[0] == pink)
{
color[0] = red;
checktimes = false;
}
if (color[0] == yellow) color[0] = pink;
if (color[0] == blue) color[0] = yellow;
if (color[0] == green) color[0] = blue;
if (color[0] == red && checktimes == true)
{
color[0] = green;
answer = answer - 1;
}
if (color[0] == red) answer = answer + 1;
checktimes = true;
TweenLite.to(e.target, .1, {tint:color[0]});
trace(answer);
endGame (answer);
}
public function secondMouseClickHandler (e:MouseEvent) : void
{
TweenPlugin.activate([TintPlugin]);
var checktimes:Boolean = true;
if (color[1] == pink)
{
color[1] = red;
checktimes = false;
}
if (color[1] == yellow) color[1] = pink;
if (color[1] == blue) color[1] = yellow;
if (color[1] == green)
{
color[1] = blue;
answer = answer - 1;
}
if (color[1] == red && checktimes == true) color[1] = green;
if (color[1] == green) answer = answer + 1;
checktimes = true;
TweenLite.to(e.target, .1, {tint:color[1]});
trace(answer);
endGame (answer);
}
public function thirdMouseClickHandler (e:MouseEvent) : void
{
TweenPlugin.activate([TintPlugin]);
var checktimes:Boolean = true;
if (color[2] == pink)
{
color[2] = red;
checktimes = false;
}
if (color[2] == yellow) color[2] = pink;
if (color[2] == blue)
{
color[1] = yellow;
answer = answer - 1;
}
if (color[2] == green) color[2] = blue;
if (color[2] == red && checktimes == true) color[2] = green;
if (color[2] == blue) answer = answer + 1;
checktimes = true;
TweenLite.to(e.target, .1, {tint:color[2]});
trace(answer);
endGame (answer);
}
public function forthMouseClickHandler (e:MouseEvent) : void
{
TweenPlugin.activate([TintPlugin]);
var checktimes:Boolean = true;
if (color[3] == pink)
{
color[3] = red;
checktimes = false;
}
if (color[3] == yellow)
{
color[1] = pink;
answer = answer - 1;
}
if (color[3] == blue) color[3] = yellow;
if (color[3] == green) color[3] = blue;
if (color[3] == red && checktimes == true) color[3] = green;
if (color[3] == yellow) answer = answer + 1;
checktimes = true;
TweenLite.to(e.target, .1, {tint:color[3]});
trace(answer);
endGame (answer);
}
public function fifthMouseClickHandler (e:MouseEvent) : void
{
TweenPlugin.activate([TintPlugin]);
var checktimes:Boolean = true;
if (color[4] == pink)
{
color[4] = red;
checktimes = false;
answer = answer - 1;
}
if (color[4] == yellow) color[4] = pink;
if (color[4] == blue) color[4] = yellow;
if (color[4] == green) color[4] = blue;
if (color[4] == red && checktimes == true) color[4] = green;
if (color[4] == pink) answer = answer + 1;
checktimes = true;
TweenLite.to(e.target, .1, {tint:color[4]});
trace(answer);
endGame (answer);
}
public function endGame ( corrects:uint) : void
{
if ( corrects == 5 )
trace("UNLOCKED!");
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 76.124.81.21
1F:→ aquarianboy:比较简单的,就是只要写一个event handler就行了 03/14 09:24
2F:→ aquarianboy:然後在event handler里用switch判断是哪颗按钮被按了 03/14 09:24
3F:→ aquarianboy:高级一点点的话,可以用strategy pattern来代替switch 03/14 09:26
4F:→ zephyrhymn:数量不多 用pattern反而显得累赘 03/14 11:03
5F:推 peacedove:写个class?? 03/14 12:41
6F:→ peacedove:我没很仔细看code 可是如果做的事情都一样 不是一个 03/14 12:43
7F:→ peacedove:function就可以了吗?? 03/14 12:43
8F:→ dsmwang:可以用7的次方数来当作确认标准...XD 03/14 12:51
9F:→ dsmwang:就不需要一堆if了 03/14 12:51
10F:推 KawasumiMai:为什麽不要用btn包mc,然後呼叫click event就好 03/14 16:51
11F:→ KawasumiMai:外观的颜色不要当作判断标准,用阵列比对就好 03/14 16:52
12F:推 etrexetrex:你的code 很有趣XD 03/14 20:20
13F:→ zephyrhymn:可以用多型的概念来写...重复code太多 03/16 17:08
14F:→ zephyrhymn:同一阶层的判断switch会比if好很多尤其判断数量多时 03/16 17:09
15F:→ morphise:哈哈 会这麽写是因为老师还没教到button跟mc 03/17 09:55
16F:→ morphise:我也希望可以不要用那个多function来判断 可是我试很多次 03/17 09:56
17F:→ morphise:都不知道要怎麽用for loop来跑 03/17 09:57
18F:→ morphise:为什麽我的code很有趣阿XD 03/17 09:57
19F:→ morphise:要怎麽样才可以判断是哪个方块被按了阿? 03/17 10:29
20F:→ aquarianboy:试试 event.currentTarget 03/17 11:52
21F:→ morphise:可是老师希望我们用他之前上课教的东西就好 03/17 12:25
22F:→ morphise:他说用他教过的东西就可以写出来了 可是大家给的建议他都 03/17 12:26
23F:→ morphise:没教过... 03/17 12:26
24F:→ morphise:我现在最大的问题是不知道怎麽让系统知道我点的方块是第 03/17 12:27
25F:→ morphise:几个方块 如果这个问题解决的话 程式就会精简很多 03/17 12:28