新生活を充実させるための「こだわり」を取材!!

C言語で三目並べ(いわゆる○×)をするプログラムを作成したいのですがうまくいきません;;
どなたか教えてください。よろしくお願いします。

条件
・コンピュータの手はランダムに決定するものとする(空いているところに打つ)
・盤面を表現する配列は3×3の二次元配列とし、グローバルに宣言する
・以下のような関数を作成すること:盤の表示、○×を打つ、3つ並んだかチェック
・他にも必要に応じて関数を宣言すること

ヒント集
・マスの状態は空:0 ○:1 ×:2など数値で定義するとよい。
・char stone[3][3]={"-","○","×"};などと宣言しておくと便利?
・9マスしかないので、9マス打ち切ったら終了→このとき勝敗が決まっていなければ引き分け
・ループの考え方は2通りできる
 1.先手後手がセットで1ループ、9マス目に先手が打ったらbreak
2.先手、後手それぞれ1ループ,nマス目は、n%2=0なら先手、n%2=1な  ら後手
・三目並んだかのチェックは工夫のしどころ
 ・手盤の人の石だけチェックする
 ・打ったところの縦横は必ずチェック、斜めはどうする?
・作っていく順
 ・石の入力+盤面表示、コンピュータの手番、3つ並んだかチェック、勝敗表示
 ・石の入力+盤面表示、3つ並んだかチェック、勝敗表示、コンピュータの手番

教えて!goo グレード

A 回答 (3件)

#include<stdio.h>


#include<stdlib.h>
#include<windows.h>

#define NONE 0
#define MARU 1
#define BATU 2

#define MY 0
#define COM 1

int tbl[3][3]={NONE};

int CheckJudge(int Col)
{
if(tbl[0][0]==Col && tbl[1][0]==Col && tbl[2][0]==Col) return 1;
if(tbl[0][1]==Col && tbl[1][1]==Col && tbl[2][1]==Col) return 1;
if(tbl[0][2]==Col && tbl[1][2]==Col && tbl[2][2]==Col) return 1;

if(tbl[0][0]==Col && tbl[0][1]==Col && tbl[0][2]==Col) return 1;
if(tbl[1][0]==Col && tbl[1][1]==Col && tbl[1][2]==Col) return 1;
if(tbl[2][0]==Col && tbl[2][1]==Col && tbl[2][2]==Col) return 1;

if(tbl[0][0]==Col && tbl[1][1]==Col && tbl[2][2]==Col) return 1;
if(tbl[2][0]==Col && tbl[1][1]==Col && tbl[0][2]==Col) return 1;

return 0;
}

void DrawCell(void)
{
int i,j;

printf(" 0 1 2\n");
for(i=0;i<3;i++)
{
printf(" %d",i);
for(j=0;j<3;j++)
{
switch(tbl[j][i])
{
case MARU:
printf("○");
break;
case BATU:
printf("×");
break;
case NONE:
printf("□");
break;
}
}
printf("\n");
}
}

int CheckPut(int x,int y)
{
if(tbl[x][y]==0)
return 1;
else
return 0;
}

int AIOfCOM(void)
{
int rx,ry;

printf("コンピュータの番です。\n");

Sleep((rand()%2+1)*1000);//ランダム秒待つ

do{
rx=rand()%3;
ry=rand()%3;
}while(CheckPut(rx,ry)==0);
tbl[rx][ry]=BATU;
printf("コンピュータは(%d,%d)に打ちました。\n",rx,ry);
}

int ChangeJunban(int *junban)
{
*junban^=1;
}

int main(void)
{
int tex,tey;
int junban=0;
srand(time(NULL));
int cnt=0;
while(1)
{
DrawCell();

if(junban==MY)
if(CheckJudge(MARU)==1)
{
printf("プレイヤーの勝ちです。\n");
break;
}
else
if(CheckJudge(BATU)==1)
{
printf("コンピュータの勝ちです。\n");
break;
}

switch(junban)
{
case MY:
do{
printf("プレイヤーの番です。\nx,yの規則で入力してください。\n");
scanf("%d,%d",&tex,&tey);
}while(CheckPut(tex,tey)==0);
tbl[tex][tey]=MARU;
break;
case COM:
AIOfCOM();
break;
}

ChangeJunban(&junban);

cnt++;
if(cnt>8)
{
printf("引き分けです。\n");
break;
}
Sleep(3000); //3秒待つ
system("cls");
}

return 0;
}
    • good
    • 6

なにがうまくいかないのでしょうか?


質問が読み取れません。


「C言語で」
だけでは環境が読み取れません。
Windowsアプリなのか、コンソールアプリなのか、
コンパイラは何なのか
実行環境は何なのか etc.

ちなみに、問題の丸投げやってくださいってのは回答が付きませんので。
タダで全部やるって人はそうはいません。
    • good
    • 4

>うまくいきません;;


何がうまくいかないのか一切提示がありません。
ソースの提示と「うまくいかない」内容を説明してください。
(3行目からは課題の設問の丸写しだけのようですし)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング