![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
学校の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で質問しましょう!
似たような質問が見つかりました
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- 登山・トレッキング ちゃんと読図を基本から学んだ人って、地形図と現実の地形を照合して現在位置を特定できるのですか? 4 2023/04/15 17:48
- ホームページ作成・プログラミング グリッドレイアウトHTMLとCSS 1 2023/02/22 02:36
- クラフト・工作 木材のマス目と板目につきまして 2 2023/06/29 06:16
- その他(学校・勉強) スシロー “ペロペロ高校生” は、日本の教育の失敗ですね? 20 2023/02/08 07:08
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- その他(プログラミング・Web制作) atcoder python コードへの助言 2 2022/08/12 15:31
- 専門店・ホームセンター テレビ、pc台を探しています。 3 2023/08/13 14:50
- 英語 会社で英語を使うことになっての英語の勉強方法 5 2022/07/03 11:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
error C2143: 構文エラー : ';'...
-
スレッドとメッセージキューに...
-
C言語 タイマーのソースについて
-
C言語プログラミング
-
Cプログラムについて
-
インクリメント演算子をprintf...
-
コマンドラインに出力した文字...
-
C言語の数値入力
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
hit&bolwのプログラミングがで...
-
プログラミング言語C
-
C言語のヘッダーファイルの作成...
-
C++ 二次関数の重解、虚数解が...
-
unsigned int型について
-
scanfで正しい値を入力できない
-
int型 00 を表示するのに0とな...
-
関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語での、年複利の計算方法...
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報