<タイトル> 対戦オセロゲーム <内容>  通信ケーブルを使った2人プレーのオセロゲーム  オセロのアルゴリズムを考えるのが面倒だったので、対戦ゲームに してしまった。 手抜きですな。  オセロ部分は2週間ほどでできたのに、通信部分で3週間もかかっ てしまった。 オセロのアルゴリズムを考えた方が良かったかも。  今年は結局、年越しプログラミングをやってしまったけど、二つの ワンダースワンを使って、一人でオセロゲームをやり続けるほど味気 ないことはないなあ。 <動作環境>  2台のワンダースワンを通信ケーブルで接続する。  OS:V1.03(V1.10) <操作>  2台のワンダースワンを通信ケーブルで接続してプログラムを実行 します。プログラムは実行されると同期を取ります。接続されるまで 待機状態になります。  通信が確立したら先攻/後攻入力に移ります。先攻が黒で後攻が白 です。どちらか一人が入力したら、もう一方はそれに合わせる形にな りますので、話し合いで先攻後攻を決めてから一人が入力すればいい でしょう。  後は、ごく普通のオセロゲームです。置く場所が無くてパスが発生 した場合はAボタンを押すと相手に順番が移ります。  すべての場所に石を置き終わるか、双方が置けなくなったらゲーム 終了です。終了判定が表示され、さらにゲームを続けるかの入力状態 となります。この場合も一方が入力すれば、もう一方はそれに従う形 になります。”A:はじめから”を選択すると先攻後攻入力から再度 始まり、”B:終了”を選択すると、2台のプログラムが同時に終了 します。  ゲーム途中で終了したい場合は”START”ボタンを押します。 終了します?のメッセージが出ますから、Aボタンを押します。(B ボタンを押すとキャンセル)相手の画面に中断要求のメッセージが出 て、”A:はい”でプログラムが終了し、”B:キャンセル”が押さ れると、こちらの画面に”拒否されました。”と表示され、ゲームが そのまま継続します。(ただし、STARTボタンを2回押すと強制 的に終了します)STARTボタンを押して中断要求モードにしてい る時に、相手から中断要求が来たときも、ゲームは終了します。 <技術解説>  RS232Cの受信部分は割り込みを使ってみました。それ以外に 定周期割り込み(VBLANK)を使いたかったんだけど、上手く行 かなかった。別々にテストしたときはうまくいったけど、同時に2つ の割り込みを設定すると、うまくいかない。2つの割り込みを同時に 設定してはいけないのだろうか? それとも、なにか設定を間違った かな? 仕方ないので別の方法で実現しました。  ウィンドウズのプログラムならバッファがあるので一度にたくさん のデータが受信されることもあり、プログラム内で使用するバッファ において、受信データがバッファの終端と先頭にまたがっているとき を識別するため、フラグ(本プログラムではboundsという名前)でそ れを表したりしますが、WSでは必要なかったので、用意はしました が使用しませんでした。  当初データ化け等はNAK応答で対処しようと思ったのですが、考 えなければいけないことが、かなり多い。仕方ないので受信チェック でエラーがあったら、NAKを送らず、すべてタイムアウトによる再 送で対処することにしました。そうすると考えるべきことが1/3ぐ らいに減ってしまった。  ゲーム中に通信が切断する場合として考えられるのはコネクタが抜 けた、プログラムが異常終了した、WSの電源を切った、(プログラ ムにバグがあった)等です。 コネクタ抜けなら、すぐに繋げば問題 にならないしその他の場合はゲーム自体が続行不能なので、ゲーム中 の通信断にはあまり気を遣っていません。異常が起きたら、メッセー ジが出るので最初からやり直すしかないかな。 冷たいようだけど。 (ごめんなさい)  ウィンドウズのVC++でも通信テスト用プログラムを作りました が、送受信の考え方はほとんど一緒です。  デバッガのないプログラムがこんなに大変だったとは、つくづくデ バッガのありがたさというものを実感してしまった。  エディタにはビジュアルスタジオのエディタを使っています。やは り使い慣れたものが一番。コンソールアプリとして空のプロジェクト を作成し、エディタ部分だけを使用しています。クラスビューに関数 一覧が表示され、そこから各関数に飛べるのでなかなか便利。ビジュ アルスタジオのメニューのツールにDOS窓と、転送ツールを登録し たので、コンパイルもDOS窓からkmmakeを起動するだけで済 むし、転送ツールもそこから起動できる。 <わたし> 宍戸 勝浩 北海道石狩郡当別町太美町 在住 北海道工業大学 機械工学科 卒業(流体力学研究室) コンピュータとはかれこれ23年の付き合いになるな。