無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アキ

無題

#1

投稿記事 by アキ » 16年前

初心者です。
これをもっと短縮し、わかりやすくできないでしょうか。
よろしくお願いします。
ちなみに3目並べです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const char stone[/url][3] = {"‐", "○", "×"};
int board[3][3] = {0};

void print_board()
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%s", stone[board[j]]);
}
printf("\n");
}
printf("\n");
}

int check_board()
{
int i, j;
int s;

for (i = 0; i < 3; i++) {
s = 3;
for (j = 0; j < 3; j++) s &= board[j];
if (s) return s;

s = 3;
for (j = 0; j < 3; j++) s &= board[j];
if (s) return s;
}

s = 3;
for (i = 0; i < 3; i++) s &= board;
if (s) return s;

s = 3;
for (i = 0; i < 3; i++) s &= board[2-i];
if (s) return s;

return 0;
}

void input(int s)
{
int x, y;
printf("%sの番\n", stone);
do {
if (s == 1) {
while (scanf("%d %d", &x, &y) != 2) {
rewind(stdin);
}
} else if (s == 2) {
x = rand() % 3;
y = rand() % 3;
} else {
exit(1);
}
} while (x < 0 || 3 <= x || y < 0 || 3 <= y || board[y][x] != 0);

board[y][x] = s;
}

int main()
{
int turn = 0;
int winner;

srand((unsigned int)time(NULL));

while (print_board(), (winner = check_board()) == 0 && turn < 9) {
int s = (turn % 2) + 1;
input(s);
turn++;
}

if (winner == 0) {
printf("引き分け\n");
} else {
printf("%sの勝ち\n", stone[winne[/url]);
}

return 0;
}

non

Re:無題

#2

投稿記事 by non » 16年前

>これをもっと短縮し、わかりやすくできないでしょうか。
目的はなんでしょうか?自分で作ったのなら、それが一番わかりやすいと
思います。それとも、他人がみてわかりやすくということでしょうか?
よく考えて作ってあると思いますよ。

LUNA

Re:無題

#3

投稿記事 by LUNA » 16年前

わかりやすくするだけだったら、注釈文をつければいいのでは?
短縮は、初心者の私にとっては結構コンパクトなプログラムに見えますので何もいえませんw

閉鎖

“C言語何でも質問掲示板” へ戻る