PONGゲームを製作してみました。[1]~[5]のように先駆者による多くの試みがあります。
主な仕様 表示画面 48×32ドットの白黒表示 ビデオ信号 毎秒61フィールドのモノクロノンインタレース信号です。テレビ信号の規格を満たしてはいませんが、何台か試したテレビでは特に問題なく表示できました。 出力 テレビのビデオ入力端子に接続 電源 3V(CR2032) 8mA 大きさ 40×55×20mm
スイッチを入れ、ボリウムでラケットを上端に移動するとゲームが開始します。ゲームは9点先取です。
「プレイヤー側のラケットにボールが当たってからコンピュータ側のラケットが移動を開始するまでの遅延」を小さくするとコンピュータが強くなり、大きくすると弱くなり、この値を微妙に調整しています。
マイコンはATMEL社のAVRマイコンATtiny45Vを使いました。ビデオ信号の発生方法については、主にBruce Land氏の資料[1][2]を参考にしました。プログラムはWinAVR(20060421版)のgcc-avrで「-Os」オプションでコンパイルします。
ATtiny45のSRAM256バイトの内192バイトを、モノクロ48×32ピクセルのVRAMとして使っています。1水平走査時間を64μsとし、256ラインで1フィールド1/61秒になっています。
出力の整合をとっていないため、画像に少し滲みが出ます。
(回路図)
(プログラム)...pong.c, vlibnums.c, pong.bat(参考)
上記のArduino版を作ってみました。プログラムはArduino UNO, Studuino, Nanoboard(ちっちゃいものクラブ)で動作を確かめました。TVとの接続はICSPコネクタを使い、抵抗はコネクタに付けました。画面表示や操作方法は上と同じです。
(プログラム)...pong.zip
tinyBasic版も作ってみました。Arduino UNO, Nano, Miniなどで動作しました。
[1] 瀬戸口豊: ワンチップ・ブレークアウト・ゲームの製作, トランジスタ技術, 1997年5月号, pp.353-360.
[2] Rickard: PIC-Pong, http://www.rickard.gunee.com/projects/video/pic/pong.php
[3] D.B.Thomas: VCR Pong, http://dt.prohosting.com/pic/pong.html
[4] Bruce Land: AVR Video Generator with an AVR Mega163, Atmel Application Journal, Vol.3, pp.8-10(2004).
[5] Bruce Land: Video Generation with Atmel AVR microcontrollers(Cornell Univ. EE476), http://instruct1.cit.cornell.edu/courses/ee476/video/