第一个flash游戏--配对游戏

看了《AS3.0游戏编程大学》用里面的素材模仿做了第一个flash游戏。。。

game

Get Adobe Flash player
 
游戏影片剪辑代码,按照AS3.0 JIT编译的说明,把游戏代码放在构造函数里面貌似不是好的做法,效率低,因为JIT编译对构造函数里面的代码不进行动态编译。
MyGame.as
  1 package 
  2 {
  3     import flash.display.MovieClip;
  4     import flash.events.MouseEvent;
  5     import flash.utils.Timer;
  6     import flash.events.TimerEvent;
  7     import flash.text.TextField;
  8     import flash.events.Event;
  9     import flash.utils.getTimer;
 10     import flash.display.IBitmapDrawable;
 11     import flash.media.SoundChannel;
 12     import flash.net.SharedObject;
 13 
 14 
 15     public class MyGame extends MovieClip
 16     {
 17 
 18         private const boardWidth:uint = 6;
 19         private const boardHeight:uint = 6;
 20         private const cardWidth:Number = 52;
 21         private const cardWHeight:Number = 52;
 22         private const offsetX:Number = 120;
 23         private const offsetY:Number = 45;
 24         private const pointForMatch:int = 100;
 25         private const pointForMiss:int = -5;
 26 
 27 
 28         private var cardArr:Array;
 29         private var firstCard:Card10;
 30         private var secondCard:Card10;
 31         private var cardNumbers:uint = 0;
 32         private var flipBackTimer:Timer;
 33 
 34         private var startTime:uint;
 35         private var gameTime:uint;
 36         private var timeText:TextField;
 37         private var score:int;
 38         private var scoreText:TextField;
 39 
 40         private var firstSound:FirstCardSound=new FirstCardSound();
 41         private var matchSound:MatchSound=new MatchSound();
 42         private var missSound:MissSound=new MissSound();
 43 
 44 
 45 
 46         public function MyGame():void
 47         {
 48             //var highScore:SharedObject = SharedObject.getLocal("userHighScore");
 49             //trace(highScore.data.HS);
 50             //highScore.data.HS = 0;
 51             //highScore.flush();
 52             //so.data.highScore = new Number(1234567890);
 53             //so.flush();
 54 
 55             startTime = getTimer();
 56             gameTime = 0;
 57 
 58             timeText=new TextField();
 59             timeText.x = 400;
 60             addChild(timeText);
 61 
 62             scoreText=new TextField();
 63             scoreText.x = 50;
 64             score = 0;
 65             addChild(scoreText);
 66 
 67 
 68             addEventListener(Event.ENTER_FRAME,showTimeAndScore);
 69 
 70 
 71 
 72             var Arr:Array=new Array();
 73             cardArr=new Array();
 74             for (var i:uint=0; i<boardWidth*boardHeight/2; i++)
 75             {
 76                 Arr.push(i);
 77                 Arr.push(i);
 78             }
 79 
 80             for (i=0; i<boardHeight; i++)
 81             {
 82                 for (var j:uint=0; j<boardWidth; j++)
 83                 {
 84                     var thiscard:Card10=new Card10();
 85                     //thiscard.stop();
 86                     cardArr.push(thiscard);
 87                     thiscard.x = i * cardWidth + offsetX;
 88                     thiscard.y = j * cardWHeight + offsetY;
 89                     var no:uint = Math.floor(Math.random() * Arr.length);
 90                     thiscard.cardFace = Arr[no];
 91                     Arr.splice(no,1);
 92                     thiscard.gotoAndStop(thiscard.cardFace+2);
 93                     //thiscard.gotoAndStop(1);
 94                     thiscard.addEventListener(MouseEvent.CLICK,cardClik);
 95                     addChild(thiscard);
 96                     cardNumbers++;
 97                 }
 98             }
 99 
100             flipBackTimer = new Timer(2000,1);
101             flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,allFlipBack);
102             flipBackTimer.start();
103 
104         }
105 
106         private function showTimeAndScore(event:Event)
107         {
108             gameTime = getTimer() - startTime;
109             timeText.text = "time:" + clockTime(gameTime);
110             scoreText.text = "score:" + String(score);
111 
112         }
113 
114         private function clockTime(time:uint):String
115         {
116             var seconds:int = Math.floor(time / 1000);
117             var minutes:int = Math.floor(seconds / 60);
118             seconds -=  minutes * 60;
119             var timeString:String = minutes + ":" + String(seconds + 100).substr(1,2);
120             return timeString;
121         }
122 
123         private function allFlipBack(event:TimerEvent)
124         {
125             for (var i:uint=0; i<cardArr.length; i++)
126             {
127                 //if(!this.getChildAt(i) is MovieClip)
128                 //trace("yes");
129                 //(Card10)(this.getChildAt(i)).startFlip(1);
130                 cardArr[i].startFlip(1);
131 
132             }
133 
134             //trace("t");
135             flipBackTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,allFlipBack);
136 
137         }
138 
139         private function cardClik(event:MouseEvent)
140         {
141             //var highScore:SharedObject = SharedObject.getLocal("userHighScore");
142             //trace(so.data.highScore);
143             //var file:FileReference=new FileReference();
144             //file.save(clockTime(gameTime),"t.txt");
145             //MovieClip(root).gotoAndStop("GameOver");
146             var thiscard:Card10=(event.currentTarget as Card10);
147             //trace(thiscard.cardFace);
148             if (firstCard == null)
149             {
150                 firstCard = thiscard;
151                 //thiscard.gotoAndStop(thiscard.cardFace+2);
152                 thiscard.startFlip(thiscard.cardFace+2);
153                 score +=  pointForMiss;
154                 PlaySound(firstSound);
155             }
156             else if (firstCard==thiscard)
157             {
158                 thiscard.startFlip(1);
159                 firstCard = null;
160                 PlaySound(firstSound);
161 
162 
163             }
164             else if (secondCard==null)
165             {
166                 secondCard = thiscard;
167                 //thiscard.gotoAndStop(thiscard.cardFace+2);
168                 thiscard.startFlip(thiscard.cardFace+2);
169                 if (firstCard.cardFace == secondCard.cardFace)
170                 {
171                     PlaySound(matchSound);
172                     removeChild(firstCard);
173                     removeChild(secondCard);
174                     firstCard = null;
175                     secondCard = null;
176                     cardNumbers -=  2;
177                     if (cardNumbers == 0)
178                     {
179                         //trace(cardNumbers);
180 
181                         MovieClip(root).Time = clockTime(gameTime);
182                         MovieClip(root).Score = score;
183 
184                         var highScore:SharedObject = SharedObject.getLocal("userHighScore");
185 
186                         if (score > highScore.data.HS)
187                         {
188                                 highScore.data.HS=score;
189                                 highScore.flush();
190                         }
191                         MovieClip(root).HighScore=highScore.data.HS;
192                         MovieClip(root).gotoAndStop("GameOver");
193                     }
194                     //trace(cardNumbers);
195                     score +=  pointForMatch;
196 
197 
198                 }
199                 else
200                 {
201                     PlaySound(missSound);
202                     //flipBackTimer=new Timer(2000,1);
203                     flipBackTimer.reset();
204                     flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,FlipBack);
205                     flipBackTimer.start();
206                     score +=  pointForMiss;
207 
208                 }
209 
210             }
211             else
212             {
213                 PlaySound(firstSound);
214                 //firstCard.gotoAndStop(1);
215                 //secondCard.gotoAndStop(1);
216                 firstCard.startFlip(1);
217                 secondCard.startFlip(1);
218                 firstCard = thiscard;
219                 //thiscard.gotoAndStop(thiscard.cardFace+2);
220                 thiscard.startFlip(thiscard.cardFace+2);
221                 secondCard = null;
222                 flipBackTimer.stop();
223                 score +=  pointForMiss;
224             }
225 
226         }
227         private function FlipBack(event:TimerEvent)
228         {
229             if (firstCard != null && secondCard != null)
230             {
231 
232                 firstCard.startFlip(1);
233                 secondCard.startFlip(1);
234                 firstCard = null;
235                 secondCard = null;
236 
237             }
238             flipBackTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,FlipBack);
239         }
240 
241         private function PlaySound(soundObj:Object)
242         {
243             var channel:SoundChannel = soundObj.play();
244         }
245 
246 
247     }
248 
249 }

 

卡片类代码:

Card10.as
 1 package  
 2 {
 3     import flash.events.Event;
 4     
 5     public class Card10 extends Card
 6     {
 7 
 8         private var cardface:uint;
 9         private var flipToFrame:uint;
10         private var Step:uint;
11         public function Card10():void
12         {
13             cardface=0;
14         }
15         
16         public function get cardFace():uint
17         {
18             return cardface;
19         }
20         public function set cardFace(cf:uint):void
21         {
22             cardface=cf;
23         }
24         
25         public function startFlip(toWhichFrame:uint)
26         {
27             flipToFrame=toWhichFrame;
28             Step=10;
29             this.addEventListener(Event.ENTER_FRAME,flip);
30         }
31         
32         public function flip(event:Event)
33         {
34             Step--;
35             if (Step > 5) 
36             { // first half of flip
37                 this.scaleX = .20*(Step-6);
38             } 
39             else 
40             { // second half of flip
41                 this.scaleX = .20*(5-Step);
42             }
43             
44             if(Step==5)
45             {
46                 gotoAndStop(flipToFrame);
47             }
48             
49             if(Step==0)
50             this.removeEventListener(Event.ENTER_FRAME,flip);
51         }
52 
53     }
54     
55 }

 

把flash嵌入html代码:

<title>DEMO</title>
<head>
<script type="text/javascript" src="http://files.cnblogs.com/wonderKK/swfobject.js"></script>
</head>
<body>
   <form id="Form1">
      <div id="flashcontent">
         <a href="http://www.adobe.com/go/getflashplayer">
            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" border="0" /> 
         </a>      
      </div>
   </form>
   <script type="text/javascript">    
       var so = new SWFObject("http://files.cnblogs.com/wonderKK/game.swf", "mymovie", "800", "600", "7", "#FFFFFF");
       so.write("flashcontent");
   </script>
</body>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值