学園祭展示物:横スクロールシューティングゲーム「SkyRush」公開

2012年度の専門ゼミナールIでは、Pharoによるプログラミング入門を行っています。
今年は横スクロールシューティングゲームに挑戦し、学園祭にて展示発表しました。
2日間の展示に使用したソースの準備ができたので公開いたします。
展示ではKinectを使って自機をコントロールしましたが、Kinectがなくてもゲームが試せるようにKinect無し版も公開します。

公開するファイル

1日目に展示したもの

大森慎司が作成したゲームです。上下左右の矢印キーで自機を操作し、zキーでビームを、xキーでボムを発射します。

2日目に展示したもの

網野理恵が作成したゲームです。zキーでビームを発射します。

Kinect関連ソフトのインストール

Kinectとの接続には、KinectOSCパッケージを利用しています。
KinectOSCパッケージの導入や接続については、以下のページを参考にしてください。

KinectOSCの導入 / Раздан-3の備忘録

インストール方法

ダウンロードした圧縮ファイルの中身をPharoのイメージがあるフォルダに展開し、.stファイルを起動したPharoにドラッグ&ドロップしてInstallするか、ToolsメニューのFile Browserで.stファイルを選び、Installボタンを押してください。
なお、起動時に読み込むため画像ファイルはPharoのイメージがあるフォルダに格納しておいてください。

実行方法

Workspaceを開き、SkyRush new openInWorldを入力して選択し、Do itしてください。
なお、起動した画面をクリックしないとキーボードで操作できないので注意してください。

ライセンス

ソースプログラムや画像ファイルについては、MIT Licenseに従います。

2012.11.16追記

公開しているソースはWindowsでの利用を前提としており、キーコードの違いからMac OS Xでは動作しません。
Mac OS X上のPharoで利用する際には、以下のパッチを導入してください。
パッチの導入には、.stファイルと同様にFile Browserで.csファイルを選択し、FileInしてください。

SkyRush-Mac-keyboardpatch.cs

弾幕ゲシュタルト on Pharo

前期の専門ゼミナールの後半に題材として取り上げた弾幕ゲシュタルトのソースを公開します。
弾幕ゲシュタルトは「がまぐ 2011/2」の「脳内麻薬とゲーム(土本さん)」で紹介されているゲームです。
「がまぐ」ではJavaのソースが公開されていますが、これをPharoで実現するためにCRCカードの作成からはじめて、各学生が自分たちで完成させるまでを学びました。

ここで紹介するのは、実際の動きを見せるために作成したもので、学生には見せていないものです。とはいえ、JackPotと同様、とてもストレートな作り方をしており、サブクラス化もあえてしていません。Pharoにおけるゲーム作成の参考になれば幸いです。

動作画面

なお、keyDown:, keyUp:を使用している関係上、キーコードの判定部分が機種依存になっています。そのためWindows, Macのソースを別ファイルにして配布しています。Linux等で利用する場合には、適宜、Danmaku>keyDown:, Danmaku>keyUp:を修正してください。

対応バージョンとしてはPharo 1.2.1を想定していますが、1.3でも動作するはずです。1.2.1の場合、CogVMの使用を強くお勧めします。

ダウンロード

配布時ソースコード(Mac版)
配布時ソースコード(Windows版)

インストール

  1. Windows,Macの環境に応じた上記ファイルをダウンロードし、適当なフォルダに置きます。
  2. Pharoを起動して、WorldメニューからTools-File Browserを開き、上記ファイルを見つけて、Filinします。

起動方法

Workspaceで、Danmaku new openInWorldとしてください。現れた画面をクリックすると、キー入力を受け付けるようになります。
遊び方としては、上下左右の矢印キーを使って飛んでくる赤い玉をよけるだけです。

ライセンス

GPL v3

JackPot on Pharoのファイル公開

前期の専門ゼミナールの前半に題材として取り上げたJackPotのソースを公開します。
JackPotは「がまぐ 2011/2」の特集:ゲームデザインで取り上げられている土本さんによるゲームです。
「がまぐ」ではJavaのソースが公開されていますが、これをPharoに移植してゼミで使い、Pharoの使い方やSmalltalk/80の文法などを学びました。

★ステップ1★
最初は配布したソースコードによってゲームの動作を把握します。
配布時ソースコード(Mac版)
配布時ソースコード(Windows版)
動作画面

※Worldメニュー-WorkspaceでWorkspaceを開き、「JackPot new openInWorld」と入力して選択し、コンテキストメニュー-Do itを選んで実行します。
※利用しているPharoのバージョンは1.2.1です。http://www.pharo-project.org よりダウンロードするか、末尾のZIPファイルをダウンロードして展開してください。
※入力キーコードの違いにより、配布時ソースコードをMac版とWindows版に分けています。

★ステップ2★
ゲームに対して簡単な変更を加えます。ステップ1のままではすぐに負けてしまうため、自機のスピードを2倍にします。
変更部分のソースコード(チェンジファイル)
変更の様子と動作画面

変更部分のソースコードは、Worldメニュー-Tools-File BrowserでFile Browserを開き、該当ファイルを選んでFile Inします。

★ステップ3★
ステップ2で簡単になりすぎたゲームを改良します。具体的には宝物を取った時に待つようにします。
変更部分のソースコード(チェンジファイル)
変更の様子と動作画面

★ZIPファイル★
なお、Pharo/Squeakに不慣れなWindowsユーザーのために、ステップ1からステップ3のファイルを同梱し、ステップ1の状態になっているzipファイルを公開します。
JackPot.zip (19,211,251バイト)

プロジェクト課題(4)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題4

  • 一組の4択問題(問題文、選択肢)を表す複合的データ(オブジェクト)を作成しなさい。
    クラス定義が必要な言語ではクラスを定義した上でオブジェクトを作成しなさい。
  • 課題3のプログラムのデータの扱いを、上記のオブジェクトを利用する形に書き換えなさい。

プロジェクト課題(3)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題3

  • 問題文と選択肢(4つ)を、メモ帳などを使ってファイルに格納しなさい。
    このとき、1行目が問題文、2〜5行目が選択肢となるようにしなさい。
  • ファイルから問題文と選択肢を読み込んで、4択問題を出題するように課題2のプログラムを改造しなさい。

プロジェクト課題(2)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題2

  • 選択肢を適当にシャッフルして表示するように改良しなさい。

プロジェクト課題(1)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題1

  • 適当な問題文と選択肢4つを考えなさい。?
  • 問題と選択肢を表示し、(1〜4の)入力を即し、それが正解ならば「正解」、不正解ならば「不正解」と表示するプログラムを作りなさい。

実行例(表示の仕方は各自で工夫すること)

文字列中で同じ文字が繰り返される場合、繰り返し部分をその反復回数と文字の組に置き換えて文字列を短くする方法はどれか。
EBCDIC符号
巡回符号
ハフマン符号
ランレングス符号化
解答を入力してください>>> 1 ??
※不正解です。正解は4です。

(情報処理技術者試験より)

伊藤ゼミのプログラミング課題(3)

ゼミの3年生に対する課題をウェブにも残しておきます。

自分の選んだプログラミング言語について、課題1?2を解くプログラムを作りなさい。
次回のゼミで、作成したプログラムについて説明しなさい。
※入力の方法や画面への表示方法は、前回課題の解答例を流用しなさい。

課題1

3個の数値を入力し、3番目の数値の値が、1番目と2番目の数値の和に等しいとき「OK」を、そうでないとき「NG」を表示するプログラムを作りなさい。

課題2

正解した回数が3回に達するまで、課題1の動作を繰り返して実行するプログラムを作りなさい。

伊藤ゼミのプログラミング課題(2)

ゼミの3年生に対する課題をウェブにも残しておきます。

自分の選んだプログラミング言語について、課題1?2を解くプログラムを作りなさい。
次回のゼミで、作成したプログラムについて説明しなさい。
※入力の方法や画面への表示方法は、前回課題の解答例を流用しなさい。

課題1

3個の数値を入力したら、その中から一番大きな数値を1つ画面に表示するプログラム
を作りなさい。 入力する3個の数値を変えても正しく動作しなければなりません。

課題2

1?9の数値を自由に何個でも入力していく。0を入力した時点で、それまで入力され
た数値を、入力された順序で画面に表示し、終了するプログラムを作りなさい。

※時間があれば以下の課題にも取り組むこと。

課題3

課題2の表示結果の後で、入力された数値の最大値、最小値、平均値を表示するよう改
良しなさい。

課題4

現時点の日付、時刻を取得し、その内容を以下の例のように表示するプログラムを作り
なさい。
例)2009/10/20 14:40の場合の出力
Nen=2009 Tsuki=10 Hi=20 Ji=14 Fun=40

伊藤ゼミのプログラミング課題(1)

ゼミの3年生に対する課題をウェブにも残しておきます。

自分の選んだプログラミング言語について、課題1?2を解くプログラムを作りなさい。
次回のゼミで、作成したプログラムについて説明しなさい。

課題1

1?20までの整数をランダムに10個画面に表示するプログラムを作りなさい。

課題2

3個の数値を順に入力したら、入力したのと逆の順で画面に表示するプログラムを作り
なさい。入力する3個の数値を変えても正しく動作しなければならない。

※入力の方法や画面への表示方法は自由でよい。
※時間があれば以下の課題にも取り組むこと。

課題3

1?20までの相異なる整数を、ランダムに10個画面に表示する。

課題4

1、2、3、4、5の数をランダムに並べ替えて表示する。