// forked from hidebo's #3 click game ver 0.2 // forked from hidebo's #2 click game ver 0.1 // forked from hidebo's #1 click game ver 0.01 package { // お約束 import flash.display.*; // 使うなら書け import flash.text.*; import flash.events.*; import flash.utils.getTimer; import flash.ui.Keyboard; [SWF(width=240, height=240, backgroundColor=0xFFFFFF)] // 意味不明 public class Main extends Sprite { // イマイチ不明 private const ON:Boolean = true; private const OFF:Boolean = false; private const MAT_R:int = 10; // 的の半径 private const MAT_R_C:int = 3; // 的(中心)の半径 private const TRY_COUNT:int = 3; // 何回するか private const BONUS:int = 10; // 的の中心をクリックした時のボーナス点 private const START_HISCORE:int = TRY_COUNT*(100-BONUS); // 最初のハイスコア private const WEEK:Array = ["日", "月", "火", "水", "木", "金", "土"]; private var gm:TextField; // ゲームメッセージ表示部 private var sf:TextField; // スコア表示部 private var canvas:Sprite; // 的1表示部 private var canvas2:Sprite; // 的2表示部 private var trycount:int = 0; // クリックした回数 private var score:int = 0; // スコア合計 private var hiscore:int = START_HISCORE; // ハイスコア private var oldtime:int = 0; private var mode:int = 0; // ゲームモード private var stat:int = 0; // ゲームステータス private var eventonclick:Boolean = OFF; // マウスクリックしてたらON private var onclick:Boolean = OFF; // マウスクリックしてたらON private var frameactiveflag:Boolean = OFF; // 1フレームの処理中ならON // こっからはデバッグ用 private var irqcounter:uint = 0; // IRQC private var monitor:TextField; // デバッグ用のモニター表示部 private var debug:Array = [0, 0, 0, 0, 0, 0, 0, 0]; /****************************************************************/ // 始まりはいつもここから /****************************************************************/ public function Main() { gm = new TextField(); // メッセージを書く場所さ gm.selectable = false; // マウス選択不可だぜ gm.autoSize = "left"; addChild(gm); monitor = new TextField(); // モニターだすのだ monitor.defaultTextFormat = new TextFormat("_typeWriter", 7, 0x0, true); monitor.width = stage.stageWidth; // 幅は画面いっぱい monitor.height = 12; // 高さ monitor.background = true; // 背景色つけるよ monitor.backgroundColor = 0xF0F0F0; // 多少灰色 addChild(monitor); sf = new TextField(); //スコア書くよ sf.defaultTextFormat = new TextFormat("_ゴシック", 12, 0x0, true); sf.autoSize = "left"; sf.selectable = false; // マウス選択不可 addChild(sf); canvas = new Sprite(); //的書くよ canvas2 = new Sprite(); //的(中心)書くよ canvas.graphics.beginFill(0xFF0000); // 的は赤色で塗りつぶすよ canvas.graphics.drawCircle(0, 0, MAT_R); // (0,0)ベースで書くよ canvas.graphics.endFill(); // さあ書け addChild(canvas); canvas.visible = false; // さしあたり消えといて canvas2.graphics.beginFill(0x0); // 的(中心)は黒色で塗りつぶすよ canvas2.graphics.drawCircle(0, 0, MAT_R_C); // (0,0)ベースで書くよ canvas2.graphics.endFill(); // さあ書け addChild(canvas2); canvas2.visible = false; // さしあたり消えといて stage.frameRate = 10; // 60FPS(1秒60コマ)だよ addEventListener(Event.ENTER_FRAME, onEnterFrame); // 1フレーム(インター)ごとに飛んできてね stage.addEventListener(MouseEvent.CLICK, MouseClickFunc); // マウスクリックしたら飛んでね stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDownFunc); // キーが押されたら飛んでね } private function MouseClickFunc(event:MouseEvent):void { eventonclick = ON }; private function KeyDownFunc(event:KeyboardEvent):void{ /* var i:int=2 debug[i++]=event.keyCode; // キーコード debug[i++]=event.keyLocation; // Shiftキーなど 左=1 か 右=2 か debug[i++]=event.ctrlKey; // Ctrlキーの押下状態 debug[i++]=event.shiftKey; // Shiftキーの押下状態 debug[i++]=event.altKey; // Altキーの押下状態 */ }; /****************************************************************/ // 1フレーム毎に飛んでくるよ /****************************************************************/ private function onEnterFrame(evt:Event):void { var date:Date = new Date(); frameactiveflag = ON; // こっからフレーム処理が始まるよ onclick = eventonclick; eventonclick = OFF; monitor.text = ""; monitor.appendText(date.fullYear+"年"+(date.month+1)+"月"+date.date+"日"+"("+WEEK[date.day]+")"+date.toLocaleTimeString()); for (var i:int = 0; i < debug.length; i++) monitor.appendText(","+debug[i]); // デバッグフラグ書くよ monitor.appendText(", "+(++irqcounter)); // IRQC書くよ switch (mode) { case 0 : game_init(); break; case 1 : game_start(); break; case 2 : game_main(); break; case 3 : game_score(); break; case 4 : game_ending(); break; default : break; } debug[0] = mode; debug[1] = stat; frameactiveflag = OFF; // フレーム処理終わったよ } /****************************************************************/ // まずは初期化しちゃうよ /****************************************************************/ private function game_init():void { score = 0 // スコアは0に trycount = 0 // 回数も0 mode++; stat=0; } /****************************************************************/ // "START"表示中だよ /****************************************************************/ private function game_start():void { if (stat == 0) { gm.defaultTextFormat = new TextFormat("_typeWriter", 18, 0x0, true); gm.text = "START"; // START表示したい gm.x = (stage.stageWidth - gm.width ) / 2; // 真ん中に gm.y = (stage.stageHeight - gm.height) / 2; gm.visible = ON; // メッセージ出しちゃってください sf.text = ""; sf.appendText("\n\nHISCORE="+hiscore+"点"); // ハイスコア書くね sf.x = (stage.stageWidth - sf.width)/2; // スコアの位置は下だよ sf.y = (stage.stageHeight*3/4); // スコアの位置は下だよ matoRandom(); stat++; } if (onclick==OFF) return; gm.visible = OFF; // メッセージはさしあたり消えといて mode++; stat=0; } /****************************************************************/ // ゲームプレイ中だよ /****************************************************************/ private function game_main():void { switch (stat) { case 0 : oldtime=getTimer(); // 開始時間を覚えとこう sf.text = "SCORE="+score.toString(); // スコア書くよ sf.x = 0; sf.y = stage.stageHeight - sf.height; // スコアの位置は下だよ sf.visible = ON; // スコア表示するよ canvas.visible = ON; // 的がでま~す canvas2.visible = ON; // 的(中心)も一緒に // event canvas.addEventListener(MouseEvent.CLICK, onMouseClick); // 的をクリックしたら飛んでね canvas2.addEventListener(MouseEvent.CLICK, onMouseClick2); // 的(中心)をクリックしたら飛んでね stat++; case 1 : break; case 2 : mode++; stat=0; break; } } /****************************************************************/ // ゲーム終了でスコア表示中だよ /****************************************************************/ private function game_score():void { if (stat == 0) { gm.visible = true; // メッセージは出したいね gm.defaultTextFormat = new TextFormat("_typeWriter", 30, 0x0, true); gm.text = "FINISH"; // FINISH表示したい gm.x = (stage.stageWidth - gm.width ) / 2; // 真ん中に gm.y = (stage.stageHeight - gm.height) / 2; sf.text = "SCORE = "+score; var wk:int = sf.text.length; var format:TextFormat = new TextFormat("_typeWriter", 20, 0xFF0000, true, true, true); sf.appendText("/"+TRY_COUNT*100+"点"); sf.setTextFormat(format, 8, wk); var oldhiscore:int = hiscore; if (score > hiscore) hiscore = score; sf.appendText("\n\nHISCORE="+hiscore+"点"); // ハイスコア書くね if (score > oldhiscore) { // ハイスコアだね? sf.appendText("記録更新(旧"+oldhiscore+"点)"); } else if (score == oldhiscore) { // タイスコアだね? sf.appendText("タイ記録"); } sf.x = (stage.stageWidth - sf.width)/2; // スコアの位置は下だよ sf.y = (stage.stageHeight*3/4); // スコアの位置は下だよ stat++; } if (onclick==OFF) return; if (hiscore >= TRY_COUNT*100) { // エンディング? mode++; stat=0; } else { mode = 0; stat=0; } } /****************************************************************/ // エンディング表示中だよ /****************************************************************/ private function game_ending():void { if (stat == 0) { gm.defaultTextFormat = new TextFormat("_typeWriter", 20, 0x0, true); gm.text = "congratulations!!"; // "おめ!"表示したい gm.x = (stage.stageWidth - gm.width ) / 2; // 真ん中に gm.y = (stage.stageHeight - gm.height) / 2; stat++; } } /****************************************************************/ // 的をクリックしたらやる事あるよ /****************************************************************/ private function onMouseClick(evt:MouseEvent):void { scoreUp(0); } private function onMouseClick2(evt:MouseEvent):void { scoreUp(BONUS); } private function scoreUp(bonus:int):int { var nowscore:int; var clicktime:int=getTimer()-oldtime; oldtime += clicktime; // 時間更新して次に備えるよ nowscore = (10000-clicktime)/100+bonus; // 時間でスコア決めちゃった if (nowscore > 100) nowscore = 100; // あんまり多いと100点に if (nowscore < 0) nowscore = 0; // あんまり遅いと0点に score += nowscore; // スコア合計アップ trycount++; // 試行回数アップ if (trycount >= TRY_COUNT) { // 終わっちゃった? canvas.visible = false; // 的はさしあたり消えといて canvas2.visible = false; stat++; return 1; } else { sf.text = trycount+"回 SCORE="+(score).toString()+"点, 今回"+nowscore+"点"; // スコア書くよ if (bonus) { sf.appendText("(+BONUS)"); // IRQC書くよ } sf.y = stage.stageHeight - sf.height; // スコアの位置は下だよ matoRandom(); // 的はランダムがお好き } return 0; } /****************************************************************/ // 的の場所をランダムで決めちゃうよ /****************************************************************/ private function matoRandom():void { canvas.x = Math.random()*(stage.stageWidth-MAT_R*2)+MAT_R; // ランダムで次の位置決めるよ canvas.y = Math.random()*(stage.stageHeight-MAT_R*2)+MAT_R; canvas2.x = canvas.x; canvas2.y = canvas.y; } } } #4 click game ver 0.21