total:37102 t:10 y:19
2016-12 煉獄日記
2016-12-31.Sat 寝込み正月になりそう
2016/12/31(Sat) 18:15:49
なんだか風邪気味~
寝正月ならぬ寝込み正月になりそう~

な感じで昨日の昼から殆ど寝込んでたのですが、早めに寝たのが良かったのかちょっと元気になってきてたりはするんですけど。
でもタイミング的にもう一眠りしてるまに歳はこえてそうぽ。

まあいいか。
別に何かするわけでもないし。

そんな感じでちょっと元気なうちに、寝てる間にちょろちょろ考えてた麻雀の思考ルーチンまわりちょっと組んでみる。

とりあえず思考ルーチンんとも呼べないような雛形としてのアレで、どんな状況でも国士狙うだけの思考ルーチンを作ってみる。

ふおっ!?

とりあえずテストで10局ぐらいまわして終局後の手牌を出力してみてるのですが。

いきなり国士あがってるぅ~

いくら役満のなかでもあがりやすいとはいえ、たった10局回しただけでいきなり和了でたりするとはおもわなんだ……常に国士決め打ちキ○ガイ打法恐るべし……。

でもさすがに四人とも国士キ○ガイの思考ルーチンだと、どこかにかたよっちゃうんですね。それぞれ4枚しかない一九字牌牌四人で取り合うわけですから。
…あれ? なんか妙にプレイヤ1だけほかの局も国士寸前になってる。

……ぶほっ。

これプレイヤ1しか自摸ってないことない?

自摸イベントのなかで次のプレイヤの自摸イベントを登録する感じにしてたんですけど、

// 一番最後のイベント実行
// trueを返したときは終了(和了or流局)
if(m_eventStack.back()->exec()){
return true;
}
m_eventStack.pop_back();
return false;


こんな感じでm_eventStack.back()->exec()のなかで新しいイベントをpush_back()してるという……。
新しいイベントをpush_back()した後pop_back()してるので、結局のこるのは一番最初のイベント。そう、プレイヤ1の自摸イベント。

そりゃ一局60回近く一人で自摸ってれば国士ぐらい和了るわな……_| ̄|○

酷い凡ミスだw
んでback()をfront()にpop_back()をpop_front()に変えたらちゃんと自摸が4人順番に回るようになりました。

したらまあ、こんなもんかーという結果に。

第0局目
一萬_二萬_七萬_四筒_六筒_七筒_九筒_九索_東_南_発_中_中_
四萬_六萬_九萬_一筒_二筒_九筒_九筒_二索_九索_南_西_西_発_
一萬_八萬_八萬_九萬_一筒_三筒_四筒_一索_東_南_北_発_中_
四萬_五萬_九萬_一筒_三筒_五筒_一索_西_北_北_白_白_中_
終局
第1局目
一萬_五萬_一筒_一筒_四筒_五筒_六筒_九筒_一索_南_西_北_白_
七萬_八萬_九萬_一筒_五筒_七筒_九筒_一索_東_南_北_発_中_
一萬_二萬_四萬_四萬_五萬_九筒_一索_九索_西_白_白_発_中_
一萬_二萬_二萬_四萬_九萬_一筒_九筒_九索_九索_東_南_西_白_
終局
第2局目
一萬_五萬_六萬_四筒_四筒_七筒_一索_九索_九索_西_北_白_発_
九萬_一筒_三筒_四筒_九筒_九筒_一索_九索_東_東_南_白_中_
二萬_三萬_八萬_九萬_一筒_三筒_九筒_一索_南_西_北_発_中_
一萬_二萬_四萬_八萬_八萬_九萬_一筒_一索_東_南_西_中_中_
終局
第3局目
八萬_九萬_一筒_七筒_八筒_九筒_九筒_三索_九索_南_西_北_中_
一萬_二萬_九萬_一筒_四筒_九筒_一索_九索_東_西_白_発_中_
一萬_三萬_五萬_七萬_一筒_二筒_九筒_一索_九索_東_西_白_発_
一萬_三萬_三萬_六萬_九萬_一筒_九索_東_南_北_白_発_中_
終局
第4局目
二萬_三萬_八萬_一筒_二筒_二筒_三筒_一索_九索_南_北_北_白_
一萬_一筒_九筒_一索_九索_東_南_西_北_白_白_白_中_
一萬_四萬_四萬_九萬_一筒_六筒_七筒_七筒_九筒_九索_南_発_中_
一萬_二萬_四萬_七萬_九萬_三筒_四筒_九筒_九索_東_西_発_中_
終局
第5局目
一萬_六萬_七萬_二筒_六筒_八筒_九筒_一索_九索_東_北_白_発_
一萬_九萬_四筒_五筒_九筒_四索_九索_九索_東_東_南_西_発_
一萬_九萬_一筒_四筒_八筒_一索_南_南_西_白_白_中_中_
二萬_四萬_五萬_八萬_二筒_五筒_一索_東_西_西_北_発_中_
終局
第6局目
六萬_九萬_四筒_八筒_八筒_二索_二索_九索_東_南_北_発_中_
一萬_四萬_九萬_一筒_一筒_九筒_一索_九索_南_白_白_発_中_
四萬_四萬_四萬_六萬_三筒_三筒_八筒_九筒_一索_東_南_西_北_
一萬_七萬_八萬_八萬_九萬_三筒_四筒_五筒_九索_東_西_西_発_
終局
第7局目
七萬_九萬_一筒_九筒_一索_九索_九索_南_西_西_北_白_発_
一萬_二萬_三萬_六筒_七筒_九筒_一索_九索_東_南_西_北_中_
四萬_五萬_五萬_九萬_一筒_一索_九索_東_南_北_発_発_中_
一萬_七萬_九萬_一筒_二筒_二筒_六筒_八筒_一索_二索_三索_西_中_
終局
第8局目
一萬_四萬_七萬_一筒_五筒_六筒_六筒_九筒_一索_九索_東_北_白_
三萬_六萬_八萬_八萬_九萬_三筒_七筒_八筒_九筒_東_北_発_中_
四萬_九萬_一筒_三筒_四筒_七筒_九筒_一索_九索_東_南_西_発_
一萬_三萬_一筒_九筒_一索_九索_南_北_白_白_発_発_中_
終局
第9局目
一萬_三萬_六萬_九萬_一筒_九筒_九索_東_南_西_北_発_中_
三萬_五萬_七萬_九萬_四筒_六筒_六筒_六筒_八筒_一索_九索_発_中_
一萬_六萬_七萬_九萬_一筒_五筒_五筒_東_南_西_北_白_発_
一萬_二萬_二萬_三萬_八萬_九萬_一筒_九筒_一索_九索_南_西_白_
終局

ざっと見たところ、第9局目の一人目が国士二向聴になってるぐらいで、やっぱ遠いですね。
さすが出やすいといっても役満は10局ぐらいじゃ出てこないのが普通ですよね……と、とりあえず想定内の感じにおさまって一安心ぽ。

いまは単純に不要牌と必要牌入れ替えるだけで、捨て牌の捨てる順番とかも考慮してない感じだったり。場の残り牌の数の確認すらもしてないし。
対子二つ目の処理回りでフリテン有りルールとの兼ね合いもあるし十三面待ち以外狙わないなんてのも考えると、早々にリタイアで国士崩れの別の手ねらうかベタ下りかとか、いろいろと追加すべき物はあるんだけど、そういうのを組み込むのはまだまだ先の話になりそう。

とりあえず国士とおなじく特殊役(他と複合がない独立した役)の七対子のverもつくって、そこからようやくまともな思考ルーチン作り開始な感じぽ。

でも大体の流れができて、いちおう麻雀のゲームの進行でモノがうごいてると、ちょっと楽しくなる瞬間ではある。

単純な不要牌と必要牌入れ替えだけ自動でやってるのみてるだけでも楽しいw
2016-12-29.Thu 王牌不要論
2016/12/29(Thu) 07:40:25
ツモ回数と王牌
ttp://www9.plala.or.jp/majan/km14.html

ゲームの二人打ち形式の麻雀の場合、自摸回数はどうなるのだろう? と調べてた時にヒットした記事。

普通はポンとかで自摸順変わらなければ、東南は18枚、西北は17枚の自摸が出来る。

で二人打ちの場合、捲られることのない死に牌が増えるので、自摸の枚数の上限を上げている場合がある模様。

調べてみたところ、二人の合計自摸数が「36回、40回、44回」の三パターンが既存のゲームなどでは多いとのこと。

36は18*2で、ほぼそのままのルールで、どうせ死に牌なんだからもうちょっと捲ろうぜってのがそれ以降のパターンな感じで。
さすがに最後まで……18*4=72回というのは一局が長ったらしすぎるのか存在しない模様。

で、最初のURLの記事。

通常の四人打ちで、王牌の分の死に牌って必要? と。

実際、場に残ってる枚数考えて、当り牌は後一枚あるはずだっ! と思っていても、それが王牌にあると既に詰んでるというのは、なんだか理不尽だなーと感じてはいたけど。(嶺上開花はロマンではあるけどさ……それでも王牌のなかのさらに4枚しかチャンス無いし)

そこから、そもそもドラとかいらなくね? つーか槓とかもいらなくね? と言ったところまで議論が飛躍していく。


実際、麻雀プログラミングする場合、特にエッセンスとして積み込みとか考えた場合、王牌ってまず要らないんですよね。

自摸もドラも嶺上牌も、全部単一の牌山リスト一本あればOKで、そこから配牌後は常にどの動作も一枚popするだけで。ドラだけは捲ったものだけ別のリストに保存する感じで。
んで、残り枚数とか自摸回数とかで終局判定と。

王牌の死に牌分律儀に死に牌として確保しないで、その浮いてる分も積み込みでは利用可能牌にした方が有意義ですし。

良くある脱衣麻雀のギミックアイテムで、「一発自摸」(必ず自摸で当り牌弾いてくる)とかやるときも、いちいち山牌と王牌の両方走査とかしなくて良いし。
てなかんじで最初に王牌を確保して別で管理する意義が0なんですよね。

あとはポンで自摸順変わるのとか槓回りの処理とかは、記事の内容とは別の意味でプログラマ的に、こんなルール考えた奴は氏ねと思うぐらいうっとうしいルールだなと思いますが……w

四人打ちならドラ表示牌以外の牌無くなるまで自摸ったったらええんちゃう?

というのはアリじゃねと確かに思うですね。死に牌残す意味がわからない。

それが二人打ちとなると、死に牌がプレイヤ二人分手牌13*2+自摸18*2の62枚もあるし。

でもそこで最後の一枚まで自摸はちょっとゲーム的にも酷い感じになるのは目に見えてるし。

三人打ちだと色一色分の中張牌((2..8)*4)=28枚を抜くのでそれほど死に牌はふえないんですが。

でも二人打ちで抜き牌はなぁ。

てことで、二人打ちはやはり緩やかにでも配牌に細工したりとかの方向が妥当なのかなーと。

でも脱衣麻雀のシステムであったのが、この配牌だとこの和了形の設定だなというのが決まってて、その形に自摸も用意されてる。そのレールに乗れるかというのが攻略法的なのも、たまにはいいけど毎度それだと興ざめするですよね。

打ってる途中で、「しまったこの設定は清一色設定だったのか……」とか自摸がやたらと同じ色ばかり続いたあとで気づいたりとか、あとから修正効かない、打ち筋を強制される感じ、あたりがちょっと気持ち悪くもあったりするぽ。

その辺は攻略法を見つけることに喜びを感じるプレイスタイルと、自然な流れの運と実力の勝負で楽しむタイプとかで感想は分かれる部分だなぁ。


そんな感じで、二人打ちの自摸回数増やすのは余所でもやってるしOKとしても。四人打ちでも自摸回数増やすのも……なにげにアリなのかなーとかおもたりして。

どうせ自分で作るのはアイテム有りのゲテモノ麻雀なんだしさ(ぉ


あと思い出したのは、昔やった4人打ちのPCゲームの麻雀だったかで。

敵CPUの強さをEASYにすると、一切あがらない、聴牌すらしないというのがあったな……。それはそれで詰まらなすぎるだろうとおもたっけw

あと、山牌積み込みで、特定役へのレールがひかれてるような感じの時、ポンする、されるて自摸順変わるとアウトとかもあったな。
その辺はどうなんだろう。

最初から牌山から各キャラ枚に配牌と同じ感じで自摸用のリストに牌配って、自摸はそこからてのだと、ポンで自摸順変わっても関係無くレール打ち(今考えた名称)出来ると思うんだけど、それはリアルじゃないっていう判断なのだろうか? でもそこはこだわるのかよっていうバランス感覚はよくわかんないけどw

そもそも、CPUがしょぼいと、まず鳴かないってのもあったですね。
鳴きを含めた手作りというのが考慮してない安っぽい作りとかもあるけど、ポンで自摸順変えたら牌山の積み込みが無駄になるだろってことなのかな。
で、自分でないて自摸順変えると墓穴掘るというw

でも実際、鳴きって麻雀プログラム的には、無かったらすごく楽ではあるですね。
基本鳴くと安くなるし。
まあ世代的に哭きの竜とかのイメージもあって、鳴くとすごい手作ってるというイメージもあったりするんですが、実際には苦し紛れに鳴いたしょぼ手が殆ど。早和了っつってもそこまで早くならないどころか手をさらしたことによるデメリットとか、手換え出来にくくなるとか不利な点のが多いし。

二人打ち限定だと互いにポンでもチーでも出来るし自摸順も変わらないからまだ楽ですけど。

でもまあこの辺は、こだわりだしたらきりがないってレベルの話なんでしょうけど。

そんなかんじで相変わらずPGガリガリ。


なにげに今日の迷いポイントは、理牌なし設定のとき、上下逆さ表示牌を混ぜる作りとして。(どうせ立直とかで牌を横に傾けるかのフラグつけるんだから上下反転もついでにつけとけやってかんじで)
二値のランダム生成てどうしようなーと。
たった二値のランダム生成でもメルセンヌ・ツイスタとかつかうんか? rand()で十分? でも実際rand()よりもメルセンヌ・ツイスタのが軽さでも上とかいう記事もあったりするし。でも二値限定だとどうなん? 二値だと偏りとか気にしないでもいいようなアレだし……。いや気になる偏りかたしちゃうのかな。

でも上下逆って、たまにあるからいいのかなーとおもうと、確率的に五分じゃなくて逆向きは30%ぐらいの確率分布にするとかした方が自然っぽいのかなとか。

乱数の範囲を1-100でつくって結果が70以下ならtrue(牌通常表示)falseなら上下逆表示~とか?
でも牌一枚当りにまいどそれやるの? そこまでやるほどの処理か? とか。

その辺で、コストと精度でどのへんがいいのかなーと悩むw
ものすごくどうでもいいことに悩んでますね……。

そんなかんじで、麻雀と関係無い部分で無駄に時間食ったりしてる感じでつ。
2016-12-28.Wed いろいろ方向転換
2016/12/28(Wed) 03:13:24
相変わらず麻雀PG。

思考回りを作り始めたところでそのあたりの情報あさってると、でてくるサイトでは基本的には対戦相手として人間らしい打ち方をするAIを目指してる方向な感じで、いま自分が作ろうと思ってるものからすると、ちょっと方向がちがうなと思ったりして。

いちおう、目指してるのは麻雀が戦闘シーンなRPG的なのを考えてるのだけども、それだと、人間らしい打ち方よりも、敵レベルとかタイプで出現場所や種類を変えるようなのが好ましい。

そこから導き出される答えとしては、「雀風設定しての役の決め打ち」というのが都合が良さそうだなと。

雀風:国士無双 レベル:100

だと、配牌時に一九字牌が一枚もなかたっとして国士を狙う国士キ○ガイにw 
レベル90とかだと九種九牌からじゃないと狙わないレベル50だと一九字牌が5枚以上あったら……みたいな。
レベル100を越えてると配牌時に積み込みで国士狙いやすくなってるとか。配牌時積み込みも別でなんかレベル的なの持たせる方がいいかな。
んで、自摸回数と向聴数の減り具合とかで、たまに他の役を狙う転換判定なんかいれるかんじで。

そんな感じで設定レベルの高い順に役を選択して、その役固定で打っていく感じにして、配牌時(または目指す役変更時)にだけ手牌を走査して不要牌と必要な牌をリストアップ。そこから自摸してきた牌を捨てるか入れるか判断するだけだとかなり楽ぽ。

人間らしい打ち方を追求する前者のやり方の場合、毎回自摸って来るたびに牌効率とか完成系の点数期待値とか出すために毎回手牌を解析したりと結構なコストがかかるし、努力のわりにちゃんとした打ち手になるのか、といえばかなり難しい。

なので、作りたい物の性質上からもこの役の決め打ちパターンのが良さそうだなーと。

でもまあ、作るの楽かといえば……牌効率とか得点期待とか算出するやり方に比べればかなり楽ではあるものの……。

例の国士とか、七対子あたりはまだ楽なんですけども。
派生条件とかも単純だし。

国士崩れだと、字一色、清老頭、混老頭、七対子、ポンして役つけとか、全帯、純全帯三色(ちと遠い)あたりとかぐらいだし
七対子なら、四暗刻、対々とか役牌あればポンして役のみのぐだぐだとか。

元の役が特殊な形だと派生も限られてくるので楽なんですけども、いわゆる基本形となると、結構選択肢がもりもり増えちゃうんですよね。

雀風:平和

なんつっても、平和だけ狙うバカは居ないし。
基本的には順子系なので、一盃口、三色、一気通貫あたりが派生で、いわゆる手が伸びる状態になることがあるので、単純に平和系といっても選択肢がかなり多い。
雀風レベル的な物で、レベルが低いと派生系は一切無視して、ひたすら平和に向かって向聴数減らす打ち手をするだけ。っての作ったとして。
それに対して一盃口、三色、一気通貫あたりにリニアに対応する思考ルーチンつくった場合、なんか意外にも前者の方が最終的な得点率上になっちゃいそうな気がするんですよね。
派生無視といっても偶然役がつくこともあるわけで。
むしろふらふら狙いを変える打ち手の方が単純な和了率では下がったりすることもあるんじゃないのかなーとか。どうなんだろう? いずれ検証はしてみるつもりですが。
あとは待ちの形の変更とかも考えないといけないか。
両面系とか三面待ち目指せる良形とか、そいいうセオリー的なのもあるし。

そして断ヤオ系もまた幅が広い。んでも断ヤオは一九字牌を持っとくかどうかの判定基準オンリーで使用するサブ属性みたいなのにするほうがいいのかなーとか。

そんなかんじで、思考ルーチンまわりの設計がちょっと楽しくなってきてたり。


それとは別に……。
とりあえずテスト用にと大まかな麻雀ゲームの流れを作ってみたところで。
この辺は昔作ったやつを大まかになぞってリライトしたものなんだけども。

メインループの中で自摸順でプレイヤ*4のループ回して……なんて作りは失敗だったなと。

単純にいろいろなルール吹っ飛ばして、ひたすら正しく自摸順どおりに進行する場合ならこれでいいんだけど。
実際のルールをキチンと盛り込んでいくと、こりゃダメだわと。麻雀て結構複雑なルールなんだなーと改めておもたり。

まずポン、槓で自摸順が変わる。
天和、十三不塔など、初回一順目だけ有効なルール。そこに途中ポン、チー来たら一巡目定義崩れるルールで和了見逃しの一巡ルールなんてもの。
さらには一巡ルール内で一巡目、それぞれ同じ風牌をすてたら流局の四風連打というのもあるし。
結構いろんなルールがあって、それを単純なループで処理すると、どんどん状態設定とか条件式がふえてカオスになりがち。

そこで、自摸とかポンとか、そういうアクションをイベントとして発行するイベントドリブン形式にするべきだったなーと。

イベント単位なら、そのイベントに対するリアクションだけ書けばいいので。
たとえば「捨て牌」イベントなら、他家は和了判定、鳴き判定とか。イベント単位で完結できるので、その方がわかりやすいぽ。

またこの方式だと、いまはQTで途中経過とか表示しないで終局後にレポートだす感じだけども、最終的にはゲームにするので、描画処理と内部処理が分かれる作りのばあいにもイベント駆動はその辺の分離がやりやすいなと。描画ループとイベント処理を別にするだけで済むので。

そんなかんじで、ちょいと仕切り直しぽ。


あとは小ネタとして。
QTのバグというかQt Creatorのバグ? というより単に未対応な感じなのか。

using Player_ptr = std::unique_ptr<Player>;
std::array<Player_ptr, mj::kPlayer_Max> m_list;

こんな感じのリストがあって。

m_list[id]->

IDE上で候補でなーい。

const Player_ptr& get(int id) const { return m_list[id]; }
get(id)->last_捨て牌();

こうすると出るー

なにげに
using Player_ptr = std::shared_ptr<Player>;

とunique_ptrからshaerd_ptrにかえると出るー

QTではいまいちc++11対応が微妙なんだよなーと。
いやでもこれって、unique_ptrは配列対応あったけっかと。(std::shared_ptrにはない)

std::unique_ptr<Player[]> みたいにするとoperator[]でunique_ptrの配列アクセスできる。
これがstd::arrayのoperator[]とおかしな事になってインテリセンスきかなくなってるのかなーとか。配列のないshared_ptrだと出来るので。

でもまあ、いまさら入力補完無しとかやってられないし・・…とはいえ、unique_ptrで済んでるところを必要も無いのにshared_ptrにするのもなにか負けた気がする……。
むぐぐ……。

ちなみにclangコードモデルのプラグインONにすると、この問題は解消されるんですけど……
QT Creator4.1までの段階では、うちの環境だとなぜかこのプラグインがソースコードのファイルをロックしてしまい、ソースコードの上書き保存が出来なくなると言う不具合がでるため使用不可……
QT Creator4.2が出てたのでver上げてみたけど、どうなんだろう。
これって常に起るわけでなく、しばらく使ってると起るようになるので。
起ってしまうと未保存のソースコード全部保存不可になってかなりファッキンな状態になるので怖くて使えないw

そしてうちのPCが貧弱なのかclangコードモデルONにすると、かなり重くなる。
体感的には、WinXPでのvc++2010よりもさらにちょっともっさりした感じ(わかりにく)

で、こりゃそろそろほんとPC新調も考えないとなとか。いまだにcore2duoだもの。

あ、あとこんなネタもあったっけか
d_127.jpg

基本的には、普段は識別子に日本語使うのは否定派。ギリで仮引数は影響少ないので有りかもねぐらいの感じなんですけども。

でも麻雀PGのような、英語に簡単に置き換えられない固有名詞が多い物を作る場合、ローマ字でKokusimusouなんてかくよりは国士無双と日本語で書いた方が可読性的にもマシ。もとの呼称とちがう英語に置き換えるのも混乱の元だし。
ということで、麻雀PGに関しては日本語解禁してるのだけども。

なんかコードの色がおかしくなってますねw
実行には問題無いものの、QT Creatorのコード解析当りでは二バイト文字がなんかしでかしてる気がしないでもない……。

日本語識別子の問題の一つは、ワード先頭から日本語だと、日本語変換ONにして打たないとインテリセンス効かないってのがあったりして。
なので、tumo_自摸 get_自摸とか言う具合に、先頭三文字程度は英数字にして候補出しやすくするみたいな感じにしてるんですけど……うーん。

あと、英語オンリーだとある程度関数とかの命名方法は慣例がある程度固まってるのでそれほど単語の選択に迷いはすくないのだけども、先頭から日本語OKだと、その命名規約的なのがまた一気に幅がふえて面倒になりそうだなとか。

int 取得(){...}
int 受け取る(){...}

とか。こりゃ極端な例だけど。
でもこの場合はやっぱ先頭はget_とかつけた方マシだよなぁ。
すべてを日本語にってのはやっぱ無理がある気がするw

あくまで可読性を上げるために……今回のは固有名詞をローマ字で書くよりはマシってことでそこを置き換えるだけ…という用途で限定的に日本語解禁。
っていうスタンスなのがやはり無難かなーと。

うーんでもやっぱ、日本語混じったソースコードっていまいち馴染めないな……。

2016-12-23.Fri この場合はどうするべきなのか……
2016/12/23(Fri) 07:22:45
今日もニコニコ麻雀PG

そいや脱衣麻雀ゲームとかの二人打ちの時、場風ってどうなってたっけか、と。

調べてみると、東南のみで親が常に東、子は常に南。というのが殆どらしい。
んでもって、局は東南二局ずつの四局で終わりというのもあれば、脱衣麻雀に限ればそもそも局のカウントがなく、時間制限とか点数無くなるまで只ひたすら東南入れ替わり……という単純に1クレジット消費単位が決まって長くだらだらプレイ出来ないという、アーケードの脱衣麻雀のシステムからの仕様になっているものも。

んでも常に親子で東南入れ替わり、場も東南入れ替わりとなると、東場では親は常にダブ東で子は南のみてのは、親が得すぎね? (逆に南場は子が常にダブ南……)とおもったら、場風は無視して自風のみで、親はダブ東なしで東のみ役というパターンもあるそうな。

んーゲーセンで脱衣麻雀とかもやってたの学生時代までだからなぁ。そのときのやつはどうだったか……。全く思い出せん。

でも二人打ちの場合、西と北の役がつくことがないというのも寂しいなぁ。三人麻雀だと使われない北は抜きドラとかになるんだけど。

ほかにも親が常に東、対面なんだから子はつねに西というゲームもあるらしい。
その場合東二局は親は南、子は北になるのだろうか??

それか、最初は親=東、子=南で、二局目は親=南、子=西と1個づつずれてくとか? でもそのタイプだと、子は対面の西スタートの方が座りはいい気もするけど……最初に子が西というのも気持ち悪いんだよなぁ。

二人打ち麻雀と四人打ち麻雀のプログラムから見た違い。
ttps://www.marguerite.jp/Nihongo/Games/%E3%81%97%E3%82%89%E3%81%8E%E3%81%8F%E3%83%95%E3%83%A9%E9%9B%80/%E3%81%8A%E3%81%BE%E3%81%91%E8%A8%98%E4%BA%8B/%E4%BA%8C%E4%BA%BA%E6%89%93%E3%81%A1%E9%BA%BB%E9%9B%80%E3%81%A8%E5%9B%9B%E4%BA%BA%E6%89%93%E3%81%A1%E9%BA%BB%E9%9B%80%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%8B%E3%82%89%E8%A6%8B%E3%81%9F%E9%81%95%E3%81%84.html

そんなときにこんなサイトが引っかかる。

ここの「四人打ち麻雀にあって、二人打ち麻雀にないもの」は大体既に把握してたけど、「二人打ちには搶槓がない」は、ああ確かにそりゃ無理だわなと思慮の網から抜けてたものも。


でもこの中で一番問題になりそうなのが「"死に牌"が多い」だなぁ。

三人麻雀だと、色を一色落すのが普通だったりするけど、二人打ちの場合はそのままで、ただ捲られることのない死に牌が2プレイヤ分、手牌13+ツモ順約18回*2の大体、60牌ぐらいが死に牌になるんですよね。
なので、二人麻雀は和了難い。

でも逆に、浮いてる牌が多いので、積み込みのバリエーションは充実させられたりもするw
その辺、アイテム使用とかのゲテモノ麻雀も、二人麻雀は和了難いということへの対応策の一つ。という考え方もあるのかーとおもたり。


そんで、具体的にコードとして書く場合。

まず思考ルーチン部分を作ってみようということで、まずは一人打ちで、牌効率のみ考える感じのを作ってみようと思っていたのだけども。
その場合、死に牌という考えが入ると、自分のツモ17~8回でツモ和了の統計になっちゃうなーとか。
まあそれはそれで有用なデータではあるんだろうけど。

そう考えると、一人打ちでも、プレイヤは四人用意して、他の三人は自摸切りオンリーの壁打ち、もしくは普通に打つけど和了はしない。みたいな作りの方がいいのかなーとか。
んー只の自摸切りだと、序盤に浮きやすい牌とか終盤に漏れやすい牌とかそういうのがないから、ある程度は考えて自摸切りしてくれないと、実用的な統計にはなってくれないような。


んで、今作りたいと思ってるのは、RPGで戦闘が麻雀みたいな感じのだったりするんですが、それだと常に二人打ちってのもなぁと。
イベント戦闘とかで4人打ちとかもやりたいかもなーと。

で、上記のURLの記事読んだところで、とりあえず4人打ちでまず作るのが後々楽なのかなと。
そんで、統計とるのもとりあえず形だけでも4人打ちの体のがよさげかなーというのも感じたりで。


でも三人打ちが結構変則なんだよなぁ。
色落しとかチー無しとか。北が抜きドラとか。
二人打ちはわりと、四人打ちのいくつかのルールが適用外な感じになる程度なんですけど。
その辺コロコロ変わるのはどうかなーという気もしてたりで。
もともと中途半端なので三人打ちは除外するほうがいいかなという気も。
画面レイアウト的にもなんか微妙な感じになりそうだし。
それならNPC的な壁打ちモブを追加して無理矢理4人打ちにした方がいいような気もするぽ。

ゲテモノ麻雀上等なら、全部一色しかないモードとかそんなんは作るの難しくないので、三人麻雀ならではのインフレ具合とかあんま特筆する事もない感じだし。インフレはやろうと思えばいくらでも出来るし……。

でも基本は二人打ちになるんだろうな。
と考えると、やっぱり二人打ちの場の扱いどうしようかなーと。

そこで悩む~。

RPGの戦闘画面で麻雀的なのであれば、場風はランダムで局の頭で決定、自風無し。とかでもいいのかも。
ボス戦だけちゃんと場風と自風あるとか。

むーん。
2016-12-22.Thu もう年の瀬か……
2016/12/22(Thu) 04:34:21
今年は某氏が諸事情でコミケ不参加ということで、こちらもお休みというのが結構前から連絡あったので、ほげーっとしてたらヤバイな……って感じに。

やっぱ明確な〆切りとかないと、人は動かんな……。
ストレスとモチベーションは切っても切り離せないものだなーとかおもたり。

そんな感じで久々に、上記の某氏とは別の某氏と長電話。

なんつーか、いろいろ頑張らないとな。という気分になるも、年の瀬なんだなーとおもうと、なんもかんも「来年から頑張ろう」という気分になるのはダメ人間の証明ですか(ぉ

そんななかで、この日記のレス機能がエラーでるよと言われてチェック。ほんまや。
そいやちょっと前に、記事別リンクの方式変えたようなことやった記憶が。その辺でレス記事表示の時にレス対象記事を読み込むときのリンクがおかしくなってるのかなーと。

ソースコード見てみたら記事別リンクの方式がらみで記事タイトル生成するサブルーチンの名前を変えたらしいぽ。
本文回りはその辺適応させてたけど、レス記事の方は変更してなかったというオチ。
レス記事なんて本人は使わないからチェック漏れ~。
ということで修正。ソースコードみると6月からこの状態だったのね(ぉ


そして相変わらず麻雀ゲームPG。

牌山生成あたり作ったところで、赤牌や花牌の扱いのところで、ルール回りもそろそろつくらないとなと言うところでその辺ちまちまと。

しかし、麻雀を手で打ってたのなんて学生時代までで、もうしばらくせいぜいネットの麻雀
ttp://www.gamedesign.jp/flash/mahjong/mahjong.html
とかたまにぺちぺちやるぐらいな麻雀歴なのですが。

わりと当時のローカルルールと、最近の一般的なローカルルールも変容してるんだなーと。

たとえば、半荘で南場は親は不聴でも流れなかったんだけど、今は流れるのが主流なんですね。
ネット麻雀とか、あんまりだらだら長くやるよりもスパッと半荘終わらせる方式で、一局いくら計算だと利益率が~とかいろんな要因もあるようですが、短期決戦なのが最近のスタンダードっぽい。

親は和了のみしか連荘しないルールもわりとメジャーなようで。

赤牌は昔よりも普遍ルールと化した感じかな。
短期決戦で派手さが欲しいっていうところから、赤牌入れるのが普通になってきたというような背景なのか。
枚数どうするかは昔のまんまのローカルルールって感じのままだけど。ネット麻雀なんかだと全部一枚づつがおおいのかな。

花牌は普通は使わないけど、ゲテモノ系のゲーム麻雀では花牌の代わりになんか特殊な牌とかいれたりするのは割と簡単な追加要素なので、一応花牌枠は用意しておくかーといったかんじ。


しかし……今と違って昔はその場であった人達の中で形成されていったローカルルールは地域性があったり、それがローカルルールの中でもメジャーな部類なのか、超マイナーなのかとかよくわからないのも多かったけど、最近ではネットとかで情報が拡散されるので、わりとその辺の情報が手に入りやすく分類も楽になったなと。

たとえば九蓮宝燈なんか、学生時代の仲間内では萬子のみの役だったりしたなぁ。筒子は大車輪、索子は緑一色と、種類役満がそれぞれあるみたいな。

でも今ではちゃんと九連宝燈はどの色でもOKてのが一般化してる……てよりもともとそうだったのだけども、麻雀役解説で九連宝燈の例に萬子を使ってたのが多かったため、萬子専用の役と誤って広まったという経緯があるそうな。
なので、実際は正常化したというべきなのだろうけど。

でも、九連宝燈といえば萬子というイメージが未だに強い……見た目的にも萬子の九連が一番迫力ある気がするしなぁ。

発なし緑一色も、自分の所では認めない(ただの清一)だった気がするけど、むしろ発無しのが難易度高いってので、発無しはダブル役満というルールもあるのですね。

国士無双13面は現物のみフリテンルールで、13面フリテンの時は役満、フリテン無しの13面まちのときはダブル役満。または現物一枚でもあればフリテン。

とかこの辺のルールで、デフォルトルールをどうしようかなとか考えるのもまた楽し。

結構趣味に走るよなぁこの辺。
個人的には九連宝燈は萬子のみで九面待ちはダブルとかにしたいw

まあこの辺は設定次第な部分で和了形に対して判定するだけなので簡単なんだけど。

食い代えとか後づけあたりなんかは、役判定ルーチンとかにも影響でるのでルール設定出来ないようにして固定ルールとかにしちゃいたいなーっていう類のルールも。

喰い断とか嫌いなので外したいけど、これも和了速度優先とかの敵CPU考えると有り無しで状況変化するなーとか。


それから手打ちの時は譜計算とか全然やってないビギナーレベル麻雀。それ以降はコンピュータ対戦ばかりで自分で計算する事もなかったので未だに譜計算とか出来ないヘタレなので、いまいち平和にツモがつくのか? みたいなのが何が問題かよく理解出来てなかったりするといった、漠然とした浅い知識しか持ってないままだなーと気づくところも多かったりするぽ。

せっかくなのでその辺のコード書くついでに譜計算も覚えるかなーと。

レステスト
うひょ
2016/12/22(Thu) 04:34:59: oda-x
2016-12-11.Sun ぶろーくんまうす
2016/12/11(Sun) 04:53:47
マウスご臨終。

送料無料、1個500円、お一人様10個までというネット通販サイトのセールで買ったロジクール G100s Optical Gaming Mouse。
でも結構型が古そうなので、5~6個買っとくか、2個ぐらいにしとくか迷ったのだけども、結局とりあえず2個買うことにしたりで。

今年の3月に買ったのですが、早くも三ヶ月経過目ぐらいで左クリックの調子が悪くなる。

ロジクールの、ゲーミングマウスで定価は2000円越えの物なので、一年は持ってくれるかなと思っていたのが、いきなり不安な感じになったりで。症状的には左クリックの反応が鈍くなって、たまにクリックしたのに反応無し。チャタリングは起ってない。
って感じだったのだけど、その後さらに症状は悪化しつづける。使用5ヶ月すぎた当たりでチャタリングも起こり始める。
ファイル名変更使用とするとダブルクリックになってファイルが展開される……なんてのがちょくちょく。

そして8ヶ月経った最近では、ソースコードをコピペしようとドラッグで選択したとき、マウスを放すと選択範囲も消える。離す動作でチャタって1クリックオマケがついてくる感じで、さすがにもう我慢の限界ってことで、買い置きのもう1個の方にチェンジ。

……たまたま1個目は初期不良な外れだったのかなぁ。

ロジクールて二年保証とかついてた気もするけど、在庫整理セールっぽい感じの500円で買った奴だしまあいいかーってかんじだったりする。けど、使い捨てるにしても半年はもって欲しかったなぁ。それがわずかに三ヶ月で障害出始めるとは……。そこからは半ば意地になって6ヶ月は使ってやるぜと不具合我慢して使ってた感じだったし(ぉ
予定では1個一年のこれで二年は持つぜーな皮算用だったんですけどねぇ。
まあ、五~六個買わなくて良かったなとw

んでもまあ、レーザー部分がコレ、不可視光のやつなんですけど、マウスパッドの上だと問題無くきびきび動くんですが、コタツ布団の上なんかだと、うまくうごかなーい。
普通にエレコムとかの1000円以下で売ってるような青いレーザーの奴のが布とかの上では反応良かったりするぽ。
半年持てばいいやのつもりなら、エレコムでもいいやーってなるわー。
ロジクール幻想潰えたわー。

ってかんじで、二つ目のマウスも早々に壊れたら、次はエレコムとかでいいわもう。なんかどれ買っても同じぽ。


んで、そんな感じで今日もニコニコPGは日々。

いまは以前作りかけてたとあるツールをもうめんどくせーとうっちゃって(とりあえず当面の目標だった、コマンドパターンでのアンドゥ、リドゥの実装とテーブルウィジットの各項目に個別の編集機能持たせるみたいなのの実験とかは出来たし)麻雀ゲーム用AIなんかを作り始めてたり。

んで、役のローカルルールとかその辺の設定をまとめてたのだけども。

槍槓(チャンカン)とかこんなんあったっけ? しかもローカルでもなく普通のルールとして。
もう長らくゲームの麻雀ばかりで仲間と手で打つ麻雀はやってない所為か、ルールの記憶もあやふやになってきてるなぁ。

ちなみに槍槓というのは、他家が加槓した時にその牌で和了できて一飜もつくという役。

槍槓の見逃しがフリテンてのも、知らなきゃ嵌りそうなルールだけど……気にした事がないな……まあそもそも加槓自体が頻度低いからなぁ。

似たようなルールで、国士一面待ち聴牌のとき、他家が当りを暗槓 した時はそれで上がれるってのは覚えてたんだけども。
でもそれもわりとローカルルールなのね。

ローカルルールの中でも一般化してるルールとそうでもないルールの境界線の引き方が結構めんどいですねコレ。

まあ、基本的には設定でオンオフ出来る用にすればいいんですけど、設定自体必要か? ってなマイナーなルールもあるので。花鳥風月とか東北新幹線あたりは、普通に打ってる最中に「お、これもうちょっとで東北新幹線~(笑)」とかそういう役があったりするんだぜ的な雑談ネタ程度で、実際に採用されることはあんましない感じだものな。

んでもって、基本的には麻雀の本とかでしっかり知識を仕入れたわけでなく、学生時代に同級の麻雀歴の長い友人が師匠となって、口伝で覚えた知識が殆どなので、やっぱ知識にも偏りがでてしまってるよなーと、改めてルールを見直してると思ったり。

ローカルルールで「ツバメ返し」(積み込みの技とは別)他家のリーチ宣言牌でロン和了することによって成立する役(一飜)てのがあるのだけど、これとかは、ゲームの二人打ちなんかで考えるとリーチにカウンターてのは爽快感でそうなルールだなーとか。

普通の麻雀では使わなそうだけど、ゲームとしてのアクセントでは面白そうなものもいくつかあったりして。

最近のゲームでは一般化してるっぽいトロフィーとか実績システム的なので、マイナーなローカル役あがる……とかも出来そう(でも難易度高すぎて禿げるかw 普通に役満クラスの難易度なの多いし)

他には、二人打ちだと割れ目ルールとか使えないなーとか。

ゲームシステムとしてのルールとローカルルールとかその辺をちまちまと書いてたり。

とりあえず聴牌チェックと当たり牌候補列挙、和了手牌から役と点数算出~あたりは随分昔に作ったのをリライトするとして……やっぱAI部分、牌効率とか和了完成系の点数と上がりやすさの期待値とかその辺まわりがやっぱいちばん苦労しそうな部分だよなぁ。
とりあえずその手前まではそれほど苦労は無いとおもうけど……

しかし、何年も前の自分のコードとか見るのやっぱキッツいわ。
すんげータコなコードすぎてゲボでそうw
まだc++11以前のコードだし、もういろいろ酷い。OOPって何? ってかんじの。てか、良くこんな糞コードで一応でも動いてたなぁ……

昔つくったやつのスクショ
bgps3.jpg

牌の画像もとりあえず仮って感じで作ってたけど、もうちょっとちゃんと作り直さないとな……。
てか、牌画像のpsdファイルとか残ってたんだけど、これ作ったのいまのPCじゃないですね。文字のフォントが無いとか出てくる。
何年前に作ったんだコレ……。てか普通に發とか五萬の人偏の五とか今のPCにはいってるフォントだと殆ど表示されない……。当時は麻雀用のフォントとか入れてたのかなコレ。普通に手書きとかした方がいいなもう。

しかし、AI用に統計とかとったりするのも考えて、QTでつくってるのだけども、麻雀ゲーム自体はvc++のDXライブラリ使うので、麻雀用のライブラリ部分は共用になるのだけど。

QTだと、ここ最近はソースコードもコード内のリテラル文字もみんなutf8で統一してるんですよね。
そこでQTとvc++共用のコードとなると、文字コード回りでいろいろと問題が出そうぽ。
今まではリソースの共有とかはしてたけど、コードの共有は今回初の試みだったりして。
んー文字リテラル回りは、出力部分のみvc++用とQT用で切り分けて~って感じにするのがいいのかな……。

そんな感じでちまちまと。
2016-12-08.Thu ないとぶれーかーず
2016/12/08(Thu) 06:20:48
田中久仁彦氏のブログ。
ここ最近、昔の作品のイラストを描くブームのようなのですが、ソードワールドのリプレイのキャラとかは描かないんだろうなー……とか思ってた次の日に描かれてて大歓喜な最近。
氏の画集では、モノクロ挿絵が1pに4分割とかで縮小サイズの掲載な扱いだったので、あんまり思い入れのない作品だったのかなーとか勝手に思っていたので。

リュクティ、ボウイ、シャディ、シェラハ……まではさらっと出てきたのだけども……。

元暗殺者の記憶喪失少年はテリーだっけ? アンディ?(餓狼伝説まじっとる)
その少年に片思いの少女の名前もでてこなーい。

そして、おっかさんの名前なんだっけ……「おっかさん」てのはすぐにでてきたんだけどなぁ。サラとかサティとかそんな名前だったような。当時としては外見ロリなのにじつは子持ちのロリ年増設定は斬新だった気がする。

最後に読んだの相当昔だからなぁ。
というわけで、本棚あさって答え合わせしてみる。

ぶほっ。シェラハって誰やねん、「レイハ」の間違いでした。自信満々に間違えた……。「ハ」しかあってねぇw

シェラハってとロマサガ(ミンサガ)が混じったのかな。

そして、少年の名はテリーではなく「ティリー」(おしい)
おっかさんはサラではなく「サティア」(これまたおしい)
ティリーに恋する少女は「シャリン」。

やっぱ人の記憶なんて当てにならん。いろいろと混じって再構成されちゃうですね……。

1巻奥付みると、平成6年初版、1994年刊行。22年前……んごー。

そんな昔なのか……。

そして、ソードワールドリプレイじゃなくて、ソードワールドRPGアドベンチャーって書かれてるな。リプレイとはちょっと違うか。

なつかしいな……おもえばこの頃読んでた物のファンタジーが、自分の中のファンタジー世界像を作ってるんだよな。そして未だに商売として続いている? スレイヤーズってスゲー。
ひさしぶりに読み返してみようかな……。