
学校のC言語の授業で5×5マスの五目並べを作っています。
教科書を見ながら、がんばっていましたが行き詰ってしまったので、ヒントを下さい。
基本的なことしか習っていないので、あまり高度なことはできません。
行き詰った点
・すでに置かれているマスには置けないようにすること。
・縦、横、斜めのどれか5マス揃うと、勝利と表示されてゲームが終 了すること。
・引き分けの表示の仕方
面倒とは思いますが、どうかよろしくお願いします。
↓CPPファイル
ttp://sugar310.dip.jp/cgi/upload/source/up21525.jpg
ttp://sugar310.dip.jp/cgi/upload/source/up21527.zip
No.4ベストアンサー
- 回答日時:
nokyonへ
これあげる
#include<stdio.h>
int main(void){
static char a[6][6]={{' ','1','2','3','4','5'},
{'1',' ',' ',' ',' ',' '},
{'2',' ',' ',' ',' ',' '},
{'3',' ',' ',' ',' ',' '},
{'4',' ',' ',' ',' ',' '},
{'5',' ',' ',' ',' ',' '}};
int count=0,judge=0;
int i,j;
for(;;){
//盤の表示
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
//先手
for(;;){
for(;;){
printf("行\n");
scanf("%d",&i);
if(i==0)
continue;
if(i<6)
break;
printf("置けません\n");
}
for(;;){
printf("列\n");
scanf("%d",&j);
if(j==0)
continue;
if(j<6)
break;
printf("置けません\n");
}
if(a[i][j]!=' '){
printf("置けません\n");
continue;}
else if(a[i][j]=' '){
a[i][j]='X';
count++;
break;
}
}
//先手終了
//縦判定
for(j=1;j<6;j++){
judge=0;
for(i=1;i<6;i++){
if(a[i][j]=='X')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
}
//横判定
for(j=1;j<6;j++){
judge=0;
for(i=1;i<6;i++){
if(a[j][i]=='X')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
}
//斜め(右下がり)判定
judge=0;{
for(j=1;j<6;j++){
if(a[j][j]=='X')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}}
//斜め(右上がり)判定
judge=0;
for(i=1;i<6;i++){
if(a[i][6-i]=='X')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
if(count==25){
printf("引き分け");
}
//盤の表示
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
//後手
for(;;){
for(;;){
printf("行\n");
scanf("%d",&i);
if(i==0)
continue;
if(i<6)
break;
printf("置けません\n");
}
for(;;){
printf("列\n");
scanf("%d",&j);
if(j==0)
continue;
if(j<6)
break;
printf("置けません\n");
}
if(a[i][j]!=' '){
printf("置けません\n");
continue;}
else if(a[i][j]=' '){
a[i][j]='O';
count++;
break;
}
}
//縦判定
for(j=1;j<6;j++){
judge=0;
for(i=1;i<6;i++){
if(a[i][j]=='O')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
}
//横判定
for(j=1;j<6;j++){
judge=0;
for(i=1;i<6;i++){
if(a[j][i]=='O')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
}
//斜め(右下がり)判定
judge=0;{
for(j=1;j<6;j++){
if(a[j][j]=='O')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}}
//斜め(右上がり)判定
judge=0;
for(i=1;i<6;i++){
if(a[i][6-i]=='O')
judge++;
}
if(judge==5){
for(i=0;i<6;i++){
for(j=0;j<6;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
printf("you win!!");
return 0;}
if(count==25){
printf("引き分け");
}
//判定群終了
}
return 0;
}
No.3
- 回答日時:
・すでに置かれているマスには置けないようにすること。
置こうとしたマスが空でないならば、やり直し。
・縦、横、斜めのどれか5マス揃うと、勝利と表示されてゲームが終 了すること。
勝利判定(x,y){
i=0,j=0,n=0;
while{
i+=x;j+=y;
iマス右、jマス下が範囲外でなく、かつそのマスが自分の色ならば{
n++;
nが4ならば、return 勝ち;}
さもなくば、break;
}
i=0,j=0;
while{
i-=x;j-=y;
iマス右、jマス下が範囲外でなく、かつそのマスが自分の色ならば{
n++;
nが4ならば、return 勝ち;}
さもなくば、break;
}
return 未決着;
}
勝利判定(1,0);
勝利判定(1,1);
勝利判定(0,1);
勝利判定(1,-1);
とするか、あるいはマスの数が5×5しかないようなので全ての勝利パターンを地道に数えた方が早いかもしれない。
・引き分けの表示の仕方
置いた回数を数えておいて、
置いた回数がマス目の数ならば、引き分け。
No.1
- 回答日時:
>・すでに置かれているマスには置けないようにすること。
C言語での数値比較は=ではなく、==です。
等しく無いは、!=です。 例えば、
if((gyou>0)&&(gyou<6)&&(retsu>0)&&(retsu<6)&&(a[gyou][retsu]=' ')){
は、
if((gyou>0)&&(gyou<6)&&(retsu>0)&&(retsu<6)&&(a[gyou][retsu]==' ')){
//先手、横マスの5つの勝ちパターン
if((a[1][1]='X')&&(a[1][2]='X')&&(a[1][3]='X')&&(a[1][4]='X')&&(a[1][5]='X')){
は、
if((a[1][1]=='X')&&(a[1][2]=='X')&&(a[1][3]=='X')&&(a[1][4]=='X')&&(a[1][5]=='X')){
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語でAからZまでを表示する...
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
コンパイルエラーについて
-
コマンドプロンプトがすぐ消える
-
勝率をプログラムに
-
テキストカーソル位置の取得
-
三角形の判別
-
【C言語教えてください】sin波...
-
4の倍数を論理演算で表す。。
-
C言語で、「自然数nを入力し、n...
-
入力したお金の金額からお札の...
-
cshの文字列操作(0埋め)
-
switch分のケースを範囲数?に...
-
scanfに文字が入力されたときに...
-
プログラミングについての質問です
-
unsigned int型について
-
ダブルポインタで2次元配列を作成
-
円の面積を求めるプログラミン...
おすすめ情報