上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

募集しています。どんどん貼っていってください。
スポンサーサイト
今朝Twitterで

「MFCやるぐらいなら家で天鳳か雀龍門やる。理由はこれらのゲーム(=MJ以外)は全部山牌作りの設計が正しいから。」
「MJに余剰牌押し出しの現象が多発してますけど、他の麻雀ゲームやリア麻でこんなことが発生したのは指折る位しか無いんです。」


って呟いたんで、ちょっとそれ関連の話をしましょう。


~余剰牌押し出し機能~
1シャンテンの状態で、テンパイする為の最後の余った牌を2巡~4巡にかけてMJ筐体が出してほしいために、有効牌を連続でツモらせる(笑)機能のことをこのように呼んでいます。
SAKUさんのブログを観てる人だったら何度もそのような牌譜を観てきたと思います。


昨年むこうぶちCUPの生放送で例になる牌譜が有ったのでタイムラインからスクショを保存しておきました。
(やっとこれを使えるwww)


mukoubuchi1.jpg
5巡目 3s69mが有効牌で9mを引き、7sが余剰牌。
しかし、くっつきテンパイの形をとるため2s切り。



mukoubuchi2.jpg
2~9sが有効牌で2s引き戻し。しかし2s切りで続行。
7sを出させようとする。

僕の場合、星ベット機能が有ったならばこの時点で7sを左端に移動して星ベットしますwww



mukoubuchi3.jpg
次巡9p。そのまた次巡。
またですか!?!?しかも同じ2swwwwwwwwwwww
7sを出させようとする。



mukoubuchi4.jpg
結局この局は絶好の5sを引き満貫テンパイ。
7sは出さずに済みました。
確か、7sは他家の待ちではなかったandこの手をアガりきったと記憶してます。





いかがでしょうか?
このような7sにひたすら上矢印が付く、という経験をMJプレイヤーなら何度も何度も経験したと思いますw

私もくっつきテンパイの形は好きなので結構な頻度でテンパイは取りません。
こんなに連続でテンパイチャンスが来たことなんて他のゲームやリア麻では指折る位しか無いです。

しかもそれはくっつきテンパイの時に限らず、早めの面子決定で余剰牌を決めた局面でもこーゆーのがMJでは多発しています。



なぜMJにだけこんなことが多いのでしょうか?
私は山牌の作り方がリア麻通りになっていないからだと確信しています。
(システム設計ミス以前の問題)
MFCや雀龍門や天鳳は正しいシステム設計がされていると思います。

やはり、あの乱数シード値に秘密が隠されているのでしょう。



今回はここまで。

この記事のコメントで、同様の押し出し現象が発生した牌譜(汎用MJ.Viewer)URLを募集しています。
ご協力よろしくお願いします。


三人打ちプロリーグ
月間戦績
プレイデータ(† 数学不敗 †)
8月の戦績
■8月の戦績
【SCORE】
合計SCORE:+179.8

【順位】
1位回数:23(38.33%)
2位回数:17(28.33%)
3位回数:20(33.33%)
平均順位:1.95

プレイ局数:407局

【打ち筋】
アガリ率:27.52%(112/407)
平均アガリ翻:4.15翻
平均アガリ巡目:11.45巡
振込み率:14.25%(58/407)



プロチケ余ったという理由で恐る恐る参加してみましたが、
終わってみれば球+18個の大収穫。

本日最終日、闘王昇段 + イベントMJ賞2個とS2昇格4個で賢王内定。

あっという間に前世越えができましたw
捨て身のはずだった三人打ち段位ですがwww

次の目標は三人打ち龍クラスか、四人打ち賢王か。

前回
http://mastermathematics.blog28.fc2.com/blog-entry-78.html

次回
未定

MJ5の牌山生成アルゴリズム、そこそこの評価を得ているようですが・・・・・・。

したらば本スレにも意見しましたがとりあえず一言。

「あんなややこしいプログラム組む必要無し。」

アレ作った人にどうしてこんなプログラムにしたのか問い詰めたい。
あと、公式の牌山Viewerで誰かのシード値の1文字を変えてみたり、不確定要素に1を足して再生成してみたらわかったんだけど、

サイコロの目も連動して変わってるよね。

それっておかしくね?
全自動卓でさ、卓の下で牌山をせっせせっせと作ってるのと、
卓の中央にあるサイコロを回すのって、
別事象ですよね? この2つの作業は何ら関係は持たないはずですが。

それに、プレイヤー乱数シード。あれ怪しいですね。
SAKU零号機さんも言ってたんですけど、
「シード値が本当に正当な疑似乱数で決定されているかどうかがわからないとヤラセなしとは証明不可能では?」と。


まさにその通りです。
プレイヤー乱数シードこそ完全ランダムで作るべきなのに、
「セキュリティの都合上、生成方法は公開できない」と言っている時点で牌山生成に何らかの法則が存在すると自白しているようなものです。


で。

まさかまさかの鉄板理系向けの説明(ソースの一部を公開したこと)だったので私も心底驚いていますw
つーことで、こちらも牌山生成Flashの牌山生成部分のソースを公開しなければいけませんね!











1 function yamakettei(){
2    var serial:Array = new Array();
3    for(var i:Number = 0 ; i < 136 ; i++){
4      serial.push(i);
5    }
6
7  for(var i:Number = 1 ; i <=136 ; i++){
8    var serialbuf:Number = Math.floor(Math.random() * serial.length);
9    _root["pai" + i].paikettei(serial[serialbuf]);
10     serial.splice(serialbuf,1);
11   }
12 }


ごめんwwwたったこれだけなんだwwwwww


つまりはそういうことですよ。
あんなややこしいプログラムを組む必要は無い、と。

まぁ、コチラのプログラムは文系の方でもわかりやすく見れると思いますwww
では、説明していきます。

2~5行目
配列変数serialを作り、そこに0~135の数字を入れていきます。
serial = [0,1,2,3,4,5, ・・・・・・ ,134,135]
となります。
0~135は、前回説明したシリアル番号1~136に対応しています。
まぁこれは前回の復習ですが、0,1,2,3が1m、4,5,6,7が2m、・・・・・・132,133,134,135が7j(中のこと)に対応しています。
自動卓を開けて、136枚の麻雀牌を穴の中に入れた状態、と考えてください。

7~11行目
次は牌を片隅から1つずつ決めていきます。
配列serialの中から数字をランダムに選び、牌を決定。その後決定した牌は配列serialから削除(spliceの文)しています。
_root["pai" + i].paikettei(serial[serialbuf])
の1文は指定した牌にシリアル番号を送り、そのシリアル番号を「4p」「8s」「5j」等に変換して画像ロードをしているだけです。

具体的に示すと、
serial = [0,1,2,3,4,5・・・・・・133,134,135]
ここからシリアル番号4が選ばれると
serial = [0,1,2,3,5・・・・・・133,134,135]
ここからシリアル番号134が選ばれると
serial = [0,1,2,3,5・・・・・・133,135]

というふうに減っていき、最後の方は

serial = [12,47,69,114]
serial = [47,69,114]
serial = [47,69]
serial = [47]
serial = [](無し、つまり牌山生成完了)

という流れになります。



要約すれば、牌が自動卓の中に入り、ドラムの中から牌を拾って山の片っ端から決定しているだけっていう、
全自動麻雀卓の役割を忠実に再現した設計となっております。


ちなみにサイコロの決定は全く別の箇所で行っています。
上でも述べた通り、
牌山を決定するのとサイコロの目を決定するのは全くの別事象だからです。




さてと、
ゲーム企業がプログラムの1部を公開しなきゃいけないという異常事態。
まぁセガへの信頼回復には1歩進みましたが、
これでも稼働台数が減っていって、MJシリーズ終焉寸前に追い込まれてしまったら、それこそシステムの完全作り直しが必要になるでしょうねw



前回
http://mastermathematics.blog28.fc2.com/blog-entry-78.html

次回
未定
前回
http://mastermathematics.blog28.fc2.com/blog-entry-76.html

次回
http://mastermathematics.blog28.fc2.com/blog-entry-79.html











前回言われてた通り、[ボタンを押して離した時点で作動]→[ボタンを押した時点で作動]に仕様変更しました。
変わったのそれだけかよ!っていうwww


さて今回は、このFlashの仕組み・特に牌1つ1つの扱いについて説明していきます。
どんな麻雀ゲームでも制作の過程において重要になるのでよ~く読んでくださいね。

皆さん既にお気づきかと思いますが、牌1つ1つの上にカーソルを持っていくと、中央上部の説明文が変化すると思います。

例:
pai1 x:??? y : ??? color:s suuji:8 serial:101


pai?の数字の部分は、自家の牌山の右端上から数えての数字です。
・・・ 9 7 5 3 1
・・・10 8 6 4 2
という風にpaiの数字を割り振っています。

xとyは座標です。デバッグの際にチラ見してるだけの数字なので、これは気にしないでください。

colorとsuujiは、大方の人はご察しでしょう。牌の色と数字です。
萬子はm、筒子はp、索子はs、字牌はjとしました。
(字牌に関しては東南西北白發中を1234567としています。つまり「4j」は北を意味しています。)

そしてserialなんですが、これが牌山を作るにおいて重要になってきます。


皆様のご家庭に麻雀牌があれば、一度パッケージを開けてみて、買ったばかりの時のことを思い出してください。
1mが縦に4つ、2mが縦に4つ・・・・・・・と並んでいたと思います。

麻雀ゲーム制作において、同じ1mでも4枚全て別々の牌として扱う必要があります。

麻雀闘牌中においては、5p8pの両面で門前聴牌したら、そのどちらかをツモってきたらアガリとなるわけですが、
場には5p8pの2種類が待ち牌として有りますが、各々1枚ずつではないですよね?
各々4枚ずつ、計8枚あります。
つまり、「見た目は2種類・実際には8枚存在する牌」のどれかをツモった場合にアガリとなるわけです。

さてFlashの方に戻りますが、この全ての牌にシリアルナンバーを割り振っていきます。
割り振り方は、
1mが1~4
2mが5~8
 ・
 ・
 ・
6j(発のこと)が129~132
7j(中のこと)が133~136
という感じですね。

なんでこんな細かい設計にしなきゃいけないかというと、赤ドラを実装するときにこのような設計方法が必須となるからです。
このFlashでも、5mのシリアルナンバーは17~20で、牌山生成の時に17を選定したときは赤5mに、181920を選定したときは通常の5mにするようにしています。同様に5sと5pでも赤ドラを実装しています。





いぁ~本当に説明ベタでスマソwwwwwww

この説明で皆理解してくれたらいいな!みたいなw



今後なんですけど、ゲーム進行とポンチーカンの実装を構想中。

おまけでシャンテン数を計算するプログラムを追加してみようと調べてみたら、メチャメチャ難しいプログラム組まないといけないwwwwwwwww



前回
http://mastermathematics.blog28.fc2.com/blog-entry-76.html

次回
http://mastermathematics.blog28.fc2.com/blog-entry-79.html
真・最近の記事V1.1

プロフィール

数学不敗

Author:数学不敗




↓マウスカーソルを上に置くと拡大します。
MJ4-6
MJ4-5
MJ4-1
MJ3
MJ2
SNC3
MFC


MJ4・攻略ブログ
MJ4ブログランキングに参加中ッ!

月別アーカイブ
カテゴリ
FC2カウンター

Twitter

StarFirstWatch

3ET製StarWatch
Present's by サンエタ

リンク

このブログをリンクに追加する

ブロとも申請フォーム
QRコード

QRコード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。