OMAKE.jpn 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. この文書は,おまけ,ていうか,暇なときに気が向いたまま書き貯めたものです.
  2. ■■ N.A.D.A.R. 開発秘話
  3. N.A.D.A.R. は,そもそもは中学生のときに,「TANK」という名前で作った,
  4. 2人対戦のゲームだった.もう10年以上前の話だ.
  5. もともとぼくは戦車ゲームが好きなのだが,まわりにはあまり満足のいく
  6. 戦車ゲームが無かった.そこで昔のプログラマの鉄則,
  7. ほしければ作る
  8. にしたがって,自宅の PC-9801VX で作ったのがはじまりだった.
  9. このころ学校の理科室に PC-9801M2 があって,それでプレイしてたりしてた.
  10. しかし当時の PC-9801M2 はすでにひと昔前の機種であり,8086 の 5MHz では
  11. 名機 PC-9801VX の 80286 8MHz にはかなうはずもなく,
  12. おそすぎてゲームにならん
  13. とフトドキなことを考えていた.とくに接近戦になって,2人が同時に
  14. 砲弾とミサイルを撃つと,目に見えて速度が低下してしまう.しかしこれも,
  15. クライマックスでスローモーションになる,映画のワンシーンみたい
  16. とあるていど納得していたわけであるから,
  17. 遅延まで考慮に入れて逆に利用したゲーム
  18. という,今思うとカッコイイ仕様ではあったと思う.(本当か!?)
  19. TANK は一人プレイ用の TANK2,2人プレイ用になって,TANK3A,
  20. 改良を加えて,TANK3B, TANK3C, ... と製作していき,最終的には,
  21. TANK3E まで製作した.
  22. その後,兄の「戦車をもっと大きくしたほうがよい」という意見を採り入れて,
  23. 戦車を拡大した TANK3F,再びもとに戻した TANK3G というように,
  24. 暇をみてはバージョンアップしていく
  25. という,まさに趣味で作ってるプログラムであった.
  26. 大学3年生から4年生にかけて,
  27. マイコン BASIC MAGAZINE
  28. によく投稿していて,一時期,常連になっていたのだが,
  29. 大学4年のときに,マイコン BASIC MAGAZINE の投稿用に,プログラムを
  30. 全体的に見直して,TANK3I を作った.が,これは,
  31. あえなくボツ
  32. マイコン BASIC MAGAZINE の掲載基準は「アイディア重視」であって,
  33. やはりこういうありがちなゲームは載りにくい.しかも2人でないと
  34. プレイできないとなると,なおさら載りにくい.
  35. ピーピング形式にして,TANK3J を作ったが,
  36. これもボツ
  37. PC-9801 用の TANK は,ここまでである.
  38. しかし,研究室に入って,X を使うようになってからは,いつか TANK を
  39. X に移植したいと思っていた.そして,
  40. フリーソフトとして公開する
  41. という,Tank 復活の方法を考えていた.
  42. 実際に Tank を書きはじめたのは,就職した1999年の4月からである.
  43. 4月に就職し,5月くらいから,Tank で使用するためのネットワーク通信用
  44. ライブラリを書き出した.
  45. このころ,ちょうど,
  46. オブジェクト指向
  47. にはまってて,頭の中ではすっかりオブジェクト指向至上主義.
  48. オブジェクト指向で書いておけば,
  49. その向こうにはバラ色の世界が待っている
  50. という考えだった.
  51. しかし,通信には文字列処理がつきものなので,そのまえに文字列処理用の
  52. String クラスを作ろう,と思った.
  53. また,通信するには select() で調べることが必要になるから,select() 用の
  54. クラスも欲しい.ソケットの接続までの部分は接続部分として,別クラスにしたい.
  55. 通信は文字列の通信を行う部分と,じっさいにデータ通信を行う部分は別クラスに
  56. したい,などという感じで,オブジェクト指向をやりたてのときにありがちな,
  57. なんでもかんでもクラスにしよう
  58. というようにはまってしまい,あげくのはてには,
  59. 整数までも,Integer クラスで管理しそうな勢い
  60. になって,収拾がつかなくなってしまう.
  61. また,クライアントが複数になったときには,サーバ側では fork() して通信の
  62. 接続要求だけを処理するようなプロセスを作って,クライアントごとには
  63. 通信だけを処理するプロセスを作り,サーバプロセスとはパイプで通信する...
  64. というような実装も見越した上で書きたい,などと,
  65. はてしない深みにはまっていってしまった
  66. そのうち EyeClock-2.0 の開発を始めることになってしまい,こっちに
  67. どっぷりつかってしまった.
  68. 1999年の8月から12月にかけては,EyeClock-2.0 にかかりっきりで,
  69. Tank は先送り(ていうか,ほとんど忘れ去られた状態)になってしまった.
  70. EyeClock-2.0 は1999年の年末ぎりぎり(クリスマスイブだった.
  71. とくに意味はないのだが)に公開した.しかし今思えば,
  72. クリスマスイブに,世のため人のために
  73. フリーソフトを公開しているなんて,
  74. 聖人のような生活
  75. だと思ってしまう.
  76. しかし,ただの時計なので,
  77. たいして世のためになっていない
  78. というのが悲しいところである.
  79. EyeClock-2.0 がひと段落してからは,あそびで XKeyWrap とかを書いていたのだが,
  80. 2000年の1月中旬くらいにようやく Tank を書き出した.
  81. 以前の教訓があったので,今回はあまり細部にこだわらずに,
  82. とりあえず動くもんをつくって公開しちまえ
  83. という方針で開発を進めた.
  84. 以前のネットワーク用ライブラリとか,EyeClock-2.0 での経験とかが
  85. あったので,開発はトントン拍子に進んで,わずか1ヵ月足らずで
  86. ふつうにプレイできるプロトタイプが仕上がった.
  87. よく,「N.A.D.A.R.って,なんの略なの?」と聞かれる.
  88. N.A.D.A.R. の命名には,ずいぶん悩んだ.ここで,命名の由来を書こう.
  89. もともと橋本も僕も,
  90. グロブダー
  91. というゲームが好きだった.ナムコのずいぶん古いアーケードゲームなのだが,
  92. ちょっとでも気を抜いたら(ていうか,気を抜いていなくても),あっと言うまに
  93. やられてしまうという,スリルとスピード感のあるゲームだった.
  94. やはりスリルと緊張感,一瞬の判断こそが
  95. アクションゲームの醍醐味
  96. だとぼくは思っているので,そんなゲームを作りたいと常々思っていた.
  97. N.A.D.A.R. のプロトタイプが完成して,そろそろ名前を決めてしまいたいと
  98. いうとき,橋本と焼肉屋に行った.で,焼肉屋でいろいろ話したのだが,とりあえず,
  99. 「TANK」はやめよう
  100. ということになった.
  101. 戦車の重みを表現したいので,「グロブダー」のように,濁音のある名前にしたい.
  102. そう考えると,「グロブダー」は,G,B,D と,濁音のある文字が3つも入っている.
  103. そこで考えたのが,
  104. GNOMEDAR
  105. でも,GNOME は直接的にとくに関係は無いのでこれは却下.
  106. いっそのこと,日本的な名前はどうだろう?
  107. 「風林火山」
  108. なんて冗談半分でいろいろ考えていたのだが,そこでそのとき,
  109. 「灘の生一本」
  110. という日本酒のポスターが目に入った.
  111. 「灘」ってのはどうだ?
  112. このときは,あまり深く考えてなくって,けっきょくこの日には決まらなかった
  113. のだが,このときにしっかり決めなかったのがよくなかった.
  114. そのうち開発を進めるうちに,ファイル名とかも整理しだして,
  115. ほんとにもういいかげん名前を決めたい
  116. と思い,けっきょく,「灘」にアクセントで r をつけて,「NADAR」にしてしまった.
  117. というように,あまり意味なく決まってしまった「NADAR」なのだが,
  118. 作者としては,いちおう,
  119. アルファベットになにか意味を持たせたい
  120. うーん,
  121. N.A.D.A.R. - Network Action ...
  122. だめだ,Dのあたりでなんにもおもいつかん.
  123. ■■ EyeClock 開発秘話
  124. そもそもなんで EyeClock を作り出したかってはなし.
  125. 大学の卒業研究のために研究室に配属されたのは,1996年の3月だった.
  126. この研究室では数値計算を行うため,メインの OS として UNIX が使われていた
  127. のだが,僕にとっては,これが,よかった.
  128. 研究室では主に FreeBSD を使って作業していたんだけれど,
  129. 「好きな画像を時計にしたい!」
  130. と,常々思っていた.
  131. 今思えば,よく探せばそういう時計アプリケーションもなにかしらあるんじゃ
  132. ないかと思うんだけど,そのときはよく探しもせずに,man xclock をてきとーに
  133. 読んだくらいであきらめていた.
  134. これが後々 EyeClock の開発につながったわけだ.
  135. EyeClock の開発に着手したのは,たしか,1998 年の6月ごろだったと思う.
  136. 1998年の5月というと,自分は大学院の修士2年で,就職活動のあいまを
  137. 見つけては,本業の研究をそっちのけにして,
  138. XMangekyou
  139. を書いていた.
  140. なにせこのころは,毎日毎日,一日中 X のプログラミングをしてたのだ.
  141. 毎週火曜と水曜には研究室に泊まって,大学の近くの
  142. 三河屋という酒屋(理科大の人はよく知っているハズだ)
  143. に行って,ビールとワインを買って,夜になると,
  144. 飲んで歌いながら
  145. プログラミングをしていたもんだ.(今考えると,不気味だ)
  146. 研究室にはスパゲッティとミートソースの缶詰を買い置き(これも三河屋で買ったもの)
  147. してあって,だいたい夜の12時を過ぎたころに,夜食を食べて,で,
  148. 明け方の4時頃までがんばって,眠くてどうしようもなくなったら,寝袋で寝る.
  149. 朝は10時頃に起きて,大学のトレーニングルームでシャワーを浴びて,
  150. シャンプーして,ヒゲをそって,で,またプログラミングを始める,
  151. といった生活だった.
  152. このため,研究室には,
  153. 着替えも常備してあった
  154. このころまでは,だれも使っていなかった Sun SPARC Station 5 をよく
  155. 使っていたんだけれど,XMangekyou の動作を XFree86 上でテストする
  156. 必要性が出てきたので,これまたあまりだれも使っていなかった,ロースペックの
  157. オーダーメイド AT 互換機(FreeBSD + XFree86) を使うようになった.
  158. このロースペックマシンは,研究室に数少ない,
  159. 音の出るマシン
  160. のうちのひとつだったので,けっこうお気に入りだった.ロースペックなので,
  161. だれも使わないし,計算を走らせたりもしないから,気軽に使えるということもあり,
  162. けっきょく,卒業するまで,ずっとこのマシンを使っていた.
  163. EyeClock や XStarRoll や修士論文は,すべてこのマシンを使って書いた.
  164. 5月の中旬に就職が決まって,そのあとには,たまに研究もしつつ,
  165. でも本業はプログラミングというくらいのいきおいで,プログラミングをしていた.
  166. 当時の後輩曰く,
  167. 「坂井さんはいっつも研究室にいるけど,
  168. なにをやっているのかわからんです」
  169. 研究してるわけでもないし,遊んでいるようにも見えないし,ということだった
  170. らしい.とはいっても,
  171. じつは遊んでいたんだけどね
  172. 5月の終り頃,XMangekyou をひととおり作り終えたあとは,いよいよ EyeClock の
  173. 開発にとりかかる.
  174. まず,時計「MyClock」を作った.これは,時計とはいっても,
  175. 白黒のビットマップを張りつけられるだけ
  176. という,非常におそまつなものだった.当時はまだピックスマップファイルの
  177. 読み込みかたをしらなかったので,しかたなくビットマップで作ったのだ.
  178. このあたりの作業の順番はじつはうろおぼえなので,たしかなことはよく
  179. 覚えていないのだが,次にやったのは,
  180. 「ピックスマップファイルを読み込んで,カラーで表示したい!」
  181. ということだったとおもう.
  182. しかし,X の標準では,ピックスマップファイルを読み込んでピックスマップを
  183. 作成するような関数は,提供されていない.
  184. X や Motif の書籍をいろいろ調べたのだが,ピックスマップファイルの
  185. 読み込みかたは,書いていなかった.そこで,かの有名な,
  186. EmiClock
  187. のソースを参考にすることにした.
  188. EmiClock のソースを読んで,はじめて Xpm ライブラリの存在を知り,
  189. ピックスマップファイルを読み込むことができるようになった.
  190. ちなみに EmiClock はすばらしく優れたプログラムで,ソースを見ると
  191. わかるのだが,ほんとにいたれりつくせりで,
  192. X のプログラミングをしようとしてるひとは,ぜひ読んだほうがいい
  193. という,おすすめの1本である.
  194. これで MyClock は,カラーの画像が扱えるようになった.自分としては
  195. それなりに満足して,タレントの画像を張り付けたりして使っていた.
  196. そんなある日,忘れもしない,帰宅中の
  197. 三田線水道橋~白山
  198. あたりで,ふと思った.
  199. 「あれで目を動かしたら,面白いんじゃないか?」
  200. ここから EyeClock の開発が始まったわけだ.
  201. (次回作の OMAKE.jpn に続く)
  202. ■■ 趣味のプログラム
  203. ぼくは子供のころから,なにかものを作ることが趣味だったんだけど,
  204. ある日,ぼくの兄上(こいつもなにかものを作ることが趣味なのだが)と,
  205. ぼくと,父親で,
  206. よくわからない展示会
  207. のようなところに行った.(なんの展示会だったのか,会場はどこだったのかなどは,
  208. まったく覚えていない)
  209. この展示会場には,当時はやりだった LED のゲームとかがいろいろあったように
  210. 記憶しているのだが,この会場のある一角に,
  211. マイコン
  212. が置いてあるコーナーがあった.(もともとは兄がそっちが目的だったらしいのだが)
  213. このマイコンは,RETURN キーが緑色と赤色だったので,いま思えばおそらく,
  214. 東芝のパソピア7だったのだろうとおもう.
  215. このマイコンでは,実際に BASIC のプログラムをいろいろいじる,というような
  216. デモが行われていたらしく,
  217. BASIC のプログラムリストが画面上にダンプされていて,
  218. カーソルが左上で点滅しているだけ
  219. だった.ちなみに,この「マイコン」を初めて見て,ぼくが最初に口にした言葉は,
  220. 「ねえねえ,これってどんなゲームなの?」
  221. だった.うーん,はずかしい.
  222. しばらくして,近所のひとがパソコンを持っているというので,
  223. 兄といっしょに触らせてもらいに行くことになった.
  224. このときあったのは,いま思えばたしか Sharp の MZ 系のマシンだったと思う.
  225. 当時はぼくはパソコンというものをまったく知らなかったので,ただ単に
  226. 兄についていって,兄がいじるのをとなりで見ていただけだったのだ.
  227. 兄がプログラムを打ち込み終って run すると,画面上に,
  228. 2
  229. とかの数字が出てきた.
  230. もういちど run すると,今度は,
  231. 6
  232. とかの数字が出てきた.
  233. 兄「これ,見てみ」
  234. 僕「なに,これ?」
  235. そう,このとき兄が書いていたプログラムは,忘れもしない,
  236. サイコロ
  237. であったのである.
  238. いま思えば,
  239. 10 A=INT(RND(1)*6)+1
  240. 20 PRINT A
  241. 30 END
  242. のようなプログラムを打ち込むのに,10数分かかっていたのだろう.
  243. そんな兄の要望で,ついに我が家もパソコンを買うことになった.
  244. 当時兄は小学6年生で,毎週秋葉原に行っては抵抗やコンデンサを買いこんできて,
  245. ラジオとかを作っていた(気違い小学生だ)のだが,そんなある日の日曜に,
  246. 父親,兄,僕で,いよいよ秋葉原に買いに行った.
  247. 秋葉原駅前のサトームセン(エスカレーターから外が見える建物)で選んだ
  248. パソコンは,忘れもしない,
  249. PC-8001mkII
  250. であった.たしか当時で本体価格が127,000円(だと思った)で,さらに当時はまだ
  251. 高価だったカラーディスプレイ(当時はまだ,グリーンディスプレイが主流だった)
  252. とデータレコーダーも買ったわけだから,当時の小学生にしては,
  253. けっこう高い買物だったとおもう.
  254. これのおかげで今があるわけだから,親には感謝感謝である.
  255. このときついでに,
  256. 2001年宇宙の旅
  257. というゲームと,あと,
  258. ファイヤーレスキュー
  259. というゲームも買った.このファイヤーレスキューというのは,当時,
  260. マイコンショップの店頭で,デモなどによく使われていた記憶があるのだが,
  261. 内容はというと,
  262. 消防車を左右に操作して,スペースを押すとハシゴが伸びて,
  263. ビルの火事から人を救助する
  264. という,非常に単純なゲームだった.しかも,画面構成は,
  265. キャラクタベース
  266. だったのである.
  267. ____
  268. | |
  269. /\__/
  270. /\/
  271. /\/
  272. /\/
  273. /\/
  274. _/\/__________
  275. | | | | \
  276. | | | |__\
  277. | | | |
  278. |__/ \____/ \___|
  279. \_/ \_/
  280. というような消防車を動かすわけである.
  281. どちらも BASIC で書いてあって,ゲーム中に Stop を押すと,
  282. ^C
  283. Break in 1130
  284. とかいって止まってしまって,なんと,
  285. プログラムリストを見ることができる
  286. という,いまから考えると信じられないようなものだった.
  287. ぼくが小4の6月に,ついに我が家にもパソコンが来た.このころは,
  288. パソコンが使える = BASIC でプログラムが書ける
  289. という時代だったので,ぼくもプログラムを書きはじめることになるのだが,
  290. はじめて買ったパソコンの本は,
  291. BASICプログラミング
  292. という本だった.(漫画である)
  293. どういう内容の本かというと,
  294. ロムさんとラムさん
  295. という兄弟が,
  296. マイコさんやアイコさん
  297. のために,家計簿だとか,社員の定期券の期限の計算用プログラムとかの
  298. プログラミングをしていく,という内容だった.
  299. ちなみにアイコさんはマイコさんの妹で,アイコさんはショートカットの OL で,
  300. ロムさんはマイコさんが好きで,ラムさんはアイコさんが好き,という設定だった.
  301. しかし,
  302. 今思うと,すごい名前だ
  303. ちなみにぼくは,長女系のマイコさんより,次女系のアイコさんのほうが好きだった.
  304. この本は BASIC をあるていど知っていることを前提にしていて,
  305. 実際にプログラムを書いていく,という内容だったので,まったくの初心者の
  306. ぼくには,よくわからなかった.
  307. そこで次に買った本が,
  308. まんがパソコンゼミナール(きぎようへい・さとう光)
  309. この本は,なんと,いまだに自宅に保存してある.
  310. どういう本かというと,
  311. マイちゃんとコンちゃん
  312. が,名機 PC-8001 を使って,「先生」と「ネコちゃん」といっしょに,
  313. コンピュータの仕組みや,プログラムの書き方を勉強していく,という内容だった.
  314. この本はとてもわかりやすくて,
  315. データバスやアドレスバスやコントロールバスや ROM や RAM や
  316. モニタプログラムや BASIC インタプリタや入力装置や出力装置や
  317. 入出力装置や機械語
  318. といった,ハードのこともちゃんと解説されていて,とってもためになった.
  319. この本は,ボロボロになるまで,100回以上繰り返し読んでいると思う.
  320. この本の最後を飾っていたプログラムは,「センスイカンノエ」というものである.
  321. どういうものかというと,たしか,
  322. 10 REM センスイカンノエ
  323. 20 PRINT CHR$(12)
  324. 30 LOCATE 20,10
  325. 40 PRINT "センスイカンノエ"
  326. 50 FOR I=0 TO 1000
  327. 60 NEXT
  328. 70 PRINT CHR$(12)
  329. 80 LOCATE 0,10
  330. 90 PRINT " ■ "
  331. 100 PRINT "/~~~~~~~~~~~~\"
  332. 110 PRINT "\____________/"
  333. 120 END
  334. というようなものだったと思う.
  335. FOR I=0 TO 1000
  336. NEXT
  337. で,十分なウエイトになってしまうあたりが,すごいとこだ.
  338. そーいえば,このころってまだ,
  339. マイコン
  340. って言葉が使われていた時代だったなあ.
  341. ぼくがプログラミングをはじめたころは,BASIC が全盛の時期だった.
  342. 当時は BASIC のプログラムが載っている本が多くあって,
  343. なにをかくそうぼく自身,本に載っているプログラムを
  344. ゲームやりたさで
  345. ひたすら打ち込んで,プログラムをおぼえた,というクチである.
  346. プログラムを打ち込み終って,どきどきしながら run させると,
  347. 必ずといっていいほど,
  348. Syntax Error in 30 (いきなり3行目だったりする)
  349. などと言われてしまって,それから本とディスプレイを照らしあわせるという
  350. あまりやりたくない作業になるわけである.
  351. Syntax Error なら,まだいい.たいていはそこの行にミスがあるからである.
  352. やっかいなのは,
  353. Illegal function call (関数やステートメントに渡す値がおかしい)
  354. とかである.これだと,たいていは,その行ではなく,別の行に間違いがある.
  355. いちばんイヤだったのは,
  356. Subscript out of range (配列の範囲をこえたアクセス)
  357. だ.これだと,まず間違いなく,別の行にミスがあって,変数の値が
  358. おかしくなっているのである.
  359. しかしそれも,
  360. (タダで)ゲームがやりたくてたまらない小学生
  361. にとっては,それほど苦ではなかったようである.
  362. この苦労(?)のおかげで,いま思えば,フリーソフトウエアプログラマにとって
  363. もっとも重要な力である,
  364. どんなエラーが出ても,自力でなんとかする気力
  365. が身についたと思う.
  366. どんな本を参考にしていたかというと,一番さいしょに読んで打ち込みはじめたのは,
  367. いまでも覚えている,知る人ぞ知る,ナツメ社の,
  368. はるみのゲームライブラリII
  369. という本だった.この本は残念ながら,どこかへいってしまった.
  370. うーん,もう一度,読んでみたいものである.
  371. 「あるけあるけゲーム」(tron のようなゲーム)とか,
  372. 「スクロールジャンプ」とか,
  373. 「ビルディングクラッシュ」とか,
  374. 「地底探検ゲーム」とか,
  375. ペンゴもどきとか,
  376. 月面着陸とかを打ち込んでは遊んでた.
  377. この本は当時はやりの,
  378. 1画面プログラム
  379. を集めた本(しかも,40x25)で,わりと手軽に打ち込めるプログラムが
  380. 多かったのだが,それでもパソコンを覚えたての小学生ではキーを探すのも
  381. ままならず,1本を入力するのに2時間とか3時間とかかかっていた.
  382. しかしそれでも,
  383. (タダで)ゲームをやりたいという熱意
  384. は強く,学校が終ったら急いで帰って,きのうの続きを打ち込みはじめる,
  385. という日も多かったように思う.
  386. 当然,学校でもゲームのことばかり考えているわけであるから,困ったものだ.
  387. はるみのゲームライブラリ
  388. という本のプログラムも,よく打ち込んだ.
  389. そのうち打ち込んだゲームを適当に改良したりするようになる.
  390. やがて,自分でもゲームを作り出すようになる.
  391. はじめて作ったゲームは,いまでも覚えているが,
  392. 「レーザーパックマン」
  393. というタイトルだった.
  394. どういうゲームかというと,
  395. ・まず,敵がいる.(ランダムで動いている)
  396. ・自分がいる.(テンキーの '1', '2', '3', '5' で移動できる)
  397. ・自分と敵の X 座標が一致すると,「ピッ」と音がして,レーザーが発射される.
  398. (IF X=EX THEN LINE(X,Y)-(EX,EY),"■",2 のようなことをやっているわけである)
  399. ・自分と敵の Y 座標が一致したときも,おんなじ.
  400. ・レーザーを撃つと,スコアが増える.
  401. パッと見てまず思うだろう.そう,このゲームには,
  402. ゲームオーバーがない
  403. のである.
  404. いま思えば,こんなしょーもないゲームでよく遊んでいたものだと思う.
  405. 今,思いだせる限りで,レーザーパックマンを再現してみよう.
  406. 10 X=20:Y=12:TX=10:TY=10:S=0
  407. 20 LOCATE X,Y:PRINT " "
  408. 30 LOCATE TX,TY:PRINT " "
  409. 40 I$=INKEY$
  410. 50 IF I$="1" AND X>0 THEN X=X-1
  411. 60 IF I$="3" AND X<39 THEN X=X+1
  412. 70 IF I$="5" AND Y>0 THEN Y=Y-1
  413. 80 IF I$="2" AND Y<23 THEN Y=Y+1
  414. 90 IF INT(RND(1)*2)+1=1 THEN TX=TX-1:GOTO 130
  415. 100 IF INT(RND(1)*2)+1=1 THEN TY=TY-1:GOTO 130
  416. 110 IF INT(RND(1)*2)+1=1 THEN TX=TX+1:GOTO 130
  417. 120 TY=TY+1
  418. 130 LOCATE X,Y:PRINT "○"
  419. 140 LOCATE TX,TY:PRINT "●"
  420. 150 IF X=TX AND Y=TY THEN LINE(X,Y)-(TX,TY),"■",2:S=S+100:BEEP1:BEEP0:GOTO 170
  421. 160 IF X=TX OR Y=TY THEN LINE(X,Y)-(TX,TY),"■",2:S=S+10:BEEP1:BEEP0
  422. 170 LOCATE 10,0:PRINT S
  423. 180 GOTO 20
  424. たしか,こんなんだったとおもう.(なにしろ,はじめて書いたプログラムですから)
  425. 確率的に,敵が左上のほうに行きやすくなってしまったというのをおぼえている.
  426. こんなんおもしろいのか?
  427. とも思ってしまうが,自分で作ったゲームというのは,
  428. それなりにおもしろいものである.(本当かなあ...)
  429. ほかにも,インベーダーゲームを作ったことがある.
  430. これは,大量のインベーダーをひとつひとつ処理することに無理があったので,
  431. GET(X,Y)-(X+9,Y+4),G% してから, PUT(X+VX,Y+VY)-(X+VX+9,Y+VY+4),G%
  432. で,インベーダーをまとめて動かしていた.
  433. このころの雑誌で忘れられないのが,
  434. マイコン BASIC マガジン
  435. である.
  436. (次回作の OMAKE.jpn に続く)
  437. ■■ 参考文献
  438. ぼくは,本が好きだ.
  439. 本棚の専門書を分類したり,整頓したりするのが,とても好きである.
  440. というわけで,参考文献紹介も兼ねて,ちょっと書評(ていうか,個人的な思い出話)
  441. でも書こうかと思う.
  442. ■ C言語関係
  443. 「はじめての C 改訂第3版 [ANSI C 対応]」
  444. ぼくが大学3年のとき,この本で C 言語に入門したので,
  445. けっこう思い入れがある本である.
  446. あとで知ったのだが,入門書としては,わりと名著で有名らしい.
  447. これを参考にして,大学の授業で,
  448. 円周率を(double 型の範囲で)計算するプログラムを作る
  449. という課題があったときに,調子にのって,
  450. 円周率を10万桁まで計算するプログラム
  451. を作った記憶がある.しかも,
  452. 計算の途中経過をセーブすることができる
  453. という,なかなか気のきいたプログラムだった.
  454. 「C プログラミング診断室」
  455. 衝動買いした本.いちおうひととおり読んだ...と思う.
  456. たしか大学4年のとき,池袋のビックカメラにまだパソコン館が無いころ,
  457. ビックカメラの1階の書籍コーナーで買った.
  458. 内容はちょっと古めなので,オブジェクト指向が流行りの今としては,ちょっと
  459. 古いかもしれない,と思う.
  460. 「C プログラミング専門課程」
  461. 研究室に入ってから UNIX 上で C 言語でプログラミングをするようになって,
  462. 「C 言語をもっと勉強したい!」と思って買った本.
  463. これはためになった.この本のおかげで,コンパイラの動作とか,メモリとかが
  464. わかってきた.
  465. こんな疑問を持ったことを覚えている.
  466. 「char * s = "ABC"; などの文字列リテラルは,メモリ上に静的に確保される.
  467. ということは,
  468. while (1) {
  469. printf("ABC\n");
  470. }
  471. を実行すると,printf(); が実行されるたびに "ABC" がメモリ上に
  472. 配置されるわけだから,そのうちメモリがなくなってしまうのではないだろうか?
  473. しかも,これに対する自分の解答が,
  474. char * a = "ABC";
  475. char * b = "ABC";
  476. のように,文字列がダブっている場合には,コンパイラが判断して,
  477. 同じ領域に割り付けたりするらしい.
  478. たぶん,while () で printf() を繰り返したときにも,
  479. これと同様に,printf() の実行時には,文字列は同じ領域に
  480. 割り付けられるのだろう.
  481. うーん,すばらしくとんちんかんというか,さすが BASIC 出身者,というか,
  482. こうして書くこともはずかしいような疑問である.
  483. (インタプリタとコンパイラの動作を誤解しているわけだ)
  484. 「プログラミング言語 C」(いわゆる "K&R" である)
  485. 有名な本なので,研究室に入ってからとりあえず買ってみた.ざっと読んだだけ.
  486. 「fgetc() の戻り値が,なぜ int 型なのか?」という疑問を持ったときに,
  487. この本に解説してあったので,
  488. 「なんていい本なんだ!」
  489. と思って買ったんだけど,あんまりちゃんと読んでない.
  490. 「C プログラミング FAQ」
  491. これは,いい.最高にためになる.
  492. とりあえず1度通して読んだが,またそのうちもう一度通して読みたいと思っている.
  493. 中級者くらいになって,たいてい疑問に思うようなことは,必ず書いてあるのが
  494. すごい.
  495. この本に書いてあることが全般的に理解できてれば,C 言語はほぼ完璧なのでは,
  496. と思う.
  497. ■ X 関係
  498. 「X-Window Ver.11 プログラミング[第2版]」
  499. X のプログラムをはじめたころに,これの第1版が研究室にあったので,
  500. よく参考にしてた.
  501. そのうち,家で使う分と学校で使う分の2冊が欲しくなってきて,けっきょく,
  502. 第2版を自分で買った.
  503. X のプログラミングをする人って,この本を参考にしている人がけっこう多い
  504. みたいだね.フリーソフトのドキュメントを読んでると,参考文献とかで
  505. よく見かけたりする.
  506. 「X-Window OSF/Motif プログラミング」
  507. X のプログラムをはじめたころに,これを参考にしてプログラミングしてた.
  508. はじめのうちは,Motif (正確には,Lesstif) を使っていたのだが,
  509. やはり Motif は商品である,というのと,
  510. 「BSD を 256 倍使うための本」(いわゆる,「黒いニゴロの本」である)
  511. の,EmiClock 開発秘話で,
  512. X のプログラミングは,X ツールキットを使うのがオシャレ
  513. というふうに書いてあった,というのがあって,だんだん Motif は使わなくなった.
  514. でも X ツールキット専門の本ってなぜかすっごく少なくて,たいていは
  515. X ツールキットのプログラミングをするときでも,Motif の本を参考にしたりしてる.
  516. ちなみに,EyeClock は,
  517. 「BSD を 256 倍使うための本」
  518. に,すっごく影響を受けている.
  519. ■ そのほか
  520. 「スーパーユーザの日々」
  521. 「UNIX ネットワークの日々」
  522. 「Mail & News の日々」
  523. 研究室のシステム管理者をやるようになって,この本でいろいろ勉強した.
  524. 帰宅中の有楽町線のなかでよく読んだ.
  525. 内容はちょっと古めだが,基礎的なことがしっかりと書かれているので,
  526. 基礎勉強にとてもいい本だと思う.書いてある内容も,とてもしっかりしている.
  527. 「UNIX のシステムの勉強がしたいんだけど,なにかいい本はないか?」
  528. 「ネットワークの勉強がしたいんだけど,なにかいい本はないか?」
  529. とか聞かれたときには,この本を推薦するようにしている.
  530. 「UNIX ネットワークの日々」「Mail & News の日々」は,研究室内の
  531. システム管理者育成の勉強会で教材にしていた.この勉強会では,毎回,
  532. 「K君」や「中村さん」の役を決めて,読む
  533. しかも当然,
  534. セリフ付
  535. ということをしていて,朝,研究室に入ってくる卒研生とかが,
  536. スーパーユーザーが,学芸会のセリフの練習でもしているかのような姿
  537. をまのあたりにして,ギョッとしていた.
  538. 「セキュリティの日々」とかも,出してほしいもんだ.
  539. 「GNU ソフトウエアプログラミング」
  540. プログラミングに emacs, gcc, make, gdb を使うときの一連の流れが
  541. わかるので,とってもいい本だと思う.
  542. 個々のアプリケーションをひとつひとつ詳しく解説してある本はたくさん
  543. あるのだが,開発の一連の流れとして解説してある本は,なかなか少ない.
  544. 「よしだともこのルート訪問記」
  545. 最近買ったのだが,なんていうか,ここまで,
  546. システム管理者の実際
  547. が書かれているという本は,他にないのでは? とおもう.
  548. (そりゃそうだ,現役の管理者へのインタビューなのだから)
  549. ほかの大学や研究室とかではどういうふうに管理されているか,というのが,
  550. 非常に幅広く紹介されていて,とてもためになる.
  551. というのは,コンピュータやネットワークのシステムの構成など
  552. (こういったことも非常にためになるが)が書いてあるだけでなく,
  553. 「管理者の人材確保」や「管理者の育成・教育態勢」がどのようになって
  554. いるかなどが書かれているからだ.
  555. やはり,「人材の確保」と「教育」がいちばん大変で重要なことであって,
  556. こういったことが,システム管理の実態だと思う.
  557. しかし,読んでいると,他の大学や研究室などの管理態勢や教育態勢が,
  558. うらやましくなってしまう
  559. ということもある.
  560. (次回作の OMAKE.jpn に続く)
  561. ■■ うまいもの
  562. 寿司がすきである.
  563. おごってもらうとしたら,
  564. 1.寿司
  565. 2.焼肉
  566. 3.なんかめずらしいたべもの
  567. の順に嬉しい.なにしろ小学生のころは,
  568. 寿司屋になりたかった
  569. というくらいである.
  570. とはいっても,寿司などそうそういっつも食べにいけるものではないから,
  571. ふだんは回転寿司にいったり,たまに寿司屋で食べるくらいである.
  572. とはいっても,魚の名前をよく知らない.寿司屋でネタを見ても,
  573. なんの魚だかわからなかったりする.
  574. そのうち,ちゃんとネタの名前をおぼえて,
  575. 「なんにいたしますか?」
  576. 「そうだなあ.白身のいいとこを握ってくれ」
  577. 「へい,おまち」
  578. 「お,これはヒラメだね」
  579. なーんて言ってみたいのだが.
  580. ちなみに,好きなネタベスト10は,
  581. 1. 中トロ
  582. 2. ビントロ
  583. 3. サーモン,ハマチ,マグロ赤身
  584. 6. 鯛,メカジキ,サンマ
  585. 9. カニ味噌,ウニ
  586. てなかんじだろうか.適当に考えただけなのだが.
  587. うーん,こうしてみると,まだまだ子供の味覚である.
  588. 池袋は,やたらと回転寿司が多いので,嬉しい.
  589. (次回作の OMAKE.jpn に続く)
  590. ■■ 携帯端末
  591. わずか 800g 程度の Libretto SS1000 に FreeBSD と X を入れて,
  592. 電車の中だろうが,待ち合わせの「いけふくろう」の前だろうが,
  593. ところかまわずプログラミングをしている.
  594. ・携帯端末(いわゆる,WindowsCEマシン)
  595. ・携帯Java端末
  596. ・携帯電話
  597. ちょっと前までは,携帯端末が今後の主流になると思っていた.
  598. しかし今では,これからは,携帯端末でなく,携帯電話が主流になって,
  599. 携帯電話でなんでもできる,というような方向に進んで行くのだろうとおもう.
  600. というのは,携帯電話はやはり「電話」という,実用的で馴染みやすい機能が
  601. メインであるからだ.
  602. 「GPS標準搭載の携帯端末」があったとしても,GPSをやるためにわざわざ
  603. 携帯端末を買って,操作をおぼえようとする人は少ないだろう.
  604. しかし,「GPSつき携帯電話」ならば,携帯電話が欲しい人で,物珍しさで
  605. 買ってしまいそうな人が出てくるような気はする.
  606. きっとそのうち,携帯電話に Java や Linux が搭載され,美術館に行ったら
  607. 自分の携帯電話に案内が自動的にインストールされて,自分の携帯電話が
  608. 案内してくれる,というようになるのだろう.
  609. 携帯電話のメモリサイズや処理能力はどんどん進化しているから,いまパソコンで
  610. できるようなことは,ぜんぶ携帯電話でできるようになってしまう.
  611. そのうち映画とかも見れるようになって,電車の中の10分くらいの中途半端な
  612. 自由時間に,ちょっと映画をみたり,ロールプレイングゲームの続きをしたり,
  613. 電子ペットにえさをあげたりするようになるのだろう.
  614. 携帯電話のいいところは,小さくて電車の中とかでいじっていても違和感は無いが,
  615. 多彩の機能を盛り込める程度には大きい,というところだ.
  616. たとえば,GPSつきのごつくてでかい腕時計が出ても,それをいつもつけようとする
  617. 人はいないだろう.
  618. また,「違和感が無い」というのはとても重要だ.
  619. ぼくのようにところかまわず人目も気にせず,いつどんなところでもプログラムを
  620. 書き出してしまうような人間はともかく,普通の人は,やはり人目は気になる
  621. (のだと思う)からだ.
  622. このファイルはここまで.