- 締切済み
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つ並んだかチェック、勝敗表示、コンピュータの手番
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- TKOZ
- ベストアンサー率66% (2/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; }
- bluecampus
- ベストアンサー率66% (138/209)
なにがうまくいかないのでしょうか? 質問が読み取れません。 「C言語で」 だけでは環境が読み取れません。 Windowsアプリなのか、コンソールアプリなのか、 コンパイラは何なのか 実行環境は何なのか etc. ちなみに、問題の丸投げやってくださいってのは回答が付きませんので。 タダで全部やるって人はそうはいません。
- SilverThaw
- ベストアンサー率32% (260/806)
>うまくいきません;; 何がうまくいかないのか一切提示がありません。 ソースの提示と「うまくいかない」内容を説明してください。 (3行目からは課題の設問の丸写しだけのようですし)