自動車制御実験

自動車制御実験という授業を担当しています。

今日は先日紹介したマイコンカーの分解の1日目です。コンピュータの学校でこういうことをしているのは珍しいかもしれません。

本日の作業はここまでです。

本日の作業終了

comments

ゲームプログラマになるには(6)

今日は少しプログラムから離れてクソゲーの話。

「クソゲー」という言葉があります。ゲームの紹介をする授業を担当したとき,反面教師として,というかネタとして,そんなゲームを買い集めた時期がありました。どんなゲームであろうと,ひとたび世の中に出るほどのゲームであるから,ゲームを作った人はきっと命を削る思いをして作り上げただろうに,クソとは何ごとか!と思わないでもないのですが,つい,興味の赴くまま買ってしまいました。

たいていの場合,クソゲーは操作性が悪いのです。見たとおりに動かない。区別すべき敵味方が良くわからず,自分がやられたかどうかすらわからない。基本的な部分でこのようなストレスがかかるとすぐにやる気がうせてしまいます。よいゲームはごく最初は戸惑っても,少しずつなれれてきてやりこむと指の動きがキャラクターと一致してるような,大げさに言えば自分の身体の延長になったかのような気にさせるものですが,そんな気すらさせないうちにあきらめてしまう。考えてみると,
簡単すぎでもなく難しすぎでもなく,
時々壁に当たり乗り越えるとさらなる達成感が待っている
というような要素の基本となるのはヒューマンインタフェースがよいことと思います。逆にココがダメだとルールがどうだとかグラフィックスがきれいかどうかとか言う以前に「クソゲー」になってしまうのでしょう。

私が京都コンピュータ学院に来たてのころに,アメリカの大学と単位互換な「対話型システム」という名前の授業(元はHuman Computer Interaction,直訳すると人間と計算機の相互作用)を担当したのですが,いろいろ勉強するうちに,ゲームはヒューマンインタフェースの最先端なのだと思いました。よいゲームとは何かを考えてみるとき,ヒューマンインタフェースの勉強は役に立つと思います。

 

comments

ゲームプログラマになるには(5)

前回は絵柄を変えるアニメーションの話しをしました。次は移動のアニメーションの話しをしましょう。

時間とともにモノの位置が変わるというのは動きの基本です。ゲームを形作るプログラムの骨格が,一定時間(例えば1/30秒)ごとに画面を書き換えるようなループになっている場合,毎回の描画タイミングごとに一定量だけ動かせば,等速直線運動になります。繰返しごとに,例えば,板のx座標を1増やし,y座標を1増やすと板は等速直線運動します。
x=x+1;
y=y+1;
この1と書いたところを両方とも2にすれば倍の速度になります。このx座標とy座標の変化量を様々な数で組み合わせると様々な方向に移動します。ある領域を設定して移動量を正負逆転すれば往復運動をしたりします。

ただ,シンプルなのはこれまでで,重力を考慮した移動や,ぐるぐる回るような移動は,少し,物理の知識が要ります。ただ,簡単な2Dアクションゲームの場合は,何コマ分かの移動を表にしてそれを参照することで運動を実現するということが行われます。例えば,20フレームで必ず画面から出てしまうような移動ならば,x座標とy座標を20個分記憶する配列を用意してそこにあらかじめ計算しておいた数値を記憶しておき,ゲーム中に参照すればよいわけです。

3Dになってからは質点の運動学の知識が必要になるのですが,一度物理的な意味をきちんと理解したうえで,パターン化してしまえばなんとかなると思います。物理のシミュレーションはつきつめると
・位置の時間的変化が速度
・速度の時間的変化が加速度
であり,ゲームループでは
・加速度から速度を計算し,
・速度から位置を計算する
ということを繰り返す,ということさえ知っていればよいのです。例えば,等加速度運動は1次元の運動であれば
v=v+1;
x=x+v;
というようなものです。繰り返すごと速度に相当するvが一定の値1だけ増えます。

…今回は少し,あるいはかなり難しかったかもしれませんね。でも,アクション系のゲームを作るときは同じ原理で出来るのでがんばってみてください。

comments

ゲームプログラマになるには(4)

2Dグラフィックスの基礎を覚えたら,絵をはりつけた板を並べるようなタイプのゲームはすぐ出来ると思います。次はアニメーションの話しです。2Dのアニメーションは大きくわけて2つあり,絵柄を変えるアニメーシヨンと移動するアニメーションがあります。

今回は,絵柄を変えるアニメーションの話ししをしてみましょう。15パズルなどを作るとき,絵柄を変えるのですが,時間の経過に合わせて絵柄,本質的には絵の番号を選ぶことができればよいです。一定時間ごとになにかするにはタイマーいうものを使うか,もともとゲームループといって1秒間に30回描画するループであればそのループ回数のカウントを使うことになります。とにかく,例えば1/10秒ごとに何かする段取りが出来たとすると,絵柄を0番目,次は1番目,次は2番目のように変えていければよいです。4枚の絵を繰返し表示するならば
0→1→2→3→0→1→2→3→…
という番号のくりかえしになります。これは
0→1→2→3→4→5→6→7→…
という繰返しのカウントを4で割った余りになります。mod,C言語では%演算子なのですが,剰余の計算が役立ちます。ついでに毎コマで無く3コマごとにするのは整数の割り算です。
1/30秒ごとに処理するとし,繰返しカウントをcountするならば1/10秒ごとに0から3までの絵の番号iを計算する式は次のようになります。
i = ( count  /  3 ) % 4; 
ちょっと難しいかもしれませんが,本質的には整数の割り算と余りなので,ゆっくり考えれば納得できると思います。そして一度この式が分かってしまえば,何枚の絵の繰返しアニメーシヨンでも自在にできるようになります。プログラム言語を学習するとき,剰余を何に使うのかと思うことがあるかもしれませんがこういうところで役立ちます。

ゲームプログラマになるには数学の知識が必要では思われるかもれませんが,このように繰返しアニメーシヨンをさせたいときに,割り算と余りを知っていれば,このような計算ができます。初めは難しいかもしれませんが,一度じっくり考えて納得してしまえば,あとはうまくいった式を使いまわせばよいのです。

AW

comments

ゲームプログラマになるには(3)

昔は文字だけのコンピュータゲームがありました。ポケコンを買ったときに,ポーカーとか月軟着陸ゲームとかサンプルであった記憶があります。(オリジナルの)ローグのようにテキストでかなりのことも可能です。が,やはりグラフィックが必須です。

簡単に言うと一枚の板に絵を貼り付けたものがスプライトで,そのスプライトを一定時間ごとに表示するというのが2Dゲームの基本です。1枚スプライトを表示することを覚える。その表示位置の変え方を覚える。貼り付ける絵の変え方を覚える。ここまでいくとかなりのことができます。私はネットやろうぜ!の授業を担当したときは,ここまでできたら,スプライトを4×4個並べて15パズルを作りました。コマの移動はコマでなく空きを移動すると考えればよく,アガリの状態をチェックするのはそれほど難しいことではありません。コマが移動するアニメーションは後につけられるようになりましたが,瞬間的に絵柄が変わるだけでもゲームとして成立します。

簡単な15パズルができたら,見かけが似たゲームを作ることが出来ます。私は,マインスイーパー(もどき)や,リバーシを作りました。だんだんアルゴリズムが難しくなります。もちろん,リバーシはプレイヤー2人で交代でやるAIなしのものですが…。(簡単化した)テトリスも作りました。

もし2Dグラフィックの基礎をおぼえたら,ぜひ15パズル,マインスイーパー,リバーシ,テトリスを作ってみてください。

comments

ゲームプログラマになるには(2)

ゲームのプログラマになるのに,とりあえずC++の勉強をします。C++そのものは入力も出力もテキストのみのコンソールプログラムを対象としています。したがって,ゲームとは程遠い感じがするかもしれませんが,グラフィックにかかわらない本質的な部分を学ぶことはできます。

結局,コンピュータゲームは見えるもの見えないものすべて数値化されています。例えば,ジャンケンを作るとするとしましょう。グー・チョキ・パーを数値化しなければなりません。グーを1,チョキを2,パーを3などのように。そしてコンピュータの手を変数comに格納し,プレイヤーの手を変数playerに格納するとします。とにかくこのように決めれば,勝ち負けあるいは引き分けが決まります。comの値が1で,playerの値が2ならコンピュータがグーを出し,プレイヤーがチョキを出したことになり,コンピュータが勝ちということになります。コンピュータについて3通り,プレイヤーについても3通りですから,3×3=9の組み合わせについて勝ち・負け・引き分けがきまります。このように決めれば,コンピュータは例えば一様乱数発生で1から3で手を決め,プレイヤーはキーボード入力で1から3のまでの数の入力をして手を決めるとすれば,ゲームができます。

ここまで準備してプログラミング言語の基本を知っていれば,例えば,次のような見かけの,格好悪いかもしれませんが,次のような文字だけのジャンケンゲームのプログラムができます。

ジャンケンしましょう。
あなたの手を入力してください(1:グー, 2:チョキ,3:パー):2
あなたはチョキ,私はパー。あなたの勝ちです。

本質的には,ゲームに必要なデータを数で表してルールを規定できれば,コンピュータゲームになるのです。

AW

comments

ゲームプログラマになるには

 ゲームプログラマをめざすなら,まずは,コンピュータプログラミング言語を習得する必要があります。ゲームを作るのにさまざまなプログラミング言語が使われますが,C言語かC++言語から始めるのが普通です。CはもともとUNIXというOSのためのプログラミング言語でコンパクトでハードウェアを直接扱うようなプログラムでよく使われます。ゲーム開発では昔はCが使われていましたが最近はオブジェクト指向をとりいれたC++言語の方が良く使われています。京都コンピュータ学院のゲーム系の学科では,まず,C++言語を学びます。一つの言語でなんでもできればよいのですが,実際はC#やJavacなど様々な言語を使うことがあります。CまたはC++から派生した言語がほとんどなのでまずはC++からはじめるわけです。

古いし,難しいので有名ですが,本格的なプログラマを目指すならば,ぜひCの原典の本を読んでもらいたいと思います。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

 

comments

ネットやろうぜ!

 私が京都コンピュータ学院に来たのは1998年で,ゲーム開発科(2年制)で開講された科目を主に担当していました。私はプログラムはあまりというかほとんどできなかったのですが,まず,ビジュアルベーシックで,ビデオゲームのプログラムの基礎,つまり,キーボードの状態を調べ,画面を構成するオブジェクトの配置を計算し,描画を指示するという流れを知りました。その後,ネットやろうぜ!(黒いPlayStationを使った開発キット)で,クロス開発の仕方,3Dオブジェクトの扱い,メモリカードの扱いなどを勉強して,関連する授業で教えました。現在からするとPSは非常に非力なマシンですが,ゲーム開発の基本は今でも変わりません。私がゲーム開発を指導できるのはこのネットやろうぜ!のおかげですし,黒PSはとても思い出深いマシンです。
※現在,ネットやろうぜ!は授業で使われていません。念のため。

PS PS_books

AW

comments