堕天使の煉獄
2016-12
28
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だもの。
あ、あとこんなネタもあったっけか
基本的には、普段は識別子に日本語使うのは否定派。ギリで仮引数は影響少ないので有りかもねぐらいの感じなんですけども。
でも麻雀PGのような、英語に簡単に置き換えられない固有名詞が多い物を作る場合、ローマ字でKokusimusouなんてかくよりは国士無双と日本語で書いた方が可読性的にもマシ。もとの呼称とちがう英語に置き換えるのも混乱の元だし。
ということで、麻雀PGに関しては日本語解禁してるのだけども。
なんかコードの色がおかしくなってますねw
実行には問題無いものの、QT Creatorのコード解析当りでは二バイト文字がなんかしでかしてる気がしないでもない……。
日本語識別子の問題の一つは、ワード先頭から日本語だと、日本語変換ONにして打たないとインテリセンス効かないってのがあったりして。
なので、tumo_自摸 get_自摸とか言う具合に、先頭三文字程度は英数字にして候補出しやすくするみたいな感じにしてるんですけど……うーん。
あと、英語オンリーだとある程度関数とかの命名方法は慣例がある程度固まってるのでそれほど単語の選択に迷いはすくないのだけども、先頭から日本語OKだと、その命名規約的なのがまた一気に幅がふえて面倒になりそうだなとか。
int 取得(){...}
int 受け取る(){...}
とか。こりゃ極端な例だけど。
でもこの場合はやっぱ先頭はget_とかつけた方マシだよなぁ。
すべてを日本語にってのはやっぱ無理がある気がするw
あくまで可読性を上げるために……今回のは固有名詞をローマ字で書くよりはマシってことでそこを置き換えるだけ…という用途で限定的に日本語解禁。
っていうスタンスなのがやはり無難かなーと。
うーんでもやっぱ、日本語混じったソースコードっていまいち馴染めないな……。
思考回りを作り始めたところでそのあたりの情報あさってると、でてくるサイトでは基本的には対戦相手として人間らしい打ち方をする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だもの。
あ、あとこんなネタもあったっけか
基本的には、普段は識別子に日本語使うのは否定派。ギリで仮引数は影響少ないので有りかもねぐらいの感じなんですけども。
でも麻雀PGのような、英語に簡単に置き換えられない固有名詞が多い物を作る場合、ローマ字でKokusimusouなんてかくよりは国士無双と日本語で書いた方が可読性的にもマシ。もとの呼称とちがう英語に置き換えるのも混乱の元だし。
ということで、麻雀PGに関しては日本語解禁してるのだけども。
なんかコードの色がおかしくなってますねw
実行には問題無いものの、QT Creatorのコード解析当りでは二バイト文字がなんかしでかしてる気がしないでもない……。
日本語識別子の問題の一つは、ワード先頭から日本語だと、日本語変換ONにして打たないとインテリセンス効かないってのがあったりして。
なので、tumo_自摸 get_自摸とか言う具合に、先頭三文字程度は英数字にして候補出しやすくするみたいな感じにしてるんですけど……うーん。
あと、英語オンリーだとある程度関数とかの命名方法は慣例がある程度固まってるのでそれほど単語の選択に迷いはすくないのだけども、先頭から日本語OKだと、その命名規約的なのがまた一気に幅がふえて面倒になりそうだなとか。
int 取得(){...}
int 受け取る(){...}
とか。こりゃ極端な例だけど。
でもこの場合はやっぱ先頭はget_とかつけた方マシだよなぁ。
すべてを日本語にってのはやっぱ無理がある気がするw
あくまで可読性を上げるために……今回のは固有名詞をローマ字で書くよりはマシってことでそこを置き換えるだけ…という用途で限定的に日本語解禁。
っていうスタンスなのがやはり無難かなーと。
うーんでもやっぱ、日本語混じったソースコードっていまいち馴染めないな……。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
05
06
07
08
■
■
ないとぶれーかーず
09
10
11
■
■
ぶろーくんまうす
12
13
14
15
16
17
18
19
20
21
22
■
■
もう年の瀬か……
23
■
■
この場合はどうするべきなのか……
[天皇誕生日]
[天皇誕生日]
24
25
26
27
28
■
■
いろいろ方向転換
29
■
■
王牌不要論
30
31
■
■
寝込み正月になりそう
total:2080424 t:2794 y:180
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp