イラストロジックのファイルを読む関数、 イラストを表示する関数と、 サンプルのデータです。
Illust.tar.gzをダウンロードして、解凍してください。 GNU tarとgzipがあれば、
tar xvzf Illust.tar.gz
で解凍できます。
make
でコンパイルします。
以下のファイルが含まれています。
利用可能な定数, 変数, 関数は、
ヘッダファイルIllust.h
に書かれています。
名前 | 値 | 説明 |
---|---|---|
CellUnknown |
0 | 未確定 |
CellBlack |
1 | 黒 |
CellWhite |
-128 | 白 |
画像の値、縦横の黒が連続している数として、
データ型Cell
を定義している。
8bit符号付整数で、-128〜127の値を取る。
下記の変数が使用できる。
変数の値はLoad()
関数で設定される。
変数名 | 型 | 説明 |
---|---|---|
hsize |
int | 画像の横幅 |
vsize |
int | 画像の高さ |
image |
Cell ** | 画像そのもの |
hsum |
Cell ** | 水平方向に黒が連続してならんでいる数のリスト |
vsum |
Cell ** | 垂直方向に黒が連続してならんでいる数のリスト |
画像image
はポインタへのポインタとして宣言されているが、
使う時には2次元配列と考えれば良い。
座標(x, y)の値は
image[y][x]
となる。
添字がy, xの順になっているので注意すること。
左上がimage[0][0]
となる。
値は定数CellUnknown
,
CellBlack
, CellWhite
のいずれかを用いる。
水平方向に黒が連続してならんでいる数のリストhsum
も
2次元配列と考えれば良い。
第y列目で、
黒が連続してならんでいる第n番目のブロックの長さが
hsum[y][n]
となる。
yもnも0
から始まるので注意すること。
これ以上黒のブロックが存在しない時は
hsum[y][n]
が0
となる。
横一列が真っ白の時には、
hsum[y][0]
が0
となる。
hsum[y][n]
が負の値である場合には、
画像表示関数Show()
は絶対値に*
マークを付加する。
確定したブロックに印を付けたい時に利用できる。
垂直方向に黒が連続してならんでいる数のリストvsum
も
2次元配列と考えれば良い。
第x行目で、
黒が連続してならんでいる第n番目のブロックの長さが
vsum[x][n]
となる。
xもnも0
から始まるので注意すること。
これ以上黒のブロックが存在しない時は
vsum[x][n]
が0
となる。
縦一列が真っ白の時には、
vsum[y][0]
が0
となる。
vsum[y][n]
が負の値である場合には、
画像表示関数Show()
は絶対値に*
マークを付加する。
確定したブロックに印を付けたい時に利用できる。
以下の関数が使用できる。
void Load(char *filename);
void Show();
Illust1.c
に、
ファイルを読み込んで、画像を表示するところまでが書いてある。
イラストロジックを解く部分を作成する。
#
」で始まる行はコメント (無視される)
#
# hsize
5
# vsize
5
#
# 1: ##### : 5
# 2: # # : 1 1
# 3: ### : 3
# 4: # : 1
# 5: :
# 14121
# 1 1
#
# hsum
5
1 1
3
1
# vsum
1 1
4
1 1
2
1
#
アーカカイバの種類が違うだけで、どちらも中身は同じです。
(作成: 2003年4月17日, 最終更新: 2003年6月6日)