(57)【要約】【課題】  自然乱数を利用しつつ、得られる乱数が一様性及び唯一性を備えていることが明らかに認めることができる方法及び装置を提供する。【解決手段】  本発明に係る方法及び装置は、ｐ種類（ｐは１より大きい自然数）の値をランダムに生成する乱数生成部から得られる乱数値に対して所定の処理を行って、ｍ種類（ｍ＜ｐ）の値を重複なくランダムな順番で抽出することを特徴とする。疑似乱数よりもランダム性が高く再現性のない自然乱数を用いることにより、これを遊技機に適用することによって、遊技機の外部から不正操作を困難にし、遊技機の安全性を高めることができる。また、自然乱数よりも少ない所定数までの値を、所定周期内において重複なくランダムな順番で抽出するようにしたことによって、抽出した乱数が一様性及び唯一性を備えていることは明らかとなり、その旨の認定が容易となる。【選択図】          図１
2006181191.tif 000002
【特許請求の範囲】
【請求項１】
ｐ種類（ｐは１より大きい自然数）の値をランダムに生成する乱数生成部から得られる乱数値に対して所定の処理を行って、ｍ種類（ｍ＜ｐ）の値を重複なくランダムな順番で抽出することを特徴とする遊技機用乱数抽出方法。
【請求項２】
ｐ種類の値をランダムに生成する乱数生成部から得られる乱数値に基づいて、ｍ種類（ｍ＜ｐ）の値をランダムに抽出する遊技機用乱数抽出方法であって、
各セルに０からｍ−１までの値をインデックス数としてラベル付けしたテーブルに、１からｍまでのｍ個の異なる値を格納する第１ステップと、
前記乱数生成部から得られた乱数値ｎ1を被演算数、ｙ＝ｍを演算数として剰余演算
ｘ＝ｎ1  ｍｏｄ  ｙ
を行って演算結果ｘを求める第２ステップと、
前記テーブルのインデックス数がｘのセルから抽出値を取り出す第３ステップと、
前記テーブルのインデックス数がｘのセルから取り出した値を削除するとともに、インデックス数がｘ＋１以降の各セルに格納されている値を、削除により空いたセルに１ずつ移動させてインデックスの最大値を一つ減らす第４ステップと、
前記ｙの値を１だけデクリメントする第５ステップと、
前記第２ステップから第５ステップまでの処理をｍ−１回繰り返し、最後にインデックス数０のセルから抽出値を取り出すことにより、合計ｍ個の抽出値を取り出す第６ステップと、
を含んでいる遊技機用乱数抽出方法。
【請求項３】
前記乱数生成部は、自然乱数生成装置からなるものである、請求項１又は２に記載の遊技機用乱数抽出方法。
【請求項４】
ｐ種類（ｐは１より大きい自然数）の値をランダムに生成する乱数生成部と、前記乱数生成部から得られる乱数値に対して所定の処理を行って、ｍ種類（ｍ＜ｐ）の値を重複なくランダムな順番で抽出することを特徴とするデータ処理部を含むことを特徴とする遊技機用乱数抽出装置。
【請求項５】
ｐ種類の値をランダムに生成する乱数生成部と、
各セルに０からｍ−１までの値をインデックス数としてラベル付けされ、各セルにｍ個の異なる値を格納するテーブルと、
前記乱数生成部から得られた乱数値ｎ1を被演算数、ｙ＝ｍを演算数として剰余演算
ｘ＝ｎ1  ｍｏｄ  ｙ
を行って演算結果ｘを求める演算手段と、
前記テーブルのインデックス数がｘのセルから抽出値を取り出す第１ステップと、前記テーブルのインデックス数がｘのセルから取り出した値を削除するとともに、インデックス数がｘ＋１以降の各セルに格納されている値を、削除により空いたセルに１ずつ移動させてインデックスの最大値を一つ減らす第２ステップと、前記ｙの値を１だけデクリメントする第３ステップと、を実行するデータ処理部とを備え、
前記データ処理部は、前記第１ステップから第３ステップまでの処理をｍ−１回繰り返し、最後にインデックス数０のセルから抽出値を取り出すことにより、合計ｍ個の抽出値を取り出すことを特徴とする遊技機用乱数抽出装置。
【請求項６】
前記乱数生成部は、自然乱数生成装置からなるものである、請求項４又は５に記載の遊技機用乱数抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パチンコやパチスロ等の遊技機で利用される乱数を抽出するための遊技機用乱数抽出方法及び遊技機用乱数抽出装置に関する。
【背景技術】
【０００２】
多くの遊技機やゲーム機において、そのゲームの重要な局面において当たり抽選という動作が行われるが、その際には「乱数」が利用されている。
【０００３】
乱数の発生には、種々の手法が知られている。パチンコやパチスロといった、遊技ホールに設置される遊技機は、風営法による規制の対象となっており、その動作や性能などについて細かい規制が課せられている。特に、当たり抽選の結果が景品の多寡に大きく影響する遊技機には、公正を担保するために、使用する乱数発生装置について一定以上の性能（真正な乱数を発生する性能）を備えているかどうかについての審査を受けることが要求されている。
【０００４】
しかしながら、使おうとする乱数発生装置が、本当の意味での乱数を発生するものであるかどうかを判断することは、それを使う側にとってもそれを審査する側にとっても難しい問題である。
【０００５】
従来の遊技機で使用されている代表的な乱数の発生方式に、例えば０から２５５までカウントできるカウンタの値を一定周期でインクリメントしてゆく方法や、計算式によりソフトウェア的に乱数を発生させる方法があるが、これらの方法で発生される乱数はいずれも疑似乱数である。
【０００６】
遊技機において疑似乱数を使用する利点として、一定周期（例えばカウンタが１巡するのに要する期間）の中で同一の数値が２回以上出現しないようにすることができることから、１周期内に出現する数値に一様性、唯一性を持たせることができるという点が挙げられる。
【０００７】
しかしながら、カウンタを用いる方法では、カウンタのカウント値が１周して元に戻るまでの周期が不正を行う者に知られてしまうと、特定のタイミングで自動的にスイッチが入るような回路を遊技機の内部に組み込んだいわゆる「ぶら下がり」や、特定のタイミングで遊技者がスイッチを押すことができる体感器と呼ばれる装置を用いる不正行為等により、大当たりを不正に引き当てることが可能になってしまう。
【０００８】
また、計算式によりソフトウェア的に乱数を生成させる方法も知られていて、これは前述のぶら下がりや体感器等の一定のタイミングで大当たりを不正に取得するものには有効であるといえる。しかし、人工的に生成した疑似乱数は再現性があるため、乱数の解析自体を行うことが不可能というものではなかった。
【０００９】
このような問題に対処するために、自然界のランダム現象に基づいて得られる乱数（自然乱数）を利用しようとする試みがある。例えば、特開２０００−２３７４３７号公報、国際出願番号ＰＣＴ／ＪＰ０３／０２９９２などに、このような自然乱数発生装置や自然乱数発生方法が開示されている。
【００１０】
【特許文献１】特開２０００−２３７４３７号公報
【特許文献２】国際出願番号ＰＣＴ／ＪＰ０３／０２９９２
【特許文献３】特開２０００−４２２２７号公報
【特許文献４】特開２００３−２１０７３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
自然乱数には再現性がないことから、これを利用した遊技機に外部から不正操作を行うことはきわめて難しく、したがって、その結果が景品の多寡に大きく影響する遊技機の抽選手段に利用することは、公平性を担保する上でも、不正を未然に予防する上でも望ましい。しかしながら、自然乱数をそのまま使おうとすると、それが一様性及び唯一性を備えているかどうかを審査することは、やはり難しい。
【００１２】
本発明は、このような技術的背景のもとでなされたものであり、その目的は、自然乱数を利用しつつ、得られる乱数が一様性及び唯一性を備えていることを明らかに認めることのできる遊技機用乱数抽出方法及び遊技機用乱数抽出装置を提供することである。
【課題を解決するための手段】
【００１３】
上記の課題を解決するための手段として、本発明は、ｐ種類（ｐは１より大きい自然数）の値をランダムに生成する乱数生成部から得られる乱数値に対して所定の処理を行って、ｍ種類（ｍ＜ｐ）の値を重複なくランダムな順番で抽出することを特徴とする。
【００１４】
上記本発明の一つの実施形態としての遊技機用乱数抽出方法は、
ｐ種類の値をランダムに生成する乱数生成部から得られる乱数値に基づいて、ｍ種類（ｍ＜ｐ）の値をランダムに抽出する遊技機用乱数抽出方法であって、
各セルに０からｍ−１までの値をインデックス数としてラベル付けしたテーブルに、ｍ個の異なる値を格納する第１ステップと、
前記乱数生成部から得られた乱数値ｎ1を被演算数、ｙ＝ｍを演算数として剰余演算
ｘ＝ｎ1  ｍｏｄ  ｙ
を行って演算結果ｘを求める第２ステップと、
前記テーブルのインデックス数がｘのセルから抽出値を取り出す第３ステップと、
前記テーブルのインデックス数がｘのセルから取り出した値を削除するとともに、インデックス数がｘ＋１以降の各セルに格納されている値を、削除により空いたセルに１ずつ移動させてインデックスの最大値を一つ減らす第４ステップと、
前記ｙの値を１だけデクリメントする第５ステップと、
前記第２ステップから第５ステップまでの処理をｍ−１回繰り返し、最後にインデックス数０のセルから抽出値を取り出すことにより、合計ｍ個の抽出値を取り出す第６ステップと、
を含むものとすることができる。
【００１５】
本発明に係る遊技機用抽出装置は、
ｐ種類の値をランダムに生成する乱数生成部と、
各セルに０からｍ−１までの値をインデックス数としてラベル付けされ、各セルにｍ個の異なる値を格納するテーブルと、
前記乱数生成部から得られた乱数値ｎ1を被演算数、ｙ＝ｍを演算数として剰余演算
ｘ＝ｎ1  ｍｏｄ  ｙ
を行って演算結果ｘを求める演算手段と、
前記テーブルのインデックス数がｘのセルから抽出値を取り出す第１ステップと、前記テーブルのインデックス数がｘのセルから取り出した値を削除するとともに、インデックス数がｘ＋１以降の各セルに格納されている値を、削除により空いたセルに１ずつ移動させてインデックスの最大値を一つ減らす第２ステップと、前記ｙの値を１だけデクリメントする第３ステップと、を実行するデータ処理部とを備え、
前記データ処理部は、前記第１ステップから第３ステップまでの処理をｍ−１回繰り返し、最後にインデックス数０のセルから抽出値を取り出すことにより、合計ｍ個の抽出値を取り出すことを特徴とする。
【００１６】
なお、前記乱数生成部は、自然乱数生成装置とすることが望ましい。
【発明の効果】
【００１７】
本発明によれば、疑似乱数よりもランダム性が高く再現性のない自然乱数を用い、これを遊技機に適用することによって、遊技機外部からの不正操作を困難にし、遊技機の安全性を高めることができる。
【００１８】
また、自然乱数よりも少ない所定数までの値を、所定周期内において重複なくランダムな順番で抽出するようにしたことによって、抽出した乱数が一様性及び唯一性を備えていることは明らかとなり、その旨の認定が容易となる。
【発明を実施するための最良の形態】
【００１９】
以下で、図面を参照して本発明の実施の一形態について説明する。
本実施形態は、前述のように、熱雑音等を利用して自然乱数を生成する自然乱数生成手段の出力乱数値を用いることが前提となる。
【実施例１】
【００２０】
図１は、本発明の実施例１の基本的な考え方を示した図である。ここでは、遊技機において実際に使う最終的な乱数値は、１から１０（＝乱数最大値）までの１０種類とする。一方、ここで利用する自然乱数生成手段は、乱数値ｎとして、１から２５６までの２５６種類の値を出力するものとする。図１において、（ａ）〜（ｄ）は、１回目の乱数取り出し操作を示し、（ｅ）〜（ｈ）は、２回目の乱数取り出し操作を示す。３回目以降の乱数取り出し操作は省略してある。
【００２１】
図１（ａ）は、当初の乱数取り出しテーブルＴの状態を示している。このように、当初の乱数取り出しテーブルＴには、１から１０までの各数値が、左側に示した０から９までのインデックス数の各セルに規則的に格納されている。この下に示した残乱数値ｍは変数であり、最初は乱数最大値である１０がセットされ、１回の乱数取り出し操作ごとに１ずつデクリメントされる。
【００２２】
この状態で、図１（ｂ）に示すように、自然乱数生成手段から乱数値ｎとして「２５６」という値が得られたとする。この値と残乱数値ｍ（最初は１０）との間で剰余演算、すなわち前者を後者で割ってその余りを求める演算を行い、得られる値をｘとする。すなわち、
ｘ＝２５６  ｍｏｄ  １０
＝６
【００２３】
ここで、図１（ａ）の乱数取り出しテーブルＴを参照し、得られたｘ＝６をインデックスとして、そのインデックスのセルに格納されている値「７」を最初の乱数値Ｒとして取り出す（図１（ｃ））。この乱数値Ｒが、遊技機において利用される最初の乱数値となる。次に、図１（ｄ）に示すように、乱数取り出しテーブルＴから、ｘ＝６に対応する値「７」を削除し、それ以降の値を一つずつ上に詰めるとともに、残乱数値ｍを１つ減らして「９」とする。
【００２４】
２回目の乱数取り出し操作では、図１（ｅ）に示すように、図１（ｄ）で得られた乱数取り出しテーブルＴを利用する。この状態で、自然乱数生成手段から乱数値ｎとして「１３８」が得られたとする（図１（ｆ））。この値と残乱数値ｍ＝９との間で剰余演算を行い、得られる値をｘとする。すなわち、
ｘ＝１３８  ｍｏｄ  ９
＝３
【００２５】
ここで図１（ｅ）の乱数取り出しテーブルＴを参照し、得られたｘ＝３をインデックスとしてそこに格納されている値「４」を乱数値Ｒとして取り出す（図１（ｇ））。この乱数値Ｒが、遊技機において利用される２つ目の乱数値となる。次に、図１（ｈ）に示すように、乱数取り出しテーブルＴから、ｘ＝３に対応する値「４」を削除し、それ以降の値を一つずつ上に詰めるとともに、残乱数値ｍを１つ減らして「８」とする。
【００２６】
以下、同様の操作を、残乱数値ｍが１になるまで繰り返す。その結果、１から１０までのすべての値がランダムな順番で得られることになる。すなわち、残乱数値が１０から１になるまでを１周期とすると、１周期の間に、１から１０までの値が必ず１回は出現し、しかも各値が出現する順番は確実にランダムとなる。
【００２７】
図２は、図１に示した方法で乱数値を取り出す処理を示したフローチャートである。同図において、Ｓ１０１〜Ｓ１０３は、「乱数初期化１」、すなわち最初に乱数取り出しテーブルＴを図１（ａ）に示すようにセットするとともに、残乱数値ｍに最初に値「１０」をセットする処理を示している。この状態で、まず、自然乱数生成手段から乱数値ｎを取り出し（Ｓ１１１）、ｎをｍで割ってその余りｘを求める演算（剰余演算）を行い（Ｓ１１２）、乱数取り出しテーブルＴからｘをインデックスとして乱数値Ｒを求める（Ｓ１１３）。次に、乱数取り出しテーブルＴからｘ番目の行を削除し、ｘ＋１番目以降を一つずつ前に移動させるとともに（Ｓ１１４）、残乱数値ｍの値を１だけデクリメントする（Ｓ１１５）。
【００２８】
そして、残乱数値ｍがゼロかどうかを判定し（Ｓ１１６）、ゼロでなければ、Ｓ１１１からＳ１１６までのステップを繰り返す。一方、残乱数値ｍがゼロであれば、再びＳ１０１からＳ１０３までのステップにより乱数初期化１の処理を行う。
【実施例２】
【００２９】
図３は、本発明の実施例２の基本的な考え方を示した図である。まず、（ａ）に示すように、実施例１と同様の乱数取り出しテーブルＴを用意する。この場合、実施例１の場合と同様に、残乱数値ｍに「１０」をセットするとともに、格納ポインタｉに「０」をセットする。
【００３０】
自然乱数生成手段から乱数値ｎとして、図１（ｂ）と同様に「２５６」という値か得られたとする。この値と残乱数値ｍ（最初は１０）との間で剰余演算を行い、得られる値をｘとする。すなわち、
ｘ＝２５６  ｍｏｄ  １０
＝６
【００３１】
ここで、図３（ａ）の乱数取り出しテーブルＴを参照し、ｘ＝６をインデックスとしてそこに格納されている値「７」を取り出す。ここまでは、実施例１の場合と同様である。そして、この値「７」を、図３（ｃ）に示した乱数値格納テーブルの乱数値格納ポインタｉ＝０のセルに格納する。同時に、乱数取り出しテーブルＴから、ｘ＝６に対応する値「７」を削除し、それ以降の値を一つずつ上に詰めるとともに、残乱数値ｍを１つ減らして「９」とし、かつ、格納ポインタｉをインクリメントする。以下同様の処理を行って乱数値格納テーブルを埋めて行き、図３（ｃ）に示すような乱数値テーブルを得る。
【００３２】
このような乱数値テーブルが得られたら、図３（ｄ）に示すように、乱数値取り出しポインタｊの値をゼロからＭ−１まで順番に増やしながら値を取り出してゆく。これにより、１から１０までの値がランダムな順番で、しかも各値が必ず１回得られる。
【００３３】
図４は、図３に示した方法で乱数値を取り出す処理を示したフローチャートである。同図において、Ｓ２０１〜Ｓ２０３は、最初に乱数取り出しテーブルＴを図１（ａ）に示すようにセットするとともに、残乱数値ｍに最初に値「１０」をセットする処理を示している。この状態で、まず、自然乱数生成手段から乱数値ｎを取り出し（Ｓ２０５）、ｎをｍで割ってその余りｘを求める演算（剰余演算）を行い（Ｓ２０６）、乱数取り出しテーブルＴからｘをインデックスとして乱数値Ｒを取り出すとともに、乱数値テーブルの乱数値格納ポインタｉのところに格納する（Ｓ２０７）。次に、乱数取り出しテーブルからｘ番目の行を削除して、ｘ＋１番目以降を一つずつ前に移動させ（Ｓ２０８）、そして、残乱数値ｍの値を１だけデクリメントし、格納ポインタｉの値を１だけインクリメントする（Ｓ２０９）。このＳ２０５からＳ２０９までのステップをｉが０になるまで、あるいはｍが１になるまで繰り返すことによって、図３（ｃ）に示した乱数値格納テーブルが得られる（Ｓ２０４）。
【００３４】
こうして乱数値格納テーブルが得られたら、Ｓ２１１〜Ｓ２１４に示した処理を行って、図３（ｄ）示すように、関数値取り出しポインタｊを１ずつインクリメントさせながら、乱数値格納テーブルに格納されている値を順番に取り出す。
【実施例３】
【００３５】
図５は、本発明の実施例３の基本的な考え方を示した図である。実施例３では、図３（ｃ）に示した実施列２の乱数値テーブルを二つ用いて、一方のテーブルから乱数値を読み出している間に他方のテーブルに抽出した乱数値を書き込むようにすることによって、動作効率を向上させる。
【００３６】
図５において、（ａ）と（ｂ）は横軸を共通の時間軸としてある。ＴＢ[０]、ＴＢ[１]は、それぞれ、図３（ｃ）に示したのと同様の乱数値テーブルを表す。ただし、当然のことながら、各乱数値テーブルに書き込まれる内容は、毎回異なる。図５（ａ）は、乱数値テーブルの書き込み状態（上）と、読み出し状態（下）の乱数値テーブルがＴＢ[０]とＴＢ[１]のどちらであるかを示している。乱数値テーブルは、図５（ｃ）に示すように、それぞれが０番から９番までの１０個のセルを有する。
【００３７】
ＴＳ[０]、ＴＳ[１]は、それぞれ乱数値テーブルＴＢ[０]、ＴＢ[１]のテーブル・ステータスを表し、図５（ｄ）に示すように「０」のときは空き、「１」のときは読み出し中、「２」のときは書き込み中の各状態を意味する。ｗｐは書き込みポインタであり、「０」のときはテーブルＴＢ[０]の書き込み中、「１」のときはＴＢ[１]の書き込み中を表す。ｒｐは読み出しポインタであり、「０」のときはテーブルＴＢ[０]の読み出し中、「１」のときはＴＢ[１]の読み出し中を表す。
【００３８】
図５（ａ）（ｂ）を見ると、時刻ｔ0からｔ1までは、ＴＳ[０]＝ＴＳ[１]＝０であるから、乱数値テーブルＴＢ[０]、ＴＢ[１]は、いずれも空き状態である。また、ｗｐ＝ｒｐ＝０であるから、書き込みポインタも読み出しポインタも乱数値テーブルＴＢ[０]を指し示している。
【００３９】
時刻ｔ1の時点で、ＴＳ[０]が「２」となるので、（ａ）に示すように乱数値テーブルＴＢ[０]が書き込み状態となり、この書き込みが時刻ｔ2まで続く。乱数値テーブルのすべてのセルにデータを書き込むのに例えば５ミリ秒かかるとすると、ｔ1からｔ2までの時間が５ミリ秒に対応する。
【００４０】
時刻ｔ2の時点で乱数値テーブルＴＢ［０］への書き込みが終了すると、ＴＳ［０］は、「１」となって読み出し状態となり、データがセットされた（書き込まれている）乱数値テーブルＴＢ［０］からの読み出しが始まる。すなわち、乱数値テーブルＴＢ［０］のセルＴＢ［０］［０］、ＴＢ［０］［１］、ＴＢ［０］［２］、・・・、ＴＢ［０］［９］という順番で順次データが読み出され、これが時刻ｔ5まで続く。一つのセルからの読み出しにかかる時間は、例えば２ミリ秒であり、全てのセルの読み出しにはほぼこれにセル数（ここでは１０）を掛けた時間がかかる。
【００４１】
他方、乱数値テーブルＴＢ［１］については、時刻ｔ2においてライトポインタｗｐ＝１となって書き込み可能となり、時刻ｔ3においてＴＳ［１］が「２」となって、書き込みが開始される。この書き込みは、時刻ｔ4まで続く。時刻ｔ4では、書き込みポインタｗｐは、「１」から「０」に変わって、乱数値テーブルＴＢ［０］への書き込みが可能な状態となる（実際には、時刻ｔ5まで乱数値テーブルＴＢ［０］からの読み出しが続いているが）。
【００４２】
時刻ｔ5では、ＴＳ［０］が「０」となって乱数値テーブルＴＢ［０］は空き状態になるとともに、読み出しポインタｒｐ＝１となって、乱数値テーブルＴＢ［１］の読み出しが可能な状態となる。以下、同様にして、二つの乱数値テーブルＴＢ［０］及びＴＢ［１］に対して書き込みと読み出しが繰り返されてゆく。
【００４３】
図６は、図５に示した実施例３におけるコンピュータの動作を示したフローチャートであり、（ａ）はメインのフローチャート、（ｂ）は（ａ）のＳ３０８のタイマー処理の部分を詳細に示したフローチャートである。
【００４４】
Ｓ３０１では、図５の時刻ｔ0における状態にする動作であり、書き込みポインタｗｐ＝０、読み出しポインタｒｐ＝０とし、乱数値テーブルＴＢ［０］、ＴＢ［１］をともに空き状態とする。Ｓ３０２の処理は図５の時刻ｔ1での処理であり、ＴＳ［ｗｐ］を書き込み状態を表す「２」とするが、このときｗｐ＝０であるから、乱数値テーブルＴＢ［０］が「２」とされて書き込み状態となる。
【００４５】
Ｓ３０３の「乱数初期化２」とは、図４に示した実施例２のメインのフローチャートにおける「乱数初期化２」を指している。すなわち、図４のＳ２０１からＳ２０９までの処理を実行して、乱数値テーブルＴＢ［ｗｐ］（ｗｐ＝０であれば乱数値テーブルＴＢ［０］、ｗｐ＝１であれば乱数値テーブルＴＢ［１］を表す）に乱数値を書き込む処理を表している。
【００４６】
Ｓ３０４は、読み出しポインタｒｐの値に対応するテーブル・ステータスＴＳ［ｒｐ］を読み出し状態を表す「１」とする。最初は、ｒｐ＝０であるから、乱数値テーブルＴＢ［０］のテーブル・ステータスＴＳ［０］を、読み出し状態を表す「１」とする。
【００４７】
Ｓ３０５では、書き込みポインタｗｐを更新する。ここで、「更新する」とは、現在ｗｐ＝０であれば、ｗｐ＝１とし、現在ｗｐ＝１であれば、ｗｐ＝０とする。なお、ここでは現在のｗｐの値と論理値「１」との排他的論理和（ｘｏｒ）をとることによってｗｐの値を反転させる処理としている。
【００４８】
Ｓ３０６では、これから読み出そうとする乱数値テーブルの読み出しインデックス（ｊ）を初期化する。具体的には、ｊ＝０とする。
【００４９】
Ｓ３０７では、その他のプログラム、具体的には、乱数取り出し処理以外の遊技機のプログラムの初期化を行う。
【００５０】
Ｓ３０８では、タイマー処理を行う。このタイマー処理には、乱数値がセットされた（書き込まれた）乱数値テーブルからのデータの読み出しを意味し、具体的な処理は、図６のＳ３２０からＳ３２６に示すが、この処理は、Ｓ３０９以降の処理と並行して実行される。
【００５１】
Ｓ３０９からは、Ｓ３０８のタイマー処理を実行しながら、同時に空いているもう一方の乱数値テーブルへの書き込みを行う。まず、空いている方の乱数値テーブルのテーブル・ステータスＴＳが読み出し状態になっていないかどうかを見る（最初はｗｐ＝０であるから、ＴＳ［０］が読み出し状態になっていないかどうかをみる）（Ｓ３０９）。読み出し状態になっていなければ（Ｎｏであれば）、Ｓ３１１からＳ３１４の処理を実行するが、これは前述のＳ３０２からＳ３０７までの処理と同じである。
【００５２】
乱数値の読み出しを行うタイマー処理では、まずＳ３２０において、テーブル・ステータスＴＳ［ｒｐ］が読み出し状態かどうかを見る（最初はｒｐ＝０であるから、ＴＳ［０］が読み出し状態かどうかをみる）。読み出し状態であれば（Ｙｅｓであれば）、乱数値テーブルＴＢ［ｒｐ］のｊ番目（ｊは最初は０。図３（ｄ）参照）の値を読み出して（Ｓ３２１）、ｊの値を１だけインクリメントする（Ｓ３２２）。これにより、一つのセルからの読み出しが完了する。一つのセルからの読み出しに要する時間は、例えば前述のように２ミリ秒である。
【００５３】
続いて、ｊの値がテーブル最大値（図３（ｄ）の場合は９）かどうかを判定し（Ｓ３２３）、判定がＮｏであれば、遊技機が必要とするその他のタイマー処理を行い（Ｓ３２６）、次のセルについて、Ｓ３２０からの処理を繰り返す。Ｓ３２３の判定がＹｅｓの場合は、ｒｐが示す乱数値テーブルのテーブル・ステータスＴＳを空き状態「０」とし（Ｓ３２４）、ｒｐを更新する（Ｓ３０５参照）（Ｓ３２５）。
【００５４】
以上の説明から分かるように、この実施例３では、一方の乱数値テーブルにデータをセットする（書き込む）間に他方の乱数値テーブルからデータを読み出すことができるので、１個の乱数値テーブルでデータのセットと読み出しを繰り返す場合のようにデータをセットしている間はデータを読み出すことができないという問題を解消し、動作効率を向上させることができる。
【実施例４】
【００５５】
図７は、本発明の一実施例に係る遊技機用乱数取り出し装置のブロック図である。実際の乱数取り出し装置は、チップ化されて遊技機に搭載される。
【００５６】
図７において、自然乱数ｎ生成部５は、例えば熱雑音発生素子が発生するランダムパルス等から自然乱数生成する。ここで生成された自然乱数ｎは、ｐ種類（ｐは、例えば０から２５５までの２５６種類）の値のうちいずれかであり、これは自然乱数ｎ記憶部６に一時的に書き込まれる。
【００５７】
乱数最大値Ｍ設定部１は、最終的に出力する乱数の最大値をオペレータが設定する部分である。ここで設定される乱数最大値Ｍによって、この装置の乱数出力の一周期が決まる。ここで設定された乱数最大値Ｍは、残乱数値ｍ変更部２へ供給される。
【００５８】
残乱数値ｍ変更部２は、出力すべき乱数値の残りの数である残乱数値ｍを規定する部分であり、その初期値は乱数最大値Ｍ設定部１において設定される乱数最大値Ｍである。そして、後述のように乱数値Ｒが出力される度に、乱数値Ｒ出力部１１からその旨の情報を受けてｍ＝ｍ−１の演算を行う。そして、ｍ＝０となった時点で、再び乱数最大値Ｍ設定部１から乱数最大値Ｍを読み出してｍ＝Ｍに設定する。
【００５９】
テーブルＴ作成部３は、最終的に出力される乱数値Ｒとラベルｘとを関連づけて、図１（ａ）、図３（ａ）に示すようなテーブルＴを作成し、テーブルＴ記憶部４に格納する。テーブルＴのラベルの初期最大値は、乱数最大値Ｍによって決まる。テーブルＴの各セルには、ｍ＋１種類（ｍは残乱数値）の異なる値が格納される。
【００６０】
また、テーブルＴ作成部３は、乱数値Ｒ出力部１１からの更新信号を受けると、テーブルＴ記憶部４から読み出したテーブルＴのラベルの最大値を、残乱数値ｍ更新部の残乱数値ｍに基づいて更新するとともに、テーブルＴの中の当該乱数値Ｒを削除して、図１（ｅ）、図３（ｄ）のような新しいテーブルＴを作成し、これを新たにテーブルＴ記憶部４に格納する。これは、１周期中に同じ値が１回だけしか出現しないようにするためである。
【００６１】
ラベル値ｘ演算部７は、自然乱数ｎ記憶部６に記憶されている自然乱数ｎと、残乱数値ｍ更新部２から与えられる残乱数値ｍとから、
ｘ＝ｎ  ｍｏｄ  ｍ
を演算してラベル値ｘを求め、得られたラベル値ｘをラベル値ｘ記憶部８に格納する。乱数値Ｒ取得部９は、テーブルＴ記憶部４に格納されているテーブルＴから、ラベルｘに対応する値Ｒを読み出し、これを乱数値Ｒ記憶部１０に格納する。
【００６２】
乱数値Ｒ出力部１１は、チップ外部からの要求や、所定のタイミングに基づいて、乱数値Ｒ記憶部１０に格納されている値Ｒを乱数値として出力する。乱数値Ｒ出力部１１はさらに、チップ外への乱数値Ｒの出力と同時にリセット部へリセット出力信号を供給し、また、残乱数値ｍ更新部２及びテーブルＴ作成部３へ、更新信号を供給する。
【００６３】
リセット部１２は、乱数値Ｒ出力部１１からリセット出力信号を受け取ると、自然乱数ｎ記憶部６、ラベル値ｘ記憶部８、乱数値Ｒ記憶部１０へリセット信号を供給する。自然乱数ｎ記憶部６、ラベル値ｘ記憶部８、乱数値Ｒ記憶部１０は、リセット信号を受け取ると、それまで保持していたデータをリセットして初期状態へ戻る。
【００６４】
図７に示した装置に基づいて、図３及び図４に示した実施例２の方法を実行することができる。また、図１及び図２に示した実施例１の方法を実行させる場合は、図７に示したいくつかの機能ブロックを変更するだけでよい。さらに、図７の装置を二つ用意してこれらを主要部分として、図５及び図６に示した実施例３の方法を実施することができる。
【００６５】
（その他の実施例）
上記の各実施例では、剰余演算を用いることによって、例えば２５６個の自然乱数値から１０個の乱数値を抽出した。このように剰余演算を用いる実施例は実施形態として好ましいものではあるが、本発明は上記の各実施例には限定されず、１からｐ（ｐは自然数）までの値をランダムに生成する乱数生成部から得られる乱数値に対して、所定の処理を行うことによって、１からｍ（ｍ＜ｐ）までの値を重複なくランダムな順番で抽出するものであれば、本発明の技術的範囲に含まれる。
【００６６】
例えば、１からｐまでの乱数値を取り出し、この値が１からｍまでのいずれかの値であるときは抽出値とし、それ以外のときはこれを破棄し、続いて１からｐまでの乱数値を取り出し、これが１からｍまでのいずれかの値であり、かつ、すでに抽出値としたものでないときには新たな抽出値とするという操作を、最終的にｍ個の抽出値が得られるまで繰り返すことによっても、ｍ個の抽出値を重複なくランダムな順番で抽出することができる。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施例１の基本的な考え方を示した図である。
【図２】図１に示した方法で乱数値を取り出す処理を示したフローチャートである。
【図３】本発明の実施例２の基本的な考え方を示した図である。
【図４】図３に示した方法で乱数値を取り出す処理を示したフローチャートである。
【図５】本発明の実施例３の基本的な考え方を示した図である。
【図６】図５に示した実施例３におけるコンピュータの動作を示したフローチャートである。
【図７】本発明の一実施例に係る遊技機用乱数取り出し装置のブロック図である。
【符号の説明】
【００６８】
１    乱数最大値Ｍ設定部
２    残乱数値ｍ更新部
３    テーブルＴ作成部
４    テーブルＴ記憶部
５    自然乱数ｎ生成部
６    自然乱数ｎ記憶部
７    ラベル値ｘ演算部
８    ラベル値ｘ記憶部
９    乱数値Ｒ取得部
１０  乱数値Ｒ記憶部
１１  乱数値Ｒ出力部
１２  リセット部
【図１】
2006181191.tif 000003
【図２】
2006181191.tif 000004
【図３】
2006181191.tif 000005
【図４】
2006181191.tif 000006
【図５】
2006181191.tif 000007
【図６】
2006181191.tif 000008
【図７】
2006181191.tif 000009