SyntaxHighlighter

2012年4月8日日曜日

パラメータ化できるものはランダムに出来る

ランダムで作る意味とはなんだろうか。

ダンジョンを、アイテムを、キャラクタを、ランダムで生成する。

【メリット】
・プレイするたびに変化するため、繰り返しプレイに向く
・(製作側の)変更が容易

【デメリット】
・製作側がプレイヤーの状態を予想しにくい
・ゲーム性が損なわれる可能性がある
・バランスの調整が難しい


娯楽の最も贅沢な形は「実際に体験すること」。
もっとも固有な情報が得られるが、費用が高い。
次点で贅沢なのは、現状では映画。
でも、映画は参加できない。
視聴者それぞれが異なる、映画のような質の体験をさせるには費用がかかりすぎる。

ゲームが出力しているのは映像だ。
しかし、ゲームの体験の質は一般的には映画よりも低い。
もちろん薄まっているようで、完成度・中毒性の高いものは存在するが、情報量が多くないのは否定できない。

一本道のゲーム(FF13とか?)というのは映画とゲームの中間だ。
ゲームの中に映画のメリットを組み込める。
製作者が意図した展開、興奮、演出を作りやすい。

一本道のゲームの感動をランダムに生成できないだろうか?
一本道のゲームを軽んじているわけではない。
でも、本質を理解できれば原理的には可能だ。
結局のところ素材を自動生成して再生するだけだ。
実現したら毎日違ったリッチなゲームを楽しめる。
でも、現状ランダムで面白い物語が作る方法を発見した人を知らない。
物語論はまだそこまで進んでないと思う。
一から取り組むなら、もう少し簡単な課題にすべきだ。

ランダムで生成してもゲームバランスが崩壊しないようにすることはできないだろうか。
繰り返しプレイしてもらって、フィードバックを得て改良するのも良いかもしれない。
でも、もっと手作業を減らして、本質を理解して、簡単に出来ないだろうか。

難易度を考えてみる
(正しい選択肢の割合)=(正解の選択肢の数)/(全ての選択肢の数)
(正解に気付く確立)=(正しい選択肢の割合)*(正解の気付きやすさ)
(難易度)=(正解に気付く確立)*(正しく入力できる確率)

だめだ、曖昧だ。

でも、ゲームバランスジェネレーターは作りたい。
多分作ったらゲームそのものより価値がある気がする。
ゲーム無料で公開して、プレイデータ収集して遊ぶのも楽しそうだ。

大事なのはデータだよな。
データを集める手段を考えよう。

時を操る程度の能力

最適化の思わぬ副産物。

戦闘の情報をScene(場面)とStream(流れ)に分割した。
通常プレイヤーが見るのはSceneを1秒間に60個描画した画面。
だいたい、1FにScene1個が対応するんでいいと思う。

Scene同士を適当に関連付けたのがStream。
普通は作成された順に並んだSceneがStreamを形成する。
Sceneは使い捨てるのが普通なので、Streamはゲームには必須ではない。
でもこれが意外と便利。

例えばAIが「ある時点のSceneを元に思考する」ということが簡単に可能になる。元々組んでいたAIシステムだと、その時点の情報を元に判断するか、ある時点の情報をAI自身が保存しておくしかなかった。
でも、Streamによって全AIが記憶を共有できるようになる。
理不尽な挙動のAIへの罠でもある。
また、これによってAIの遅延評価も可能になる。認識できないキャラクタは別にリアルタイムで計算する必要もなく、必要になったら今まで計算してた風に表現すればいい。
メモリが大量にあって、CPU資源が足りない状況なら有効だと思う。

あと、過去の世界に簡単にアクセスできるようになったので、プレイヤーは時を操ることが出来るようになった。この概念は非常にエキサイティングなんだけど、どうやってゲームにするんだよっていう。ある時点でタイムポータルみたいなの設置して、それ以降は過去に簡単にアクセスできるとかでもいいけど、それって面白いのだろうか。自分がいない過去が勝手にStreamされていくのは面白いかもしれない。遅延評価ならメインのゲームに影響与えずに実装できそうだから試してみようかな。

【追記】
・刺し穿つ死棘の槍なんかも実装できますね
・キャラクタを逆再生もできるか
・意外と面白いかもしれない

2012年4月4日水曜日

だが、A君の前にはさらなる絶望が待ちかまえている

連載:[完全版]究極のC#プログラミング
この川俣晶さんの連載がとてもためになってありがたいのだけど、時々、というかわりと頻繁に胸にナイフ刺してくるのが辛い。

少し休む

ブログタイトルそっちのけで、前日に書いたことをまだ続けている。
思ったより学ぶことが多い。
学んだ先に見える果実がとても美味しそうなので非常にモチベーションが高い。

学んでもどうせその場しのぎでしか役に立たなそうなものでも、今は積極的に使って行きたい。まずは目の前の問題を解決したい。学んだことは決して無駄にならないと思いたい。
C++を学んで、DxLibとBox2Dの使い方覚えて、C#の色々なライブラリ・ツール群を使い始めている。多分これからは言語を学ぶのではなくて、ライブラリを学ぶ時代になると思う。新しいライブラリは長いサポートを受けられる保障は無いし、使い込まれたものに比べて資料も乏しい。それでも積極的に使っていった方が、物事が早く解決すると思う。未知の領域のツールってちゃんと使い始めないと「それで何が出来るか」がつかめない。多分経験が足りない。あと、大した根拠は無いけど、C++の標準ストリームは「これはダメだな」と思わせる何かがあった。

低レベルなものを大事にしないとかそういう問題ではないと思う。

というわけで、LINQ to SQL使います。
これが何に使えるか分からないけど。

2012年4月3日火曜日

C#でカバーできる範囲はC#のほうが優秀だと思う

既に使いやすい形で欲しいものが揃ってるし、ControlとSpace押してれば勝手にコードが生成される。Emacs使わなくてもHHK使っててよかった、ってなる。あとUnicode。

でも、多分ゲームはC++で書く。
でも、早い段階で気付けてよかった。

マルチスレッド関係の進捗とか

思ったより効果無さそうなのでやる気なくしてる。
普通に計算量減らすこと考えたほうが何倍も効率よさそう。

休日に一気読みした『グーグル ネット覇者の真実 追われる立場から追う立場へ』にものすごく影響を受けた。もっと機械にやらせよう。その場しのぎのパッチじゃなくて、もっと良い方法を考えよう。

テキスト処理が面倒

慣れてないせいもあるけどC++でのテキスト処理は面倒だと思う。

C#で調べながら書くのめんどくさい

C++で欲しいもの一気に書く

細かいところで手続きが抽象化されてなくてだれる

はじめから.Net使ってたほうが早かったかも

習得コストを過大評価して無闇に逃げてはいけないな。
というか、言語で選ぶのナンセンスとか言えるようにならないと。
機能で選ぼう。


あと、時代の先端を行ってそうな人がWindows(Microsoft)はダメみたいな発言するの良く見るけど、ライブラリの資料とかめちゃくちゃ充実しててアクセスし易いし、プログラミング始めてからWindowsが有り余る金(?)で作り上げた王国の巨大さに感動してて、Microsoftはすごいと実感している。
GoogleとかMSとか明らかに独占企業だけど、邪悪にならなければ、そのまま独占してもっと便利なもの下々に垂れ流してくれればいいと思う。