- 締切済み
hit&bolwのプログラミングができません
皆様、はじめまして 期末の課題でhit&blowが出たのですがテキストやネット検索しても参考になるのが出てこなかったので聞くことにしました #include "stdafx.h" #include <stdlib.h> #include <time.h> #include <conio.h> int main(int argc, char* argv[]) { int x1, x2, x3, x4; int a1, a2, a3, a4; int hit, blow, loop; int a = 1; printf("hit&blow\nゲーム四つの数をスペース入れて記述しろ\n"); srand(time(0)); do{ x1 = rand() % 10; x2 = rand() % 10; x3 = rand() % 10; x4 = rand() % 10; printf("%d %d %d %d\n",x1, x2, x3, x4); }while(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4 || x3 == x4); loop = 1; while(1 == loop){ scanf("%d", &a1); scanf("%d", &a2); scanf("%d", &a3); scanf("%d", &a4); fflush(stdin); hit = 0; blow = 0; if(x1 == a1){ hit = hit + 1; } if(x2 == a2){ hit = hit + 1; } if(x3 == a3){ hit = hit + 1; } if(x4 == a4){ hit = hit + 1; } if(x1 == a2 || x1 == a3 || x1 == a4){ blow = blow + 1; } if(x2 == a3 || x2 == a4 || x2 == a1){ blow = blow + 1; } if(x3 == a2 || x3 == a1 || x3 == a4){ blow = blow + 1; } if(x4 == a2 || x4 == a3 || x4 == a2){ blow = blow + 1; } printf(" %d hit %d blow\n", hit, blow); if(4 == hit){ loop = 0; } } return 0; } ここまでできたのですが 次の項目ができません (1)正解したときは新しいゲームを続けることができる (2)正解までの最小回数、最大回数を表示する (3)正解したら「○○回で正解しました」と表示する (4)0 0 0 0などの不正入力をできなくする 早急に教えてもらえると助かります
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- szkbksn
- ベストアンサー率0% (0/0)
先ほどの回答したものですが、 回答文からは、タブやスペースは消されてしまうようですね 自分でインデント入れてください
- szkbksn
- ベストアンサー率0% (0/0)
作ってみました なるべく元のプログラムを流用する形にしています 要求が多少あいまいだったので、私のほうで勘違いしているところもあるかもしれません。 動かしてみて勉強のご参考にしてください #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> unsigned short play1game(void) { int x1, x2, x3, x4; int a1, a2, a3, a4; int hit, blow; int a = 1; unsigned short loop;//正解までにかかった回数をカウントする srand(time(0)); do{ x1 = rand() % 10; x2 = rand() % 10; x3 = rand() % 10; x4 = rand() % 10; printf("%d %d %d %d\n",x1, x2, x3, x4); }while(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4 || x3 == x4); loop = 1; while(1){ do { printf("\n\n第%d回目回答 ", loop); printf("hit&blow ゲーム四つの数をスペース入れて記述しろ\n"); scanf("%d", &a1); scanf("%d", &a2); scanf("%d", &a3); scanf("%d", &a4); fflush(stdin); }while( ((a1|a2|a3|a4) == 0) && (printf("0 0 0 0 は入力できません再入力ください\n")) ); //(4)0 0 0 0などの不正入力をできなくする hit = 0; blow = 0; if(x1 == a1){ hit = hit + 1; } if(x2 == a2){ hit = hit + 1; } if(x3 == a3){ hit = hit + 1; } if(x4 == a4){ hit = hit + 1; } if(4 == hit){ printf("%2d回で正解しました\n", loop); //(3)正解したら「○○回で正解しました」と表示する goto exit; } if(x1 == a2 || x1 == a3 || x1 == a4){ blow = blow + 1; } if(x2 == a3 || x2 == a4 || x2 == a1){ blow = blow + 1; } if(x3 == a2 || x3 == a1 || x3 == a4){ blow = blow + 1; } if(x4 == a2 || x4 == a3 || x4 == a2){ blow = blow + 1; } printf(" %d hit %d blow\n", hit, blow); loop++; } exit: return loop; } int main(int argc, char* argv[]) { unsigned short maxAnswerTime, minAnswerTime; unsigned short gameAnswerTime; minAnswerTime = 0xffff; maxAnswerTime = 0; while(1) { //whileでまわして、(1)正解したときは新しいゲームを続けることができる printf("start game\n"); gameAnswerTime = play1game(); //1回ゲームを実施する if (gameAnswerTime > maxAnswerTime) maxAnswerTime=gameAnswerTime; if (gameAnswerTime < minAnswerTime) minAnswerTime=gameAnswerTime; printf("\n\n"); printf("最小回数:%d, 最大回数:%d\n\n", minAnswerTime, maxAnswerTime); //(2)正解までの最小回数、最大回数を表示する } }
お礼
時間のない中大変ありがとうございます さっそく参考にさせてもらいます