• 締切済み

C言語で三目並べをするプログラムの作成

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つ並んだかチェック、勝敗表示、コンピュータの手番

みんなの回答

  • TKOZ
  • ベストアンサー率66% (2/3)
回答No.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; }

回答No.2

なにがうまくいかないのでしょうか? 質問が読み取れません。 「C言語で」 だけでは環境が読み取れません。 Windowsアプリなのか、コンソールアプリなのか、 コンパイラは何なのか 実行環境は何なのか etc. ちなみに、問題の丸投げやってくださいってのは回答が付きませんので。 タダで全部やるって人はそうはいません。

回答No.1

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

関連するQ&A