個人的に、プログラミングはクソゲーじゃないか?疑惑がありました。そんな中で洋ゲーとの共通点に気づいた!という話です!
自由度が高すぎて、何をすればいいかわからない。
そんな風に言われることも多い洋ゲー。
まさにプログラミングも同じだった・・・?。
洋ゲーっぽい、ということ。
このブログがUnityでゲームを作ろう!というテーマだからゲーム関連付けるというわけでもなく、ただただ単純にプログラミングって洋ゲーっぽいなと思っています。
今となっては一般ゲーマーもごく普通に、洋ゲーをプレイする時代になったのかもしれません。
しかし一昔前だと洋ゲーといえば癖が強くて、一部のコアゲーマーがひっそりとやるものだという風潮があったと思います。自分は子供の頃はグロいのは嫌いだったし興味もなかったすね、たぶん出来なかったろうし。
もちろんグロくないのもありますけどね。
スーパードンキコングシリーズとかクラッシュバンディクーとかも洋ゲーといえばそうですし。ここら辺は、子供もできる優れた普遍的なゲームなわけで。
ただしここ数年の洋ゲーは大作系なんかも、とにかく丁寧というかプレイヤーに優しい作りになってますよね。
しかしやはり、とっつきにくい、癖が強い異常に難易度が高い、というのが洋ゲーに対する一般?認識だと思います。
自由度の意味とは。
洋ゲーと言えば、自由度!みたいな風潮があります。
日本に最も影響与えたとされる洋ゲーのひとつにウィザードリィが挙げられると思います。これはファミコンへの移植版が有名です。ドラクエ、FFの原典の一つです。
基本ダンジョンにもぐって攻略を進めるだけ、という点では世界は狭いですが、キャラ作成に関しては自由度が高いです。
ファミコンへの移植の際にグラフィックや音楽面、システム面に関する調整を日本人によって行われていますので、かなりやりやすくなってるらしいです。
この辺はもうチョイ個人的に調べたいところですけどね。ファミコン版については、ここにかなり詳しい解説が!
しかしオリジナルのウィザードリィはやはり癖が強いわけです。
そもそも論で言えば、テーブルトークRPGをコンピュータ上で再現するっというものですから。(なお日本ではウィザードリィは元祖RPGと位置づけられますが、本国アメリカではこれより先にいくつかのRPGゲームは作られていたようです)
テーブルトークRPGは会話とサイコロ、GMとのやり取りで進行していくもののようなので(すいません、素人なんでこんくらいの認識です。)もともとのルーツを辿れば、RPGゲームにおいて自由度というのは切っても切れないものなのだなぁと感じます。
あと洋ゲーのRPGは、オブリビオン等とにかくパラメータが多いですよね。あと重量制限など無駄にリアルというかストレスになりかねない要素も多いです。これは洋ゲーの場合、多分にシミュレーションとしての側面もあるのでしょう。
なおオリジナルのウィザードリィに関して呪文はキーボードを使って手打ちですよ!しかもスペルを間違えたら、詠唱失敗するという!めんどくせえ!でもプログラミングも同じく、一文字でも違えばコンパイラが許してくれませんからね。(Visual Studioでいえばインテリセンスが指摘してくれますが)
ここらへんの無駄に面倒な部分もプログラミングっぽいですね。
自由度の高さとは、つまりどういうことか?プレイヤーは自分で考えて世界を旅しなければいけません。自分で楽しむ術を見つけなくてはいけません。
ここら辺をうまく日本人に受け入れさせてくれたのは、最近だとオブリビオンとかスカイリムとかですかね?自分なんかスカイリムとかまともにメインやりませんからね。好きにそこらへんぶらつくのが楽しいんで。
とにかくそういう洋ゲーが持つ性質をプログラミングも持っているなとすごく思います。
何でも自分で作れる。いや作らねばならぬ。
さてプログラミングに話を移します。プログラミングにおける自由度とは、制約さえなければ自分で解決法を生み出せるという部分でしょうか。と同時に自分自身で考えないといけない部分も多いわけです。
コンピュータがデータを記憶するのに使う器をプレイヤーが用意しなければなりません。そして名前も付けなればなりません。
<変数の宣言。>
問題を解決するための必殺技を作れます。というか自分で作らないといけません。
これもやはり名前は自由に決められます。発動するのに必要な道具も決められますし、無くてもいいです。(引数)
<関数をつくる>
ただあらゆること全部決めるのは大変でしょうから、ある程度の基本的なものは用意してあります!どうぞご活用して自由に世界を旅してください!。
<ライブラリ、APIの存在。>
この共通点に気付いた時ちょっと楽しくなりました!自由度が高くて、癖の強い洋ゲーと思えばいいんじゃん!と。
といっても実際の作業においては、状況に応じて様々な制約が課されている場合がほとんどだと思いますので、まぁそこまで自由というわけではないとは思います。
しかし可能な限り、動きさえすればプレイヤーの思いつくままに組み立てることができるということです。そこらへんを多くの教則本で強調してほしいなぁ。目的地にたどり着くまでには、様々なルートがあり、そのどれを選んでも良いということなのです。
じゃあ例えばどういうことなのか?ということを実際のコードを見ながら考えてみたいと思います。
1から100までの自然数すべての合計を求めよう!
この問題は次のように言い換えることができると思います。
最小値の自然数minから、最大値maxまでの自然数の合計を計算するプログラムとは?
1から100の場合で言えば1,2,3,4,5,6,7,8… 96,97,98,99,100という自然数列を全部足してその合計ですね。
この問題に関しては公式があります。
(min + max) × (max - min + 1) ÷ 2
1から100なら
101 × 100 ÷ 2 = 5050という具合です。
この公式を利用して関数を作るのが手段として正しいのかもしれません。
しかし他の方法もあります。whileループ文を使うことをによって同様の結果を得ることができます。
合計を入れるためのバケツ"sum"を用意します。何も入ってないといけないので0を代入しつつ宣言します(初期化)。
そこにmaxの値を投げ入れては、1引いていきます。100でしたらまず100を次に99を98を!という風にドンドン入れていきます。これをminよりひとつ大きい値まで繰り返すわけです。(ここでは2まで)
while文が終了したら、最後にminの値を加えて終わりです。
公式を使う方がよりスマートなのかもしれませんが、よりコンピュータらしいこの方法が好きですね。この方法を思いついたときは、わりとプログラムできるようになったな!と自画自賛しましたね。
ただし範囲が大きくなると処理時間に差が出てくるかもしれません。公式を使えば計算自体は一瞬(4回の計算)に対し、この方法だと計算をその数の範囲分の加算を繰り返しているわけですからね。でもコンピュータの計算能力はもはや一秒間に数十億回レベルですからね。どうでしょうね。
もし差が出るのであれば、より安定し、速い方を選ぶということになります。
しかし特に制約がないような場合においては、いかなる方法をとっても良いのプログラミングなのだろうなと思います。
自由度の高さを楽しむ!
よく日本人は自由度の高いオープンワールドRPGが苦手、というような風潮があります。何をしていいのかわからない困る、というものです。別に何してもいいんだよ!と言われても・・・。という人が多いのが現状でしょう。
プログラミングも近い部分があると思います。プログラミング言語の文法を覚えたとて、プログラミングを出来るようにはならないからです。
プログラミングに関する最初の罠は、プログラミング言語は道具にすぎず、設計図(解決法)を作るのは、プレイヤー次第ということです。言語だけだとホントに文法というか単純な道具だけなので、APIとかフレームワークも使わなきゃいけない、ということもあります。
でもレゴブロックでは自分の好きなもの勝手に作ってましたよね?あるいはマインクラフトなどのクラフトゲームはどうでしょうか?フォールアウト4でも街作りなど自由にすることができます。それのちょっとめんどくさいヴァージョンだと思えば・・・。
こう考えることでまだ楽しくプログラミングできています。最初はクソゲーだと思いましたけどね。クソゲーではなく、ちょっと癖の強い洋ゲーということで。
なんで洋ゲーが好きな人はプログラミングの適正がある?
ということは言えなくもない!?
自分で引き続き検証してみます!