(57)【特許請求の範囲】
【請求項１】
ユーザーが設計した格闘ゲーム（勝敗を含むもの）の内容についてのルールを記述したファイルを、
コンピュータ上でゲームのルールとして実行出来るように処理、
実行するゲームプログラムであって、
ファイルに記述されたルールが、ユーザーが自由に決めた用語を用いたゲームの状態やコマンドの組合せからなっており、
コンピュータがルールの内容から、少なくとも一方が勝利にどれだけ近いか判断する基準を作成し、当該作成した判断する基準をもとに最善手を探索することで勝敗を競うことが出来るようにしたゲームプログラムであって、
当該判断する基準の作成においては、
ルールが条件と効果からなっており、
勝敗を決する効果を探索し、
勝敗を決する効果を有するルールから勝利するための条件（勝利評価条件）を探索し、
勝利するための条件（勝利評価条件）を満たすように変化させる効果を持ったルールをさらに探索しかつ探索したルールの条件を勝利するための条件（勝利評価条件）として系統的に列挙（展開）していくことを繰り返すことから当該判断する基準が作成され、
当該判断する基準をもとに最善手を探索する際には、
系統的に列挙した勝利評価条件のうち、勝敗を決する効果に系統的により近い勝利評価条件にするコマンドをより善いコマンドとする
ゲームプログラム。
【請求項２】
ゲームの内容について記述したファイルを記憶する際に、
左右の対称性にもとづいて展開されるべきことが明記されたルールに関する記述を展開して
右を左に、左を右に入れ替えたルールを複製する
請求項１に記載のゲームプログラム。
【請求項３】
ユーザーが
どのような手順で勝利するかを
設計したゲームの内容から確認することが出来るように、
ゲームのルールどおりに勝利するまでの手順を探索して、
結果を表示することを特徴とする
請求項１に記載のゲームプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲーム（勝敗のあるものに限らない（２以上が協力して高得点やゴールをめざすものも含む））の、人や動植物等（特に、物理的／化学的／心理的／電気的／磁気的／光学的な動きのあるもの）の間で行われるゲームや遊戯や相互活動（ビジネス交渉、会話全般、マッサージ、治療、恋愛、性交渉等を含む）のうちで、特に２個体以上で行うもの、特に２個体で対戦するもの、特に２個体のそれぞれに許される技が公平な格闘ゲーム（以降、「格闘ゲーム等」と呼ぶ）に関するものである。
【背景技術】
【０００２】
従来のゲームのうちで一般的な格闘ゲームは、プレイヤーがゲームに登場するキャラクタを操作して、他のプレイヤーやコンピュータの制御によって操作されるキャラクタと闘うものである。その内容は、自分のキャラクタを相手のキャラクタに対して戦う（パンチやキック、ガード、必殺技など）ようにお互いに操作して、状態（体力、精神力など）を変化させて、特定の条件を満たす（相手の体力をなくす、設定されている制限時間が0になるなど）と勝利するというものである。
【０００３】
これらの内容は開発者が設計した範囲内から選択（キャラクタを変える、開始時の体力を変えてハンデを付ける、時間の制限をなくすなど）することができる。特許文献１より、構え（上段、中断、下段など）を変えられるゲームも存在する。構えによって、キャラクタの動きや能力が変わり、キャラクタを強くしたり、有利にしたりすることが出来る。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開 平１１−１５６０４８（ＪＰ，Ａ）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、プレイヤーが格闘ゲームの内容を変更又は拡張しようとした場合、プレイヤーが自由に出来るのは、開発者が設計した範囲内で内容を選択することである。自由な世界観（自分で考えた格闘技や異種格闘技など）を作ることは拡張（ルールの追加や状態の削除など）に制限がある（勝敗の基準は変えられない、体力は無くせないなど）ため難しい。
【０００６】
また、プレイヤーが格闘ゲームの内容を設計しようとした場合、複雑な状態変化のある格闘ゲーム（柔道や相撲など）は、技を出したり、技の効果を計算したりするのに必要なモデル（現実のゲームの理論）について、正確（現実の内容に近いモデル化）か否かの基準が存在しない。だが、変更や拡張によってモデルの正確さを高めようとした時、従来の格闘ゲームはモデルの正確さを徐々に高めやすい手法（変数やソースコードがオープンで1行１行の独立性が高いプログラミング言語）では設計されていないので、正確さを変え難い。
【課題を解決するための手段】
【０００７】
本発明はユーザーが設計したゲーム（勝敗のあるものに限らない（２以上が
協力して高得点やゴールをめざすものも含む））の内容について記述したファイルを、コ
ンピュータ上でゲームのルールとして実行出来るように処理することを特徴とする。これ
により、技を出したり、技の効果を計算したりする格闘ゲームの世界観を拡張出来る。
【０００８】
本発明はまた、ユーザーが定義したルールの内容が記述されたファイルを読み込み
、展開して、コンピュータ上で実行しやすい形に変換させることで、コンピュータ上でゲ
ームのルールとして実行出来るように処理を行うことを特徴とする。これによりユーザー
は、プログラミングに関する専門知識が無くても、設計した内容を反映させることが出来
る。また、読み込むファイルを変えて、実行するゲームの内容を使い分けることが出来る
。
【０００９】
本発明はまた、ユーザーが複雑な状態変化のあるゲームのルールを作りたい内容の
モデルへと近づけやすくするため、コンピュータがルールを処理する際は、１行ずつある
いは１文ずつ分割して他の行や文への影響を減らすことで、ファイルの内容を改良しやす
くなるように独立性を高めた文法を使うことを特徴とする。これにより、作りたいゲーム
の内容へと徐々に近づくようにルールを改良しやすく、正確さを高めていくことが出来る。なお、ルールの記述に文法などの誤りがある場合は読み込みが中断されて何処に誤りがあるか表示する。
【００１０】
本発明はまた、ユーザーがルールの内容を変えれば、勝利にどれだけ近いかまたは
優劣を判断する基準も変えられるように、コンピュータがルールの内容から、勝利にどれ
だけ近いか判断する基準を作成することを特徴とする。これにより、複雑な状態変化のあ
るゲームを設計する際に、どんな状態が有利か、どんな状態が勝利に近いかなどを決めず
に、コンピュータ化する際に勝利条件から自動的に作成される。なお、本プログラムでは
「有利条件」という、勝利にどれだけ近いか判断する基準をルールに記述することが出来
る。これはユーザーが明示しなくても、自動的に生成される基準とは違う。どんな状態が
有利か、どんな状態が勝利に近いかなどをユーザーが記述することが出来る。
【００１１】
本発明はまた、上記のように作成した判断基準をもとに、コンピュータがファイル上
で設計した内容どおりに状態を変化させて、コマンド入力の最善手を探索することで、設
計したゲームの内容でユーザーとコンピュータとが勝敗を競うことが出来ることを特徴と
する。これにより、ユーザーが定義した格闘ゲームで、最善手を使おうとするコンピュー
タと勝敗を競い合うことで、ゲームの世界観を体感することや、モデルを現実のゲームに
近づける基準にすることが出来る。
【００１２】
本発明はまた、ゲームの内容について記述したファイルを記憶する際に、ルールに
関する記述を展開して新しいルールに変換して記憶することで、ファイルはすべてのルー
ルを記述しない量を減らしたものにして、編集する作業を簡単にしたり出来ることを特徴
とする。これにより、記述する分の内容を展開したり変換したりすることで、ファイルに
記述された量が減るので、複雑なルールの調整を容易にすることが出来る。なお、展開は
マクロによって内容に置き換える処理になる。
【００１３】
本発明はまた、ユーザーがどのような手順で勝利するかを設計したゲームの内容か
ら確認することが出来るように、ゲームのルールどおりに勝敗が決まるまで探索して、見
つけたらそこまでの手順を表示することを特徴とする。これにより、コンピュータが思考
するパターンや基準を作らなくても、ゲームを開発したり実行したりする前に勝つための
パターンを確認してから出来る。なお、この手順は「人間側が勝利するためには、人間側
とＣＰＵ側が交互に、どのコマンドを入力するか」になる。
【発明の効果】
【００１４】
一般的な手続き型プログラミング言語（Ｃ言語、Ｃ＋＋、ＪＡＶＡ（登録商標）、ＰＨＰ等）の形式でソースを記述しないので、そのようなプログラミング言語に関する技術が無くても、ユーザーが自分でゲーム（特に格闘ゲーム等）をユーザーが設計した形にしたり、ルールの調整をしたり出来る。
【００１５】
ユーザーが自分の好きな自由に決めた用語を用いて（すなわち自由な概念、自由に定義したゲームの状態やコマンド、それらの組み合わせであるルールを用いて）、ゲームを自由に設計できる。相撲や空手、自分で考えた格闘技でもプログラムに出来る。また、異種格闘技でも自由に設計出来る。
【００１６】
ルールはユーザーがテキスト形式で記述したファイルの中から選択出来るので、ルールや遊び方を変えて、多種多様な使い方を行うことで、マンネリを防ぐことが出来る。
【図面の簡単な説明】
【００１７】
【図１】全体の設計図（機能関連図）
【図２】演算文の例
【図３】勝利評価条件を展開する処理
【図４】ルールプログラムの例1
【図５】ルールプログラムの例２
【図６】ルールプログラムの例３
【図７】ルールプログラムの例４
【図８】ルールプログラムの例４
【発明を実施するための形態】
【００１８】
図１はコンピュータがゲームの内容を記憶してからを実行するまでに行う処理について、全体の設計図（機能関連図）である。全体制御機能・メインルーチンでユーザーによって設計、編集されたゲームの内容をテキスト形式のファイルを選択してから実行するまでの処理を行う。ファイルには、どのような条件によってどのような効果が発揮されるかという必要なゲームのルールが記述してある。ルールプログラムの選択・読込・再読込でゲーム開始前処理を行う。実行するゲームの内容は、ルールプログラムとしてテキスト形式に記憶したファイルから読込む。その内容をルールプログラムの実行でゲーム実行処理を行う。ユーザーによって設計、編集され、コンピュータ上で実行しやすい形に変換、記憶されたゲームの内容を実行する。
【００１９】
ルールプログラムは独立性が高く、読込時も実行時も一行ずつ処理する点や、ゲームのルールを条件の部分は「条件１、条件２、・・・」と効果の部分は「効果１、効果２、・・・」というように一行ずつ区分していく。そのため、複雑な内容を記述したい時は、条件や効果の数を増やして記述して、ルールを徐々に現実のゲームに近づけたい時は条件や効果を一つずつ変えていくことで、開発効率の向上や部分的な再利用が容易になる。
【００２０】
ルールプログラムの条件や効果には、定数のみではなく、演算文を使うことで複数の状態の値の計算結果を使用することも出来る。図２のような形式で、条件文では、演算文の計算結果と演算文の計算結果の大小関係を条件文とすることが出来る。また、実行文では、演算文の計算結果を状態の値に代入することが出来る。
【００２１】
コンピュータが「どのようにすれば勝利できるか」を導く基準として、ルールの条件から
勝利評価条件を作成する。図３は、勝利評価条件を作成する過程を示している。勝利評価条件
はルールプログラムから、勝利にどれだけ近いか判断する基準として作成する。だから勝
利にどれだけ近いか判断する基準は、ルールプログラムの内容を変えるたびに自動的に作
成することが出来る。ルールプログラムからゲームに勝利するための勝敗を決する効果を探索する。探索したルールから新しく勝利評価条件を作成して記憶していく。勝利するための条件を探索したら、さらに勝利評価条件を展開していく。状態の値が勝利評価条件を満たすための範囲を確認する。状態の値を勝利評価条件の範囲内に満たすように変化させる効果を持ったルールを探していく。探しだしたルールの条件を、勝利評価条件として記憶していく。これを繰り返すことで、勝利するための条件を系統的に列挙していく。
【００２２】
コンピュータの思考は、可能な操作すべてに対して評価を行い、最終的に最も評価が高いと考えられる手を最善手とするのが基本となる。この評価を行う判断基準が請求項４で作成したものになる。一定の評価基準ではなくルールプログラムから作成するので、ルールプログラムを変更すれば判断基準も変わる。だからルールの設計を、コンピュータが思考するパターンや基準を作らなくても行うことが出来る。
【００２３】
ルールプログラムの展開は、記述を減らして設計や編集を容易にするためのものある。コンピュータが、左右を入れ替えたもう一つのルールを複製する「左右対称ルール」、あらかじめ定義してある内容を呼び出して利用する「マクロ処理」、勝利にどれだけ近いか判断する基準をルールごとに自動的に作成する「勝利評価条件」に関して展開を行っている。
【００２４】
勝利評価条件の展開する際、ルール中の「状態の値を勝利評価条件の範囲内に満たすように変化させる効果」や「展開した勝利評価条件として記憶する条件」で演算文に使用できる条件は一種類になる。
効果に複数の状態の種類を持つ演算文があれば、「状態の値を勝利評価条件の範囲内に満たすように変化させる効果」ではないと判断させる。また、条件に複数の状態の種類を持つ演算文があれば、「展開した勝利評価条件として記憶する条件」ではないと判断させる。
演算文に複数の状態の種類があった場合、状態が不動点になると、それ以降ルールが発火して変わらない有利とも不利ともいえない状態なので、勝利評価条件の範囲内に満たすように変化させる効果の探索が出来なくなる。不動点解析をした上で勝利評価条件にならないようにしてもよいが勝利評価条件が複雑になる。
また、状態が条件に近づくか離れるかは、部分式の計算結果で異なるようになる。部分式が条件に近づく計算結果になる条件を導いて勝利評価条件を展開してもよいがこれも勝利評価条件が複雑になる。
だから、高速化をはかるために演算文に複数の状態の種類がある代入は勝利評価条件の展開には使用しない
【００２５】
ユーザーとCPUが互いにコマンド入力を行った際の手順すべてを展開して、その中から自分が勝利出来る手順だけを記憶する。その結果、ゲームについて内容や戦法や勝ち方がどのようになっているかルールから判断出来ずに、何からすべきか分からない時に、勝つための手順を確認することが可能になる。また、ルールの設計する際ために、現在のルールがどのような内容かについて確認する時、表示された勝ち筋から現在のルールならば勝つための手順はどのようになるか確認して、ルールを作り直す参考に出来る。どのようにすれば勝てるか、という観点からルールの中身を確認する際に、勝ち方が分からないまま実行してみて、動かす前に確認しておくことが出来る。
【実施例】
【００２６】
本発明の一実施例による格闘ゲームについて、図を参照して説明する。
【００２７】
図４、ルールプログラム例１を示す。例１の内容は、「コマンド[押す]で、相手の後ろ余裕度を10から0に1ずつ減らしていく」、「相手の後ろ余裕度を0にして[押す]と勝ち」である。
【００２８】
例１について各行毎の意味は、１行目が、「初期状態について、人間とCPUの状態“後ろ余裕度”は、初期値が10である。」、２行目が、「条件なしで、コマンド[押す]を使えるようにする。」、３行目が、「コマンド[押す]で、相手の後ろ余裕度を１減らす。」、４行目が、「相手の“後ろ余裕度”が0以下の時、コマンド [押す]を実行すれば勝利する。」である。
【００２９】
「!:h.後ろ余裕度=10,c.後ろ余裕度=10」について、“!:”は初期状態、初期コマンドを表す。初期状態、初期コマンドは、ゲーム実行直前に状態の値がどうなっているか、コマンドが有効か無効かを示す。初期状態は、“,”で「h.後ろ余裕度=10」と「c.後ろ余裕度=10」の２つに分けられる。
【００３０】
「Ａ：状態Ｐ 記号 値」という記述なら、「条件Ａを満たせば、状態Ｐを記号の通り値の分だけ計算する。」という意味になる。「精神力ー1」ならば、「精神力を1だけ減算する」という意味になる。「精神力==0」は条件ならば、「精神力が0の時」という意味になり、「精神力=0」は効果ならば、「精神力を0にする」という意味になる。
【００３１】
「[コマンドＸ]：Ｂ」という記述なら、「コマンド[Ｘ]を実行すれば、効果Ｂが発揮される。」という意味になる。「[コマンドＸ],[コマンドＹ]：Ｂ」という記述なら、「コマンド[Ｘ]、コマンド[Ｙ]と連続で実行すれば、効果Ｂが発揮される。」という意味になる。
【００３２】
「Ａ：状態Ｐ 記号 値」という記述なら、「条件Ａを満たせば、状態Ｐを記号の通り値の分だけ計算する。」という意味になる。「精神力ー1」ならば、「精神力を1だけ減算する」という意味になる。「精神力=0」は条件ならば、「精神力が0の時」という意味になり、効果ならば、「精神力を0にする」という意味になる。
【００３３】
「Ｓ.」、「Ｏ.」はそれぞれ自分と相手を表し、人間のターンなら相手はＣＰＵに、ＣＰＵのターンなら相手は人間になる。
【００３４】
「S.勝利」は、自分の状態「勝利」にする効果である。例１は、「相手の“後ろ余裕度”が0以下にして,コマンド [押す]を実行する」のが勝利条件になる。
【００３５】
図５、ルールプログラム例2を示す。例２の内容は、例１に、状態“精神力”を追加したもので、「コマンド[押す]は精神力が0より大きいときのみ使える」、「“精神力”は増え続け、999まで増えると-999になる」である。
【００３６】
例２について各行毎の意味は、１行目が、「精神力が1ずつ増え続ける」、２行目が、「精神力が1ターンに1ずつ増え続ける」、３行目が、「精神力が10ターンに1ずつ増えり続ける」、４行目が、「精神力が999まで増えると、-999になる」、５行目が、「コマンド[押す]を実行すれば、相手の状態”後ろ余裕度”を１減少させる。」、６行目が、「相手の状態”後ろ余裕度”が０以下のとき、コマンド[押す]を実行すれば、自分は勝利する。」、７行目が、「自分の精神力が0より大きければ、コマンド[押す]は有効になる。」、８行目が、「自分の精神力が0より小さければ、コマンド[押す]は無効になる。」、９行目が、「人間とCPUの状態“後ろ余裕度”は、初期値が-999である。」になる。
【００３７】
”@”の記述は、その行が何ターンに１回処理されるかを表す。「@Ｘ/〜」ならば、Ｘターンに１回処理される。「@〜」または、@が無い行は、1ターンに最大1回処理される。
【００３８】
図６、ルールプログラム例３を示す。例３の内容は、「 [左マワシ取る]、[右マワシ取る]で左右のマワシ取った状態にする」、「 左右のマワシ取って、[投げる]と勝ち」である。
【００３９】
「':」の記述は、その行がキー入力の設定を表す。「C=[投げる]」と記述すれば、「キーボードからCを入力して、コマンド[投げる]が有効ならば実行出来る」となる。大文字はShiftキーを使う。
【００４０】
「!S.左マワシ取った:[左マワシ取る]」の意味は、「自分の状態”左マワシ取った”になったtrueの時、コマンド[左マワシ取る]が使えないようになる」であり、「S.左マワシ取った:![左マワシ取る]」の意味は、「自分の状態”左マワシ取った”になったfalseの時、コマンド[左マワシ取る]が使えるようになる」である。
【００４１】
「条件::効果」は、「::の左に書いてある条件が一つでも偽なら::の右に書いてある効果と逆の論理（コマンドが有効なら無効とし、無効なら有効）となる。「!S.右マワシ取った＝＝[右マワシ取る]」の意味は、「自分の状態”右マワシ取った”になったtrueの時、コマンド[右マワシ取る]が使えないようになると」、「自分の状態”右マワシ取った”になったfalseの時、コマンド[右マワシ取る]が使えるようになる」であり、「!S.右マワシ取った:[右マワシ取る]」と「S.右マワシ取った:![右マワシ取る]」を合わせた意味を持つ。
【００４２】
ＣＰＵのレベルは、”~”と記述された行によって、「割り込み周期、コンピュータ処理間引き率、読み深さ、読み間違い率」で調整される。「~P50,S3,D1,E0」ならば、「互いに手を打つ時間は1ターンで50msであり、思考する先読みの深さは3手であり、手を間引く確立Xb分の一のXは１であり、コンピュータが最善手以外を使うのは10手中で0手である」。
【００４３】
図７、ルールプログラム例４を示す。例４の内容は、例３に左右対称ルールと有利条件を追加したもので、「右を左に、左を右に入れ替えたルールを複製する。」、「“右マワシ取った”よりも“左マワシ取った”のほうが評価は高いと設定する」である。
【００４４】
「%」の記述は、”％”から”｝”までの記述が有利条件の処理であることを表す。評価関数の値の計算に使われる。「%0.6{S.左マワシ取った:100｝」なら、２行目から４行目までが有利条件の記述になる。
【００４５】
「&」の記述は、”&”から”｝”までの記述が左右対称ルールの処理であることを表す。
右を左に、左を右に入れ替えたもう一つのルールとして「｛  ｝」内の行が複製される。例4
は、「[左マワシ取る]:S.左マワシ取った,!O.右マワシ取った」が、「｛  ｝」内なので
、「[右マワシ取る]:S.右マワシ取った,!O.左マワシ取った」が複製され、2行分の意味を
表す。
【００４６】
図８は、ルールプログラム例５を示す。例５の内容は、「マクロ処理で、コマンド [攻撃]を、コマンド[殴る]とコマンド[蹴る]として展開して使用できる」である。
【００４７】
”$”の記述は、「｛  ｝」内の行がマクロ処理で展開する内容だと表す。「[攻撃]:[殴る];[蹴る]」なら、コマンド [攻撃]を、コマンド[殴る]とコマンド[蹴る]として展開する。「S.体力>0:[はたく],[攻撃]」というルールがあれば、「S.体力>0:[はたく],[殴る]」と「S.体力>0:[はたく],[蹴る]」に展開されて使用される。このとき、コマンド[攻撃]は、コマンド[殴る]とコマンド[蹴る]に展開されるとき使用され、実行時には使用出来ない。
【産業上の利用可能性】
【００４８】
いろんなルールを作ることで、子供、女性、高齢者など一般の人が格闘技に親しめるようにする。
【００４９】
ルール次第で、危険動物、暴漢等への対策訓練に使用できる。
【符号の説明】
【００５０】
ルールプログラム
【００５１】
勝利評価条件
【図１】
0006735482.tif 000002
【図２】
0006735482.tif 000003
【図３】
0006735482.tif 000004
【図４】
0006735482.tif 000005
【図５】
0006735482.tif 000006
【図６】
0006735482.tif 000007
【図７】
0006735482.tif 000008
【図８】
0006735482.tif 000009