|
|
*first
;半角セミコロンの右側の部分はコメントを表します。
//半角スラッシュ2連続でもかまいませんし、
/*このような「括弧」を使ってその間を
改行があっても一気にコメントにすることもできます。*/
;コメントは命令として反映されないので、好きなことを書くことができます。
;複数人でプログラムを組む場合、コメントを駆使した情報伝達は絶対必須です。
;なお、書き込むときにはタブはスペースの無駄なので入れていません。
randomize
;randomize文は最初に1回だけ実行すれば十分です。
screen 0,640,480,0
;基本的に、変えることのない初期設定はプログラムの最初に入れましょう。
;int a など
;解り易くするため、配列変数でない変数も宣言した方がいいかもしれません。(他の言語では基本的に変数の宣言が必須です。)
dim cord1,6
dim cord2,6
dim e,6;自分用メモ:カードを使用したかどうかの真偽型変数
sdim picture,9,6;自分用メモ:じゃんけんカードの文字(8+1バイトを6つ)
;変数類の定義は、プログラムの最初で1回行っておけば十分です。
picture.0="ぐー1"
picture.1="ぐー2"
picture.2="ちょき1"
picture.3="ちょき2"
picture.4="ぱー1"
picture.5="ぱー2"
;場合分けの変数は、なるべく解り易くしておくのが吉です。
*saisyo
repeat 6
cord1.cnt=cnt
cord2.cnt=cnt
e.cnt=1
;基本的に真偽型変数は1が真、0が偽であるとされます。
;この場合、カードがある=「真」としたいので入れ替えました。
loop
repeat 6
a=rnd(6);自分用メモ:D6−1
b=cord1.cnt
cord1.cnt=cord1.a:cord1.a=b;自分用メモ:配列変数cord1の要素を並べ替えているのか?
a=rnd(6);自分用メモ:D6−1
b=cord2.cnt
cord2.cnt=cord2.a:cord2.a=b;自分用メモ:配列変数cord2の要素を並べ替えているのか?
loop
;この部分ですが、それぞれのカードの並びを入れ替えることでそれぞれの破棄するカードと相手のカードを出す順番を決めることになるのですか?
;私はそれで判断しています。
f=0
g=60;自分用メモ:位置座標を示す変数か?
cls 0
*mein
;tmp=1
await 10;自分用メモ:なぜここで少し待たせるのだろう?
d=10;自分用メモ:位置座標を示す変数か?
if (f==5){
await 1000
goto *saisyo}
redraw 0
clrobj
repeat 5
pos d,20
d=d+80
if e.cnt{
objsize 60,20,20
;オブジェクトの大きさはその都度はっきりと決めたほうがいいでしょう。
button goto picture.(cord1.cnt),*doreka}
else{
objsize 60,20,20
button gosub "",*null}
;「裏返したカード」を意識させるため、別の(意味のない)ボタンを置くようにしました。
;オブジェクトに慣れていない場合、オブジェクトの数や配置をころころ変えるのはお勧めできません。
loop
redraw 1
;while tmp
;await 100
;wend
;自分用メモ:↑のやり方だと重くなるので、仕方なくgotoを使う。
stop
*null
;ここでは何もしません。
;「使用済みのカードなど、反応してほしくないオブジェクト」のために使いましょう。
return
*doreka
;ここでは、「何番目のオブジェクトが選ばれたか」から選んだカードの内容を判断しています。
;これはボタンからサブルーチンに値を渡せないための苦肉の策で、他にもっと良い処理方法があるかもしれません。
trump=cord1.stat
e.stat=0
gosub *jannkenn
goto *mein
*jannkenn
;じゃんけんの判定を一貫したサブルーチンにできるようにしました。
;似たような処理を繰り返す場合はサブルーチンは絶対的に便利なので、どんどん使いましょう。
amari1=trump\2;自分用メモ:自分のカードのポイント、2で割った余り
amari2=cord2.f\2;自分用メモ:相手のカードのポイント、2で割った余り
shou1=(trump-amari1)/2;自分用メモ:自分のカードの種類、2で割った商
shou2=(cord2.f-amari2)/2;自分用メモ:相手のカードの種類、2で割った商
if (shou1==shou2){
yuuretsu=amari1-amari2
switch yuuretsu
case -1
moji="劣勢負け"
swbreak
case 0
moji="あいこ"
swbreak
case 1
moji="優勢勝ち"
swbreak
swend}
else{
if (shou1+1)\3==shou2{
moji="勝ち"}
else{
moji="負け"}}
;ここでの意図は以下の通り。
;グーの1点を0、グーの2点を1、チョキの1点を2、チョキの2点を3、パーの1点を4、パーの2点を5とするカード識別変数aを準備する。
;ここで、aを2で割った商をb、余りをcとすると、c+1はカードのポイントを表すことになる。
;さらに、bは0でグー、1でチョキ、2でパーを表すことになるので、1対1のじゃんけんならば以下のことが言える。
;・自分のbと敵のbが等しいならばあいこ。
;・自分のbに1を足したものを3で割った余りと敵のbが等しいならば自分の勝ち。
;・上2つの条件に当てはまらなければ敵の勝ち。
;ここで、カードに優劣をつけたのであいこの時の処理が少し複雑になっている。
pos 10,g
mes moji
pos 90,g
mes "相手は"+picture.(cord2.f)+"を出し、自分は"+picture.trump+"を出した。"
;これは手始めなので、なるべく多くの情報を出すようにしましょう。
;デバッグの時に情報が多いのは有利です。
g=g+30
f++
;tmp--
return
http://www.geocities.jp/eliza_evans_3rd/
|
|