No.1ベストアンサー
- 回答日時:
○ × ★ ---1段目
■ ○ × ---2段目
△ ■ ○ ---3段目
B B B ---ストップボタン
って感じのスロットをイメージしてください。
1,2,3段目はActionScriptで動的に作ります。
3個のストップボタンはステージに配置しておきます。
インスタンス名はstop0_mc、stop1_mc、stop2_mcとして下さい。
(※ボタンと表現してますがMovieClipで作成してください)
次に絵柄をMovieClipで5個用意してください。
とりあえず高さは40ピクセルで作成しといてください。
これはステージに配置せず、ライブラリ内でリンケージ識別子をつけます。
識別子はpic0_mc~pic4_mcとしてください。
//以下のActionScriptをステージに記述してください--------------------------
//絵柄の数
var pic_num = 5;
//絵柄の高さ
var h_num = 40;
//深度 (※1)
var depth = 0;
//配列の配列を初期化(絵柄を消したり揃ったか見るのに使う) (※2)
var mc_array = new Array();
for (var i = 0; i<=2; i++) {
mc_array[i] = new Array();
}
//ボタンを押した回数(3回押したら絵柄の揃いを判定)
var cnt = 0;
//ボタン押したときの動作設定---------------------------------
for (var i = 0; i<=2; i++) {
_root["stop"+i+"_mc"].onRelease = release_me;
//どのボタンが押されたかわかるように変数idxを作成し番号を保持
_root["stop"+i+"_mc"].idx = i;
}
//ボタンを押したときに呼び出す関数---------------------------
function release_me() {
//ボタンを押した回数加算
_root.cnt++;
//一度押したボタンは押せなくする
this.enabled = false;
//スロットを止める関数を呼ぶ
_root.stop_slot(this);
//3つのボタン全て押したとき
if (cnt == 3) {
//絵柄の揃いをチェックする関数を呼ぶ
hit_check();
}
}
//スロットを止める関数----------------------------------------
//引数:押したボタン(MC)
function stop_slot(btn_mc) {
//1段目に表示する絵をランダムで決定
n = Math.floor(Math.random()*_root.pic_num);
//縦方向の絵の順番は同じなので1段目が決まれば2,3段目も自動的に決まる
//上図でいうと1段目に○が来たら、2段目は必ず■になる (※3)
for (var row = 1; row<=3; row++) {
//動的にMCをステージに配置
_root.mc_array[row-1][btn_mc.idx] =_root.attachMovie("pic"+n+"_mc", "pic"+row+"_"+btn_mc.idx, _root.depth);
//x,y座標を設定 x座標は押したボタンのx座標と同じ
_root.mc_array[row-1][btn_mc.idx]._x = btn_mc._x;
_root.mc_array[row-1][btn_mc.idx]._y = btn_mc._y-btn_mc._height/2-_root.h_num*(4-row);
//どの位置にどの絵柄を配置したかをわかりやすくするため、
//変数numを作成し絵柄の番号を代入 (※4)
_root.mc_array[row-1][btn_mc.idx].num = n;
//2、3段目の絵柄を取得(加算するだけ)
n++;
//絵柄の数を超えたら一周して先頭の絵柄にする
if (n>=_root.pic_num) {
n = 0;
}
//深度加算
_root.depth++;
}
}
//絵柄の揃いをチェックする関数-------------------------------
function hit_check() {
//確認用に出力
for (var row = 0; row<=2; row++) {
str = "";
for (var col = 0; col<=2; col++) {
str += " "+_root.mc_array[row][col].num;
}
trace(str);
}
//斜め位置が揃っているか確認 (※5)
if (_root.mc_array[0][0].num == _root.mc_array[1][1].num && _root.mc_array[1][1].num == _root.mc_array[2][2].num) {
trace("斜めに揃った1");
}
if (_root.mc_array[0][2].num == _root.mc_array[1][1].num && _root.mc_array[1][1].num == _root.mc_array[2][0].num) {
trace("斜めに揃った2");
}
//横
if (_root.mc_array[0][0].num == _root.mc_array[0][1].num && _root.mc_array[0][1].num == _root.mc_array[0][2].num) {
trace("1段目揃った");
}
if (_root.mc_array[1][0].num == _root.mc_array[1][1].num && _root.mc_array[1][1].num == _root.mc_array[1][2].num) {
trace("2段目揃った");
}
if (_root.mc_array[2][0].num == _root.mc_array[2][1].num && _root.mc_array[2][1].num == _root.mc_array[2][2].num) {
trace("3段目揃った");
}
}
//絵柄をリセットする関数-------------------------------------
//このAs内ではどこにも記述してません。
//必要であればリセットボタンを作ってそこから呼んでください。
function reset() {
//ボタンを押せるようにする
//初期化
for (var i = 0; i<=2; i++) {
_root["stop"+i+"_mc"].enabled = true;
}
_root.cnt = 0;
for (var row = 0; row<=2; row++) {
for (var col = 0; col<=2; col++) {
_root.mc_array[row][col].removeMovieClip();
}
}
}
//------------------------------------------------------------------------
[補足]
(※1)
深度を自動的に取得するgetNextHighestDepthは、
ライブラリ内にコンポーネントがあると使用できる深度より大きな値を返してくる。
そうするとその深度でattachMovieしたMCは消せなくなるので深度を自分で管理する。
(※2)
配列の配列≒2次元配列です
(ASに2次元配列は無いみたいなので同じようなものです)
mc_array[行][列]として絵柄のMCを入れています。
1列目 2列目 3列目
1段目 [0][0] [0][1] [0][2]
2段目 [1][0] [1][1] [1][2]
3段目 [2][0] [2][1] [2][2]
って感じになります。
(※3)
今回は、
○
■
△
★
×
という絵柄がぐるぐる回っていると仮定して作成しているため、
1段目が決まれば2,3段目も自動的に決まるってことです。
つまり1段目が揃うと2,3段目も揃うことになります。ですので、
本格的に作るなら1,2,3列目は違う順番(または違う数)の絵柄が
回るように考えないといけません。
特にこだわらないのであれば9つの絵柄を全部ランダムで決めてもいいと思います。
(※4)
絵柄の番号ってこはランダムで取得したnのことで、
n=0ならpic0_mcを、n=1ならpic1_mcをステージに配置しています。
この番号をみればどの列が揃ったのかが簡単に判断できます。
(※5)
3つの値(a,b,c)を比較するとき
if(a==b==c){} という書き方だと (a==b)==c と解釈される
これは a==b が true の場合 true==c の比較になるので正しい結果は得られません
ですので a==b && b==c で判断します。
実行してみるとわかると思いますが、絵柄が回る部分は作っていません。
私は実際に回すよりも回っている様に見えるアニメを配置したほうがそれっぽく見えると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード メモリが使用可能にならない 3 2022/08/13 17:13
- ホームページ作成・プログラミング Adobe FLASH に代わるソフトはありますか? 4 2022/09/27 19:35
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(スマートフォン・携帯電話・VR) ピンで開けるタイプのSIMスロットのスマホですが、SIMカードの入れ替えで頻繁にピンを使ってスロット 2 2022/12/28 12:24
- その他(プログラミング・Web制作) Scratch プログラミングについての質問です 1 2022/06/14 19:42
- CPU・メモリ・マザーボード メモリー増強 2 2023/05/04 11:59
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- タブレット アンドロイドタブレットの機能 iPad air 5、265 WiFi を使っていますが、USBもSD 4 2022/12/10 21:59
- Android(アンドロイド) googleの電話アプリで[常に録音] をオンにする方法を教えてください 2 2023/07/06 22:07
- Flash 私のコンピューター上のファイルが開けられない。 1 2022/07/19 18:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
flash ブラウザのサイズに合わ...
-
テキストファイルから読み込ん...
-
photoshopで書いた四角の枠の中...
-
【VB.NET】別Formのボタンが押...
-
python ボタンを押すと複数の関...
-
テキストボックスの中身をリセ...
-
ランダムに4桁の数字を表示する...
-
OpenGLのグラデーションについて
-
五芒星は、悪魔崇拝とどういう...
-
変数に256文字以上のテキストを...
-
C# chart controlの透過について
-
2つのテキストファイルを比べて...
-
四乗根を英語で言うと・・・
-
指定したURLを開くアクショ...
-
'2465'指定した式で参照してい...
-
CreateDialogについて
-
UWSCのBTN関数について。
-
ダブルクリックと2回クリックの...
-
シンボル化解除の方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで改行の入ったデータの正規...
-
テキストファイルから読み込ん...
-
VBAユーザーホームテキストボッ...
-
縦横比率のを変えずに画像のサ...
-
外部SWFファイルを再生バーでコ...
-
ラッコって?
-
複数ボタンの生成 - actionscript
-
ActonScriptでムービークリップ...
-
コンプトン散乱について
-
addChildで描画した絵(シンボル...
-
upc 7915と mc7915ctは互換性有...
-
ActionScript3のMovieClipについて
-
AS3 mc0~5をまとめて処理する
-
AS3.0 設置した画像を次のラベ...
-
2つの取り込んだ画像を交差さ...
-
flash as3 ムービークリップの...
-
Flashで外部jpgファイルをmcに...
-
3つのムービークリップ再生・巻...
-
日本ヒューレット・パッカード...
-
四角形の端っこをドラッグした...
おすすめ情報