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つ並んだかチェック、勝敗表示、コンピュータの手番
A 回答 (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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 石取りゲーム 3 2023/02/02 15:46
- Java Java 南京錠 2 2023/02/04 11:46
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- フリーソフト libreoffice drawのツールバーのチェックが外れてしまう 1 2022/10/04 22:02
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- 囲碁・将棋 詰めろ手順の覚え方 2 2022/08/10 06:33
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- 囲碁・将棋 攻めるに対する相手の応手 4 2022/07/12 06:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
入力を待たずにstdinの監視をし...
-
課題なんですが・・・
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語の配列をC++のvectorに高...
-
「{ } で囲むだけ」は正しい?
-
野球の対戦成績のテーブル表示...
-
OpenCVで平均濃度の求め方
-
二つの値を交換する関数形式マクロ
-
文字列の構造体キャスト
-
Win32APIで作るコンボボックス...
-
C言語の基礎 . 2乗値の差につ...
-
アスタリスクでダイヤ型を作る
-
部分行列の抜き出し(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
c言語の配列を使ってサイコロを...
-
課題でつまってます・・・
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報