
学校の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ランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報