#include <stdio.h>
#define BOARD_W 8
#define BOARD_H 8
#define BLACK 0
#define WHITE 1
#define NONE 2
#define PUT_LINE(xx, yy) if ( put_line(0, p, x, y, xx, yy) ) if ( m ) put_line(1, p, x, y, xx, yy); else return 1;
char turn, board[][BOARD_W] = {
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE},
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE},
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE},
{NONE,NONE,NONE,BLACK,WHITE,NONE,NONE,NONE},
{NONE,NONE,NONE,WHITE,BLACK,NONE,NONE,NONE},
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE},
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE},
{NONE,NONE,NONE,NONE,NONE,NONE,NONE,NONE}};
char put_line(const char, char (*)[], const char, const char, const char, const char);
char put(const char, char (*)[], const char, const char);
char search(const char (*)[], const char, const char);
int main() {
char x, y;
for ( y = 0 ; y < BOARD_H ; ++y )
for ( x = 0 ; x < BOARD_W ; ++x )
if ( search(board, x, y) ) {
turn = !turn;
puts("On original board");
}
return 0;
}
char put_line(const char m, char (*p)[BOARD_W], const char x, const char y, const char xx, const char yy) {
char px, py;
for ( px = x + xx, py = y + yy ; px >= 0 && py >= 0 && px < BOARD_W && py < BOARD_H ; px += xx, py += yy )
if ( p[py][px] == !turn ) {
if ( m ) p[y][x] = turn;
} else {
if ( p[py - yy][px - xx] == !turn ) return 1;
return 0;
}
}
char put(const char m, char (*p)[BOARD_W], const char x, const char y) {
if ( p[y][x] == NONE ) {
PUT_LINE(0, 1)
PUT_LINE(1, 0)
PUT_LINE(1, 1)
PUT_LINE(-1, 0)
PUT_LINE(0, -1)
PUT_LINE(-1, -1)
PUT_LINE(1, -1)
PUT_LINE(-1, 1)
if ( m ) {
p[y][x] = turn;
turn = !turn;
}
}
return 0;
}
char search(const char (*s)[BOARD_W], const char x, const char y) {
if ( put(0, s, x, y) ) {
char d[BOARD_H][BOARD_W], px, py;
for ( py = 0 ; py < BOARD_H ; ++py )
for ( px = 0 ; px < BOARD_W ; ++px ) d[py][px] = s[py][px];
put(1, d, x, y);
for ( py = 0 ; py < BOARD_H ; ++py )
for ( px = 0 ; px < BOARD_W ; ++px )
if ( search(d, px, py) ) {
turn = !turn;
puts("On virtual board");
}
return 1;
}
return 0;
}
オセロのプログラムについて
オセロのプログラムについて
どうしてもこのコードがうまく動きません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: オセロのプログラムについて
とりあえず、どうしたらどうまく動かないか説明して頂けますか?
それとだれか他の方が作成したコードとお見受けします(違っていたらごめんなさい)。
今コンパイルしようている環境なども教えてください。
それとだれか他の方が作成したコードとお見受けします(違っていたらごめんなさい)。
今コンパイルしようている環境なども教えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: オセロのプログラムについて
このプログラムを実行すると無限ループのようになってしまいますが
放って置けば終了するのでしょうか?
自分で作成したものです
環境はubuntuです
放って置けば終了するのでしょうか?
自分で作成したものです
環境はubuntuです
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: オセロのプログラムについて
実行しても無限ループにしか見えませんね。
盤面がどうなっているか1ターンごとに経過を表示してみたらどうでしょうか?
盤面がどうなっているか1ターンごとに経過を表示してみたらどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: オセロのプログラムについて
全部追いかけたわけじゃないですけど、
72行目で、put関数の戻り値が0じゃない場合を想定してるように見えますが、
put関数のコードを見ると必ず0で戻ってますよね。
そのあたり、想定範囲内なんでしょうか?
72行目で、put関数の戻り値が0じゃない場合を想定してるように見えますが、
put関数のコードを見ると必ず0で戻ってますよね。
そのあたり、想定範囲内なんでしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: オセロのプログラムについて
あと、人に見てもらおうとするコードに全くコメントがないってのはどうなんでしょうね。
適所に的確なコメントが書いてあると、コードを追いかけてみようかな、
なんていう気持ちになりますが、今のコードではちょっと…。
適所に的確なコメントが書いてあると、コードを追いかけてみようかな、
なんていう気持ちになりますが、今のコードではちょっと…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。