コンピュータゲームの仕組み

高大連携講義
担当:総合情報学科 マッキン ケネスジェームス
事前設定: Java開発環境について

目的

  1. 基本的なコンピュータ・アクション・ゲームの原理を学ぶ
  2. Java言語による、基本的なアクション・ゲームのソースコードのコンパイル、実行を体験してみる

概要

準備

  1. まずWindowsへログオン。パスワードの入力間違いに注意
  2. Webブラウザ(Internet Explorer)を立ち上げよう
  3. この講義のページを開く( http://www.edu.tuis.ac.jp/~mackin/kodai/ )
  4. USBメモリを使用する場合、USBメモリをPCに挿入しよう
  5. コマンドプロンプトを起動 (スタート -> すべてのプログラム -> コマンドプロンプト)

作業フォルダ準備

  1. (コマンドプロンプトで)作業フォルダの移動
    USBメモリ利用の場合は「g:」、USBメモリを利用しない場合は「z:」(z:が存在しない場合はd:)

    g:


コンパイルと実行

まず、説明の前に本日の題材のゲームを実際動かしてみよう。
  1. ソースコード(プログラムの元)とライブラリを保存(学内のみ)

    以下のリンクを右クリックして、「対象をファイルに保存」を選択
    (保存場所は、USBメモリを利用の場合は「g:\」、利用しない場合は「z:\」)
    プログラムソースコード Invader.java (ファイルの拡張子が「.java」であることを確認すること)
    グラフィックライブラリ basic.jar (ファイルの拡張子が「.jar」であることを確認すること)

  2. (コマンドプロンプトで)ファイルが正しく保存されているか確認しよう。

    dir


    Invader.java basic.jar の二つのファイルが表示されたでしょうか?


  3. ダウンロードしたファイルの中身をちょっと見てみましょう。

    type Invader.java
    なんだか英語の記述がたくさん表示されました。

  4. さあ、(コマンドプロンプトで) コンパイル。コンパイルとは、「作り上げる」という意味です。長いけど打ち間違えないように。

    javac -cp basic.jar;. Invader.java

  5. お待ちかねの(コマンドプロンプトで) 実行

    java -cp basic.jar;. Invader
    [ Enter ] でゲーム開始
    [ a ] または [ j ] で砲台を左に移動、[ d ] または [ l ] で砲台を右に移動、[ スペース ] でミサイル発射
    ウィンドウ右上の「×」ボタンでゲーム終了

  6. 何が起きているの?

アニメーションの原理

入力

インベーダの方の座標はループごとに固定量更新されているため、自動的に動いて見えます。
プレイヤーキャラクタは、ユーザからの入力により座標を更新すれば、 ユーザが操作したように見えます。
入力とは、キーボードやジョイスティックなど入力装置からの信号のことです。
ここでは、キーボードを入力とし、押したキーによって、プレイヤーキャラクタの「自動的」な動作に変化を付けることができます。

//プレイヤー操作
//ユーザキー入力
key = g.inkey();
if((key == 'a' || key == 'j') && x > 0){
    …

あたり判定

ミサイルがインベーダに当ったかどうか等の「あたり判定」は、 ミサイルとインベーダの座標を保持する変数の比較で行います。
つまり、ミサイルの座標とインベーダの座標が一致する場合、ミサイルがインベーダに 「あたった」ことになります。

if(missile_x == alien_x && missile_y == alien_y){
//ミサイル命中
    …

カスタマイズ

さあ、自分でプログラムを修正してみよう。失敗してもやり直せば良いので怖がらずに。
  1. (コマンドプロンプトから) メモ帳を起動してソースコードを開いてみよう。

    notepad Invader.java

  2. メモ帳でソースコードを修正してみよう。
  3. ソースコードの保存をしよう。

    メモ帳のメニューバーから「ファイル(F)」→「上書き保存(S)」

  4. (コマンドプロンプトで) コンパイル。

    javac -cp basic.jar;. Invader.java

  5. (コマンドプロンプトで) 実行。

    java -cp basic.jar;. Invader

  6. うまくいったかな?何度でも挑戦しよう。
    (ソースコード修正 -> ソースコード保存 -> コンパイル -> 実行 を繰り返す)

まとめ

コンピュータ・アクション・ゲームの基本原理
  1. 目の残像現象によるアニメーション
  2. ループによる繰り返し
  3. 変数による座標管理とあたり判定
  4. ユーザ入力(キーボード/ジョイスティック)による変数変更
プログラミング言語(Java言語)の基本原理
  1. 人間の読めるソースコードを作成する。
  2. ソースコードをコンピュータが理解できるように翻訳(コンパイル)する。
  3. 翻訳(コンパイル)した結果をコンピュータで実行する。
最後に、USBメモリの停止と取出し、ログオフ/シャットダウンを忘れずに。

おまけ

ギャラクシアン風 Galaxian.java 右クリックして「対象をファイルに保存」 [学内のみ]
レースゲーム Racing.java 右クリックして「対象をファイルに保存」 [学内のみ]
カラー版レースゲーム Racing2.java 右クリックして「対象をファイルに保存」 [学内のみ]
アナグリフ3Dインベーダー Invader3D.java 右クリックして「対象をファイルに保存」 [学内のみ]
追いかけゲーム Chase.java 右クリックして「対象をファイルに保存」 [学内のみ]
シューティングゲーム Shooting.java 右クリックして「対象をファイルに保存」 [学内のみ]
シューティングゲーム2 Shooting2.java 右クリックして「対象をファイルに保存」 [学内のみ]
おためしApplet [学内のみ]
Basic Graphicsについて