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

前回
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

次回
未定

コメント


根本的なところが公開された情報に欠けているのは否めないですよね。
一般人にあんな英数記号の羅列を示して乱数シード公開して牌山は固定です(キリッ)とか無理でしょ。。。
相手の理解できないフィールドに持っていってうやむやにするとか営業の常套手段ですからw
極論言ってしまえば、ヤラセをやっているかどうかよりも、ユーザーにヤラセじゃね?って思われた時点でアウトなんですけどね(笑)
じゃあヤラセじゃね?って思われる要因は・・・ 実際の対局で頻繁に起こる偽りの奇跡と頻発する無理展開という事実です\(^o^)/
2012/06/05 12:54URL  SAKU零号機 #eQhucDEg[ 編集]


ネットワークゲームのことを考慮したら4台からシードを得る必要があるのは当然。
シードが変わればサイコロ(というかrandの値)が変わるのも当然。
MJでは日本中で毎日何万局も対戦が行われるわけだから、シードが被らないようにする必要がある。そのために160bitの乱数を持ち寄って、かつ、それでも乱数が同じになるケースを想定して、次局が同じ山にならないように、不確定要素を入れてるんだろ。
もしシードを4台から集めない場合、不正なクライアント(改造サテ)が同一あるいは任意のシードを吐いてきたら自分に有利な山を作ることが可能になってしまうから、ネトゲではこれらの対処は必須。

また、不確定要素が絡むので、万が一4台が共謀したとしても、次局からは違う乱数が発生するわけだから、絶対にヤラセは不可能になるだろ。

ちなみにシードはおそらくサテのGUIDとタイマー(もちろんμ秒まで)を組み合わせたものから算出しているんだと思う。
それが160bit * 4台分あるんだから、2^640=4.56244062 × 10^192となり、理論的にはシードが被ることもないし、1台だけ偽装してもどうにもならない。

正直言って、ヤラセプログラム組む方が大変なのは分かるだろうに、なんでそんな恥ずかしい記事が書けるの?
2012/06/16 11:38URL  ななし #-[ 編集]


>>SAKU零号機さん
せめて「プレイヤー乱数シードの作り方も完全ランダムな文字列」と説明して欲しかったです。
「ある法則で作られている」と公表したせいで、ここまで違う結果が待っていました。

>>ななしさん
出たよ、クソセガ信者。セガこそ正義、セガのブレインこそ至上の知。
反吐が出る。

改造サテとか、ゲーセン側がそんなことしたら後で自分達が大変なことになるってことぐらいわかるでしょう。
まるで「サテを改造するなんてセガをバカにする不届き者!」みたいな言い方。
もう一度言います。セガ信者には反吐が出る。

ならば聞きたいのですが、あんなアルゴリズムを公開して客が戻ってくるとでも思いますか?
MJシリーズの終焉を回避できるとでも思ってるんですか?
脳内いつまでもお花畑ですか?

あんなややこしいプログラム組む麻雀ゲーム製作者なんて居ないわwww


あなたのセガに対するキチガイ染みた溺愛を反映したそのコメントの方が1000倍恥ずかしいわw
セガ信者ならもっとセガの中身と恥と知れ。
2012/06/16 18:31URL  数学不敗 #-[ 編集]


やらせプログラムが集金の要なんだから、複雑でも冗長でも組むと思う。無課金プレイヤーに対して5段から露骨な操作を行っているのも明確だし。
2013/02/27 16:12URL  ななしのよっしん!? #-[ 編集]

承認待ちコメント
このコメントは管理者の承認待ちです
2015/07/14 12:07  #[ 編集]


この記事に対するコメントの投稿
















この記事に対するトラックバック

トラックバックURL
http://mastermathematics.blog28.fc2.com/tb.php/79-0dd3c1be
この記事にトラックバックする(FC2ブログユーザー)
真・最近の記事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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。