コンピュータゲームの仕組み
高大連携講義
担当:総合情報学科 マッキン ケネスジェームス
事前設定: Java開発環境について
目的
- 基本的なコンピュータ・アクション・ゲームの原理を学ぶ
- Java言語による、基本的なアクション・ゲームのソースコードのコンパイル、実行を体験してみる
概要
- (出席確認)
- 概要説明
- 準備(ログオン,USBメモリ挿入,Webブラウザ,コマンドプロンプト)
- 休憩
まだまだ、やっと準備が整っただけだ!
- 作業フォルダ作成,フォルダ移動,ソースコード保存,メモ帳
- コンパイル,実行
- アニメーションの原理,繰り返し,セル画の移動,変数の説明
- 休憩
ちょっと頭が痛い?もう少しだ!
- ユーザ入力,変数の比較
- カスタマイズ(色,表示文字,スピード,点数,etc.)
- カスタマイズ版ソースのコンパイル,実行
- まとめ
準備
- まずWindowsへログオン。パスワードの入力間違いに注意
- Webブラウザ(Internet Explorer)を立ち上げよう
- この講義のページを開く( http://www.edu.tuis.ac.jp/~mackin/kodai/ )
- USBメモリを使用する場合、USBメモリをPCに挿入しよう
- コマンドプロンプトを起動 (スタート -> すべてのプログラム -> コマンドプロンプト)
作業フォルダ準備
- (コマンドプロンプトで)作業フォルダの移動
USBメモリ利用の場合は「g:」、USBメモリを利用しない場合は「z:」(z:が存在しない場合はd:)
g:

コンパイルと実行
まず、説明の前に本日の題材のゲームを実際動かしてみよう。
- ソースコード(プログラムの元)とライブラリを保存(学内のみ)
以下のリンクを右クリックして、「対象をファイルに保存」を選択
(保存場所は、USBメモリを利用の場合は「g:\」、利用しない場合は「z:\」)
プログラムソースコード Invader.java (ファイルの拡張子が「.java」であることを確認すること)
グラフィックライブラリ basic.jar (ファイルの拡張子が「.jar」であることを確認すること)
- (コマンドプロンプトで)ファイルが正しく保存されているか確認しよう。
dir

Invader.java basic.jar の二つのファイルが表示されたでしょうか?
- ダウンロードしたファイルの中身をちょっと見てみましょう。
type Invader.java
なんだか英語の記述がたくさん表示されました。
- さあ、(コマンドプロンプトで) コンパイル。コンパイルとは、「作り上げる」という意味です。長いけど打ち間違えないように。
javac -cp basic.jar;. Invader.java
- お待ちかねの(コマンドプロンプトで) 実行
java -cp basic.jar;. Invader
[ Enter ] でゲーム開始
[ a ] または [ j ] で砲台を左に移動、[ d ] または [ l ] で砲台を右に移動、[ スペース ] でミサイル発射
ウィンドウ右上の「×」ボタンでゲーム終了
- 何が起きているの?
アニメーションの原理
- 目の残像現象と錯覚現象を利用したセル画の移動による動画
- プログラム上のループによる繰り返し (Invader.java)
//メインループ
while(!game_over){
…
}//end while(!game_over)
- 変数による描画座標の管理
//インベーダ再描画
g.locate(alien_x,alien_y);
g.color(g.MAGENTA, g.BLACK);
g.print("Ж");
入力
インベーダの方の座標はループごとに固定量更新されているため、自動的に動いて見えます。
プレイヤーキャラクタは、ユーザからの入力により座標を更新すれば、
ユーザが操作したように見えます。
入力とは、キーボードやジョイスティックなど入力装置からの信号のことです。
ここでは、キーボードを入力とし、押したキーによって、プレイヤーキャラクタの「自動的」な動作に変化を付けることができます。
//プレイヤー操作
//ユーザキー入力
key = g.inkey();
if((key == 'a' || key == 'j') && x > 0){
…
あたり判定
ミサイルがインベーダに当ったかどうか等の「あたり判定」は、
ミサイルとインベーダの座標を保持する変数の比較で行います。
つまり、ミサイルの座標とインベーダの座標が一致する場合、ミサイルがインベーダに
「あたった」ことになります。
if(missile_x == alien_x && missile_y == alien_y){
//ミサイル命中
…
カスタマイズ
さあ、自分でプログラムを修正してみよう。失敗してもやり直せば良いので怖がらずに。
- (コマンドプロンプトから) メモ帳を起動してソースコードを開いてみよう。
notepad Invader.java
- メモ帳でソースコードを修正してみよう。
- ソースコードの保存をしよう。
メモ帳のメニューバーから「ファイル(F)」→「上書き保存(S)」
- (コマンドプロンプトで) コンパイル。
javac -cp basic.jar;. Invader.java
- (コマンドプロンプトで) 実行。
java -cp basic.jar;. Invader
- うまくいったかな?何度でも挑戦しよう。
(ソースコード修正 -> ソースコード保存 -> コンパイル -> 実行 を繰り返す)
まとめ
コンピュータ・アクション・ゲームの基本原理
- 目の残像現象によるアニメーション
- ループによる繰り返し
- 変数による座標管理とあたり判定
- ユーザ入力(キーボード/ジョイスティック)による変数変更
プログラミング言語(Java言語)の基本原理
- 人間の読めるソースコードを作成する。
- ソースコードをコンピュータが理解できるように翻訳(コンパイル)する。
- 翻訳(コンパイル)した結果をコンピュータで実行する。
最後に、USBメモリの停止と取出し、ログオフ/シャットダウンを忘れずに。
おまけ
ギャラクシアン風 Galaxian.java 右クリックして「対象をファイルに保存」 [学内のみ]
レースゲーム Racing.java 右クリックして「対象をファイルに保存」 [学内のみ]
カラー版レースゲーム Racing2.java 右クリックして「対象をファイルに保存」 [学内のみ]
アナグリフ3Dインベーダー Invader3D.java 右クリックして「対象をファイルに保存」 [学内のみ]
追いかけゲーム Chase.java 右クリックして「対象をファイルに保存」 [学内のみ]
シューティングゲーム Shooting.java 右クリックして「対象をファイルに保存」 [学内のみ]
シューティングゲーム2 Shooting2.java 右クリックして「対象をファイルに保存」 [学内のみ]
おためしApplet [学内のみ]
Basic Graphicsについて