空想曲線

吉里吉里2/KAG3でのゲーム制作に使える小ネタ置き場。ゲーム用素材も置いてます。

吉里吉里/KAG:変則じゃんけんを作ってみる 第4回  

2012-02-18[Sat]
cm0
tb0

前回の記事はこちらから。
カードのチェックとあんぱんの増減処理をします。

では、れっつごーε≡≡ヘ( ´Д`)ノ< 今回は長いよ!

先に画像を貼っておきます。今日はこの処理をやりますぜ。
an_004.jpg


1.カードの組み合わせに応じて呼び出し先を判定する

*check
[ cm ]
; カードの状況に応じてコール先が変わります

; 自分:1コ増やす 相手:1コ増やす
[ call target=*result01 cond="f.pcho==0 && f.echo==0" ]

; 自分:1コ増やす 相手:2コ奪う
[ call target=*result02 cond="f.pcho==0 && f.echo==1" ]

; 自分:1コ増やす 相手:奪い返す
[ call target=*result03 cond="f.pcho==0 && f.echo==2" ]

; 自分:2コ奪う 相手:1コ増やす
[ call target=*result04 cond="f.pcho==1 && f.echo==0" ]

; 自分:2コ奪う 相手:2コ奪う
[ call target=*result05 cond="f.pcho==1 && f.echo==1" ]

; 自分:2コ奪う 相手:奪い返す
[ call target=*result06 cond="f.pcho==1 && f.echo==2" ]

; 自分:奪い返す 相手:1コ増やす
[ call target=*result07 cond="f.pcho==2 && f.echo==0" ]

; 自分:奪い返す 相手:2コ奪う
[ call target=*result08 cond="f.pcho==2 && f.echo==1" ]

; 自分:奪い返す 相手:奪い返す
[ call target=*result09 cond="f.pcho==2 && f.echo==2" ]

; 全ての処理が終わったらカードを消して判定へ
[ carderase ]
[ jump target=*hantei ]
[ s ]

次は上記スクリプトのコール先です。内部でさらにコールしてます。
増:1コ増やす、奪:2コ奪う、返:奪い返す、と省略しています。



2.所持数の増減を調べるサブルーチン

▼自分増+相手増
*result01
; 結果表示マクロ
[ cut_result player="&f.pnum[3]" enemy="&f.pnum[3]" ]

; f.plck=自分のあんぱん増減数、f.enck=相手のあんぱん増減数
[ eval exp="f.plck=1 , f.enck=1" ]

; 自分のあんぱん増減の画像処理をコール
[ call target=*loop01 ]

; 相手のあんぱん増減の画像処理をコール
[ call target=*loop03 ]

; 戻ります
[ return ]


▼自分増+相手奪
*result02
[ cut_result player="&f.pnum[1]" enemy="&f.pnum[4]" ]
; ここでは自分のあんぱんが1コ減るので
; 所持あんぱんが0でないときのみ以下の処理をします

[ eval exp="f.plck=1" cond="f.psto!=0" ]

; ここでは相手のあんぱんが2コ増えます
; あんぱんの最大所持数が10なので、すでに9の時は1増やすに変更します

[ if exp="f.esto!=9" ]
[ eval exp="f.enck=2" ]
[ else ]
[ eval exp="f.enck=1" ]
[ endif ]


; 自分のあんぱん増減画像処理をコール
; ただし、所持個数が0のときは無視

[ call target=*loop02 cond="f.psto!=0" ]

; 相手のあんぱん増減画像処理をコール
[ call target=*loop03 ]
[ return ]


そろそろ面倒になってきたので、必要な部分のみコメント。


▼自分増+相手返
*result03
[ cut_result player="&f.pnum[3]" enemy="&f.pnum[2]" ]
[ eval exp="f.plck=1" ]
[ call target=*loop01 ]
[ return ]


▼自分奪+相手増
*result04
[ cut_result player="&f.pnum[4]" enemy="&f.pnum[1]" ]

[ if exp="f.psto!=9" ]
[ eval exp="f.plck=2" ]
[ else ]
[ eval exp="f.plck=1" ]
[ endif ]

[ eval exp="f.enck=1" cond="f.esto!=0" ]
[ call target=*loop01 ]
[ call target=*loop04 cond="f.enck!=0" ]
[ return ]


▼自分奪+相手奪
*result05
[ cut_result player="&f.pnum[2]" enemy="&f.pnum[2]" ]
[ return ]


▼自分奪+相手返
*result06
[ cut_result player="&f.pnum[0]" enemy="&f.pnum[4]" ]

; ここでは自分のあんぱんが2コ減るので
; 1コしか持ってないときは1に変更しておきます

[ if exp="f.psto>=2" ]
[ eval exp="f.plck=2" ]
[ elsif exp="f.psto==1" ]
[ eval exp="f.plck=1" ]
[ endif ]

[ if exp="f.esto!=9" ]
[ eval exp="f.enck=2" ]
[ else ]
[ eval exp="f.enck=1" ]
[ endif ]

[ call target=*loop02 cond="f.plck!=0" ]
[ call target=*loop03 ]
[ return ]


▼自分返+相手増
*result07
[ cut_result player="&f.pnum[2]" enemy="&f.pnum[3]" ]
[ eval exp="f.enck=1" ]
[ call target=*loop03 ]
[ return ]


▼自分返+相手奪
*result08
[ cut_result player="&f.pnum[4]" enemy="&f.pnum[0]" ]

[ if exp="f.psto!=9" ]
[ eval exp="f.plck=2" ]
[ else ]
[ eval exp="f.plck=1" ]
[ endif ]

[ if exp="f.esto>=2" ]
[ eval exp="f.enck=2" ]
[ elsif exp="f.esto==1" ]
[ eval exp="f.enck=1" ]
[ endif ]

[ call target=*loop01 ]
[ call target=*loop04 cond="f.enck!=0" ]
[ return ]


▼自分返+相手返
*result09
[ cut_result player="&f.pnum[2]" enemy="&f.pnum[2]" ]
[ return ]


処理がかぶってるところもそのままにしていますごめんなさい。
次に、判定の後にコールされている*loop01~*loop04の中身です



3.所持数の増減に応じた画像更新のルーチン

▼自分あんぱん増える
*loop01
; あんぱん増加数が0でないとき
[ if exp="f.plck!=0" ]

; 自分の所持あんぱん数を+1する
[ eval exp="f.psto++" ]

; 自分のあんぱん画像を更新
[ an_siro ]

; 効果音
[ playse storage=coin03 ]
[ ws ]


; あんぱん増加数を-1する
[ eval exp="f.plck--" ]

; ループ処理に戻る
[ jump target=*loop01 ]
[ endif ]


; 戻る
[ return ]


減るときもやってることは同じです。


▼自分のあんぱんが減る
*loop02
[ if exp="f.plck!=0" ]
[ eval exp="f.psto--" ]
[ an_siro ]
[ playse storage=cursor01 ]
[ ws ]
[ eval exp="f.plck--" ]
[ jump target=*loop02 ]
[ endif ]
[ return ]


相手のあんぱんも同じように処理します


▼相手のあんぱんが増える
*loop03
[ if exp="f.enck!=0" ]
[ eval exp="f.esto++" ]
[ an_kuro ]
[ playse storage=coin03 ]
[ ws ]
[ eval exp="f.enck--" ]
[ jump target=*loop03 ]
[ endif ]
[ return ]


▼相手のあんぱんが減る
*loop04
[ if exp="f.enck!=0" ]
[ eval exp="f.esto--" ]
[ an_kuro ]
[ playse storage=cursor01 ]
[ ws ]
[ eval exp="f.enck--" ]
[ jump target=*loop04 ]
[ endif ]
[ return ]


こうすると、あんぱん画像が1コずつ増えたり減ったりします。
2コ増減するときも、1コずつ画像が更新されます。
手間がかかるのは分かっていたけど、どうしてもやりたかった(゚ε゚)キニスンナ

また、変数についての補足ですが

1.[ eval exp="f.plck = f.plck + 1" ]
2.[ eval exp="f.plck+=1" ]
3.[ eval exp="f.plck++" ]

上記3つは全て同じ処理です。好きなの使っちゃいなYO☆
ただし、3番目は+1もしくは-1の時しか使えません。

あと、ここまで読ませておいて「なん……だと!?」っちゅー話なんですが、
今回の処理は、もっと短く、よりカンタンに書けると思います。
頭の中で「こういう処理をしたい」というのを考えながら
ぱぱーっと打ち込んでいるので、かなりムダなことをしているはずです。
スリム化できるところは後で見つけて修正するかも知れませんが
とりあえず今はこのままにしておきます。

べ、別に面倒だからとかそういうんじゃないんだk(ry
すいません、メンドクサイです(´Д`)

今回はここまでー。
次回は、ゲームの終了処理とルールの呼び出しについてです。


関連記事

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://kopacurve.blog33.fc2.com/tb.php/199-37f3db4e
この記事にトラックバックする(FC2ブログユーザー)

現在のページ

Category

Link

Comment

Mailform

Author

Twitter