4*4のマルバツゲーム

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

4*4のマルバツゲーム

#1

投稿記事 by K » 9年前

↓のような感じで4*4の○×ゲームを作成中なんですが、勝敗、引き分け、○×の入力の仕方が分かりません・・・それとあと何が必要でしょうか?
教えていただけると幸いです。

コード:

v#include <stdio.h>

int main()
{

  int masu[4][4];
  int input[2];
  int zyunban;
  int kaisuu;
  int a,b,c;



  int a;  
  a = 0;

masu[0][0] = 2;
masu[0][1] = 2;
masu[0][2] = 2;
masu[0][3] = 2;
masu[1][0] = 2;
masu[1][1] = 2;
masu[1][2] = 2;
masu[1][3] = 2;
masu[2][0] = 2;
masu[2][1] = 2;
masu[2][2] = 2;
masu[2][3] = 2;
masu[3][0] = 2;
masu[3][1] = 2;
masu[3][2] = 2;
masu[3][3] = 2;



if(zyuban == 0) {
zyunban = 1;
}
 else {zyunban = 0;}

}



  for(b= 0; b < 3; b++){
    for(c = 0; c < 3 ; c++){
     printf("l%d",masu[x][y]);
}
  printf("l\n");
  printf("----------------\n");

     
masu[x][y]
    int x;
    printf("縦の座標;");
    scanf("%d",&x);

    printf("横の座標;");
    scanf("%d",&y);

}
}



アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: 4*4のマルバツゲーム

#2

投稿記事 by bitter_fox » 9年前

コード:

v#include <stdio.h>
 
int main()
{
	int masu[4][4];
	int input[2];
	int zyunban;
	int kaisuu;
	int a,b,c;

	int a;
	a = 0;

	masu[0][0] = 2;
	masu[0][1] = 2;
	masu[0][2] = 2;
	masu[0][3] = 2;
	masu[1][0] = 2;
	masu[1][1] = 2;
	masu[1][2] = 2;
	masu[1][3] = 2;
	masu[2][0] = 2;
	masu[2][1] = 2;
	masu[2][2] = 2;
	masu[2][3] = 2;
	masu[3][0] = 2;
	masu[3][1] = 2;
	masu[3][2] = 2;
	masu[3][3] = 2;

	if(zyuban == 0)
	{
		zyunban = 1;
	}
	else
	{
		zyunban = 0;
	}
} // main関数終わり

for(b= 0; b < 3; b++)
{
	for(c = 0; c < 3 ; c++)
	{
		printf("l%d",masu[x][y]);
	}

	printf("l\n");
	printf("----------------\n");

	masu[x][y]
	int x;

	printf("縦の座標;");
    scanf("%d",&x);

    printf("横の座標;");
    scanf("%d",&y); 
}
} // あまり

codeタグを貼り付けておきながら全然インデント出来てないので、インデント版を載せます。
何が必要かの前に、これってコンパイル通ってますか?
includeの前のvが誤植だったとしてもこれで、コンパイルが通るとは到底思えません。

パッと見の問題点を以下にあげておきます。
1.int aが多重定義されている。
2.main関数が予期しないところで終わってる。それに伴って最後の括弧があまっている。
3.x及びyの定義がすんでいないにもかかわらず。配列へのアクセスに使われている。
4.謎の一文、
masu[x][y]がある。
5.そもそもyが定義されていない。

あとは、アルゴリズム等の問題
6.masuを初期化するのをmain関数に書いてしまっており、非常に見にくいので関数化する。
7.どんな出力になったら成功かはわかりませんがKさんのコードだとこのような出力になります。(配列のアクセスが適切だった場合)(入力も適切に行ったとする)
l2l2l2l
----------------
縦の座標;2
横の座標;2

こんな感じの出力が3回繰り返されますが、おそらく望んだ出力ではないのではないでしょうか?
[hr][追記]
4*4の前提をついつい忘れてしまっていてスルーしてしまいましたがもうひとつ。
8.ループの条件が適切でなくすべての配列に対してアクセスできていないです。
4*4なのであればループ継続条件は果たして
b < 3で良いのでしょうか?
[hr][追記]パコネコさんお疲れ様です。
何で、あんなに頑張って同じこと書いてしまうのでしょうね、僕も頑張った記憶がありますが。。。

zyubanは見逃してましたwww
ご補足ありがとうございます。
[hr]コン?パロディしたかったがために追記したのはナイショ。。。
最後に編集したユーザー bitter_fox on 2010年12月15日(水) 03:37 [ 編集 1 回目 ]

アバター
パコネコ
記事: 139
登録日時: 9年前
住所: 大阪

Re: 4*4のマルバツゲーム

#3

投稿記事 by パコネコ » 9年前

bitter_foxさんの言うように問題点が多そうですね・・・
↓のmasuの初期化はすべて2にしてますよね。

コード:

    masu[0][0] = 2;
    masu[0][1] = 2;
    masu[0][2] = 2;
    masu[0][3] = 2;
    masu[1][0] = 2;
    masu[1][1] = 2;
    masu[1][2] = 2;
    masu[1][3] = 2;
    masu[2][0] = 2;
    masu[2][1] = 2;
    masu[2][2] = 2;
    masu[2][3] = 2;
    masu[3][0] = 2;
    masu[3][1] = 2;
    masu[3][2] = 2;
    masu[3][3] = 2;
すべて同じ数値を入れるのなら、ループを使ったほうがいいと思います。
関数にしろとまでは言いませんが書くの大変じゃなかったですか?
例えば

コード:

for(a=0;a<4;a++)
     for(b=0;b<4;b++)
          masu[a][b]=2;
としたほうが楽ではないでしょうか?
次に
打ち間違いでしょうが

コード:

if(zyuban == 0) {
zyunban = 1;
}
これも間違いですよね。

コード:

  for(b= 0; b < 3; b++){
    for(c = 0; c < 3 ; c++){
     printf("l%d",masu[x][y]);
描写されるのはすべて同じ数値ですがあってますか?
仮に

コード:

  for(y= 0; y < 3; y++){
    for(x = 0; x < 3 ; x++){
     printf("l%d",masu[x][y]);
にしたとしても
これではmasu[0~2][0~2]ですがあってますか?

一度自分ですべてにコメント文を追加することをお勧めします。
(私が書いたことはほぼすべてbitter_foxさんがご指摘してますけどね・・・)

==========

コード:

.









.
#include<stdio.h>
int main(void){
	char buff[4]={'o','x','H','\0'};//描写用
	int a,b;//ループ用
	int masu[3][3]={0};//マス
	for(b=0;b<3;b++){
		for(a=0;a<3;a++)
			printf("%c",buff[masu[a][b]=2]);//描写&初期化
		printf("\n");//改行
	}
	printf("\n");
	return 0;
}
描写と初期化だけならこれだけで十分です。(3X3マスの場合です)
↑教育?上よろしくないという意見があれば消します。
(時々書きすぎてしまうので・・・)
=========
ところでバグが多くて肝心の質問内容の終了条件や入力の説明がまだだったり・・・
ニャン!!\(゜ロ\)(/ロ゜)/

閉鎖

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