ラベル OTHELLO の投稿を表示しています。 すべての投稿を表示
ラベル OTHELLO の投稿を表示しています。 すべての投稿を表示

2016-02-16

UNIX V6で森田オセロ V6.1が動作した

UNIX V6上で森田オセロV6.1が動作しました。問題点を突き止めるため、リンクするオブジェクトファイルを1つずつ追加しながら、異常になるファイルを探しました。リンク時に未定義関数エラーが出ますが、スタブで対処しました。

その結果cell.cが怪しいと分かりました。『思考ゲームプログラミング』の178頁には「8ビット用のCでは2000~3000程度に変更する」という但書があります。PDP-11は8ビットCPUではありませんが、メモリ空間が64Kなので、実質的には8ビット用と同様の制約を受けるのかもしれません。

MAXCELLが7000だったので2000に変更したところ、無事に動作してくれました。幾つか気になっている個所が残っていますが、とりあえず一安心しました。
# ./a.out

MORITAN OTHELLO Ver 6.1
Copyright (C) 1986 by K.Morita


1.man-com 2.com-man 3.com-com
select = 1
Level = 3

  a b c d e f g h
1 . . . . . . . .
2 . . . . . . . .
3 . . . . . . . .
4 . . . 0 X . . .
5 . . . X 0 . . .
6 . . . . . . . .
7 . . . . . . . .
8 . . . . . . . .
black= 2 white= 2

Input your move ? f5

black:f5
  a b c d e f g h
1 . . . . . . . .
2 . . . . . . . .
3 . . . . . . . .
4 . . . 0 X . . .
5 . . . X X X . .
6 . . . . . . . .
7 . . . . . . . .
8 . . . . . . . .
black= 4 white= 1

white:f6
  a b c d e f g h
1 . . . . . . . .
2 . . . . . . . .
3 . . . . . . . .
4 . . . 0 X . . .
5 . . . X 0 X . .
6 . . . . . 0 . .
7 . . . . . . . .
8 . . . . . . . .
black= 3 white= 3

Input your move ?

2016-02-01

オセロゲームにおけるGUIと思考エンジン分離

コンピュータ将棋やチェスの世界には、USI(Universal Shogi Interface)とかUCI(Universal Chess Interface)というプロトコルがあり、GUIと思考エンジンを分離して通信することができるのだそうです。見た目と思考ロジックを分けることが出来れば、いろいろと面白い応用が拡がると思います。

このようなプロトコルがオセロゲームにも欲しいところですが、今のところ実現していないようです。仮にUniversal Othello Interface(UOI)が出来れば、思考エンジンを開発する方向とユーザーインターフェイスを開発する方向が独立して発展できることになります。さらには思考エンジン同士の対戦もできるでしょうし、Webブラウザをユーザーインターフェイスとして利用するような応用も考えられます。

さらに気になっている事ですが、オセロゲームの棋譜を表現するための標準的なファイル形式というものは存在しているのでしょうか?『思考ゲームプログラミング』にあるオセロゲームの思考エンジンは序盤を定石で勝負しようとしますが、その情報はプログラム内部に持っています。これを外部に切り出せれば、プログラムを変えなくても定石の進化に対応できるのではないかと考えています。

チェス、将棋、オセロのようなコンピュータゲームにおいては思考エンジンの強化に意識が集中する面が強いですが、周辺技術にも気を配る必要があるのではないかと思っています。

2016-01-31

UNIX V6当時のC言語に移植するための変更箇所

『思考ゲームプログラミング』に掲載されているソースコードをUNIX V6当時のC言語に移植するための変更箇所を調べるため「C Reference Manual」を確認してみました。とりあえず問題になりそうなのは次の点です。
  1. typedefがない。アスキー本では151頁の註釈で「typedefの使えない8ビット用Cは、#defineを使う」とあるので、それで対処できるのかもしれません。
  2. setjmp()とlongjmp()を使っている個所があるのですが、UNIX V6にあるのでしょうか。無いのであれば移植する必要があります。
  3. 最も目立つ違いは「E1 op= E2」のような構文が「E1 =op E2」となっている事でしょう。機械的な変更なので、もしかすると#defineで対処できるかもしれません。
  4. 識別子長はリファレンスマニュアルには「No more than the first eight characters are sinificant, and only the first seven for external identifiers.」とあります。これは恐らく大丈夫だろうと思いますが、念のために確認しておいたほうが良いかもしれません。

2016-01-30

UNIX V6にオセロゲームを移植できるか

1986年にアスキー出版局から発行された森田和郎・国枝交子・津田伸秀『思考ゲームプログラミング』(ISBN4-87148-186-7)にソースコードが掲載されているオセロゲームはUNIX V6環境に移植できるでしょうか。

本書には動作を確認したコンパイラが掲載されていますが、OSに関する記述はありません。しかし出版当時の状況を考えれば、16ビットならMS-DOS、8ビットならCP/Mだろうと思います。MS-DOSやCP/Mで動くのであれば、UNIX V6でも動くのではないでしょうか。

本書に掲載されているソースコードは、現在から見ると相当旧いK&Rスタイルで書かれています。しかしUNIX V6時代のC言語は更に原始的なので、書き換えないとコンパイルできないでしょう。ソースコードは全体で2,500行程度なので、移植してみても面白いかもしれません。