プログラミング演習

課題ファイル

Battle Ship Game ルール説明

Battle Ship Game とは 10 x 10 のマス上にランダムに配置された艦船を全て沈没させるゲームである。 各艦船には長さがあり、それがHPとなる。基本的に艦船は隠れており、どこに配置されているかはプレイヤーには視えないが、 艦船はHPと同じ数縦もしくは横に繋がっている。以下に対応する艦船名とHPを記している。

各ファイル説明

senkan.h
戦艦ゲームに使用する関数等を一挙に格納しているファイル。#include に使うので特に気にしなくて良い。
senakan001.c
実際に書いたプログラムを実行する為のプログラムで、アルゴリズムが自分の期待通りに実装されているかを調べるときに用いる。
senkan100.c
senkan001.c プログラムでクリア出来た shoot 関数を使うことで、ゲーム 100 回中の平均攻撃回数を割り出す為のプログラム。
function.c
今回の課題において使用する関数を書いたファイル。こちらもヘッダファイル同様特に気にする必要は無い。
shoot.c
この関数を編集し、ゲームの攻略を目指す。

課題内容

今回の課題は BattleShip を攻略する為のプログラミングである。とは言っても、マクロを組み合わせる単純な物である。既に用意されている物を使ってなるべく少ない攻撃回数でクリア出来るものを作ることが目的である。

攻撃マクロ

以下のマクロは今回の課題に用いるマクロである。

F000
ランダムに盤面を攻撃。
F001
左上から 1 マスおきに順に撃つ。
F002
左上から 2 マスおきに順に撃つ。
F003
左上から 2 マスおきに順に撃ち、下段に下がると攻撃ポイントが 1 マス右にずれる
F004
左上から 3 マスおきに順に撃つ。
F005
左上から 3 マスおきに順に撃ち、下段に下がると攻撃ポイントが 1 マス右にずれる
F006
左上から 4 マスおきに順に撃つ。
F007
左上から 4 マスおきに順に撃ち、下段に下がると攻撃ポイントが 1 つ右にずれる
F008
縦、横の座標が奇数のマスに攻撃。
F009
縦、横の座標が偶数のマスに攻撃。

特殊攻撃マクロ

次の攻撃マクロは特殊な物となっている。上記の F000~F009 迄のマクロと組み合わせることで動く。

F010
攻撃が当たった場所から上に 4 つ攻撃する。
F011
攻撃が当たった場所から右に 4 つ攻撃する。
F012
攻撃が当たった場所から下に 4 つ攻撃する。
F013
攻撃が当たった場所から左に 4 つ攻撃する。

コンパイル方法

$ gcc senkan001.c shoot.c function.c として実行ファイルを生成する。

$ gcc senkan100.c shoot.c function.c とすると、 BattleShip を 100 プレイした平均攻撃回数を 表示する実行ファイルを生成する。

/* ./a.out で実行ファイルが実行できる。 */

おまけ

bash に不自由な人もいると思うので使用する ( と思われる ) コマンドの使い方をここで説明する。