「となりのピカロ」 となりのピッカロ ピッカーロー♪ ピッカロ ピッカーロー♪ 闇の中に 昔から住んでるー♪ となりのピッカロ ピッカーロー♪ ピッカロ ピッカーロー♪ 地獄の淵でーだけー あなたに訪れるー 不思議なであーいー♪
…馬鹿で…すみません…! ピカロは借金にまみれて保険金殺人されそうな一歩手前の人にしか見えない妖精なんです。雨の日に雀荘で会えたり。
配牌プログラムを組んでみました。 以前、20060816日記あたりで「麻雀プログラム」作りたいとか書いていましたが、私は本気ですよ!福本麻雀ゲーム! で、今日思い立って、配牌を。使用言語はHSP3.0。 前書き。 私のプログラムの書き方って…もしかして結構汚い…?? ランダム発生の使い方に手間取りました。repeat&loopで、配列変数にそれぞれ値を割り振っていくしかないんでしょうか。 こちら( http://www.onionsoft.net/hsp/)でダウンロード出来まするHSP3.0の中の、スクリプトエディタに以下の文を貼り付けて、メニュの「HSP(P)」→「コンパイル+実行(C)」を押せばOK。 思い立って、2時間ほどで組んだのですが、結構上出来で嬉しい! 萬子・筒子・索子・東南西北白發中を0〜33と決め、配列変数yama(0〜135)に、「0,0,0,0,1,1,1,1,2,2,…」とそのまま入れた後、変数wに0から135の中でランダムの数を割り振り、それをhaipai(0〜135)に割り当てていくというもの。 一度wに使った数を二度充てないようにするにはどうしようかと悩んだけれど、一度使った後にwに-1を代入して、再度ループが回ってきたときにw=-1ではないかを確かめれば良いとわかりました。 本当は、実際の配牌みたいに4個ずつ取り分けて行きたかったんですが…まあいいかなと妥協してしまいました…。コンピュータで出される乱数って、乱数表から導かれるものでしたか?ランダムにするためにパターンがあるのだとしたら、4個ずつ取り分けることで、もう少しバラかした方がいいのかしら。 次は和了り判定プログラム(他家からのロン、とかツモ、とかは気にせず、とりあえず役判定)を組もう…とはしてみたのですが、ものすごい難物ですねコレ!! 例外から判定するべきでしょうから、「国士→七対子→そのほか」とすべきでしょうね。それにしても、これ、自分がツモったとき・他家が牌を捨てたとき全てに行わなくちゃいけない処理なんですよね…。 リーチについては、変数reachでも立てて、0から1に、とかで大丈夫でしょうが…。 以下プログラム。#include "hspda.as" title "配牌" font "",10
;洗牌s x=0;各牌 y=0;牌種類 repeat 34,0 repeat 4,0 yama(x)=y x=x+1 loop y=y+1 loop ;洗牌e //変数yama(0~135)に0から34が配列変数として入っている。 ;山積s randomize z=0 repeat *hanteiW w=rnd(136) if yama(w)=-1:goto *hanteiW haipai(z)=yama(w) if z=135:break z=z+1 yama(w)=-1 loop ;山積e //haipai(0~135)に0から34がランダム化されて入っている。 ;配牌s v=0 repeat 13,0 tehaiA(cnt)=haipai(v) v=v+1 loop repeat 13,0 tehaiB(cnt)=haipai(v) v=v+1 loop repeat 13,0 tehaiC(cnt)=haipai(v) v=v+1 loop repeat 13,0 tehaiD(cnt)=haipai(v) v=v+1 loop ;配牌e ;理牌s sortval tehaiA,0 sortval tehaiB,0 sortval tehaiC,0 sortval tehaiD,0 ;理牌e ;表示(Aのみ) num=0 pos 0,0 color 0,0,255 mes "自家" repeat 13 color 255,0,0 mes num color 0,0,0 mes ","+tehaiA(cnt) num=num+1 loop ;ついでに他もテスト pos 40,0 color 0,0,255 mes "下家" repeat 13 color 255,0,0 mes num color 0,0,0 mes ","+tehaiB(cnt) num=num+1 loop pos 80,0 color 0,0,255 mes "対面" repeat 13 color 255,0,0 mes num color 0,0,0 mes ","+tehaiC(cnt) num=num+1 loop pos 120,0 color 0,0,255 mes "上家" repeat 13 color 255,0,0 mes num color 0,0,0 mes ","+tehaiD(cnt) num=num+1 loop ;最初のツモ pos 160,0 color 0,0,255 mes "最初のツモ" color 0,0,0 mes haipai(52) ;ツモ山 pos 220,0 color 0,0,255 mes "ツモ山1" repeat 23,52 color 255,0,0 mes num color 0,0,0 mes ","+haipai(cnt) num=num+1 loop pos 260,0 color 0,0,255 mes "ツモ山2" repeat 23,75 color 255,0,0 mes num color 0,0,0 mes ","+haipai(cnt) num=num+1 loop pos 300,0 color 0,0,255 mes "ツモ山3" repeat 23,98 color 255,0,0 mes num color 0,0,0 mes ","+haipai(cnt) num=num+1 loop pos 340,0 color 0,0,255 mes "ツモ山4" repeat 15,121 color 255,0,0 mes num color 0,0,0 mes ","+haipai(cnt) num=num+1 loop ;34種×4牌=136牌の配牌完了。 stop |