マスターマインドゲームを作る課題なのですが全くできません。
ルール
出題者・解答者の2組に分ける。
出題者は解答者に分からないように、0~9間み数値及び数値の並ぶ順番を4つ決める。
数値は4つともバラバラにし、同じ数値が2回以上重ならない事が条件。
解答者は、それぞれの数値を予想し、回答させる。解答側も1回の解答で同じ数値を2回以上発言してはならない。
出題者は解答者の予想を判定する。
数値の値、数値の位置ともに正しい場合、「ヒット」と言う。
数値は正しいが、位置が違う場合、「ブロー」と言う。
出題者は解答者の答えを聞き、ヒット・ブローの数を報告する。
解答者は出題者のヒット・ブローの数を参考に、全てヒットになるまで何度も繰り返す。
全てヒットするまで、おこなった解答者の回数を競う。
例
3 7 5 1 (正解値。公表しない)
1・3・2・4 :1ブロー
3・5・6・9 :1ヒット、1ブロー
1・3・5・5 :エラー
1・3・5・4 :1ヒット、2ブロー
3・5・4・1 :2ヒット、1ブロー
3・4・5・1 :3ヒット
3・6・5・1 :3ヒット
3・7・5・1 :4ヒット
クリアー!
クリアーまでに8回掛かりました。
Microsoft Visual Studio 2008を使ってます。
配列を使用する。
#include命令のヘッダーファイルは、 <stdio.h>しか習ってません。
出題者はコンピュータで、適当な数値を4つ生成する。
記憶する情報及び解答情報を、それぞれ配列に設定する事が前提条件。
どなたか分かるかたいたらソースをかいてください。
課題ができなくて困ってます
Re:課題ができなくて困ってます
この通りに描写しないといけないんですか?
作ってみましたが、
結構難しいですね。
scanfのあと改行をどうしてもしてしまって私には無理そうです。
それと、丸投げだと思われるのでちゃんと
自分でやった分も書いといたほうがいいですよ?
(自分でやった分がないのは論外ですが…)
作ってみましたが、
結構難しいですね。
scanfのあと改行をどうしてもしてしまって私には無理そうです。
それと、丸投げだと思われるのでちゃんと
自分でやった分も書いといたほうがいいですよ?
(自分でやった分がないのは論外ですが…)
Re:課題ができなくて困ってます
この通りでなくても大丈夫です。
提出が今日なので、めちゃくちゃ焦ってます。
この課題を出さなきゃ、単位を落とすので・・・。
もし、出来ているのであればソースコードを書いてもらえませんか。
提出が今日なので、めちゃくちゃ焦ってます。
この課題を出さなきゃ、単位を落とすので・・・。
もし、出来ているのであればソースコードを書いてもらえませんか。
Re:課題ができなくて困ってます
不完全ですよ?
入力の設定まだしてませんし…
<tt>
#include<stdio.h>
int main(void){
int buff[4][2],
a,b,cont;
int hit,
buror;
for(a=0;a<4;a++)
buff[a][0]=rand()%10;
do{
cont++;
scanf("%d,%d,%d,%d",&buff[0][1],&buff[1][1],&buff[2][1],&buff[3][1]);
// printf("\t");
hit=0;
buror=0;
for(a=0;a<4;a++){
if(buff[a][0]==buff[a][1])hit++;
for(b=0;b<4;b++)
if(a!=b && buff[a][0]==buff[1])buror++;
}
if(0<hit)printf("ヒット:%d,",hit);
if(0<buror)printf("ブロー:%d",buror);
printf("\n");
}while(hit<4);
printf("クリアー\n"
"クリアーまで%d回かかりました",cont);
}
</tt>
入力の設定まだしてませんし…
<tt>
#include<stdio.h>
int main(void){
int buff[4][2],
a,b,cont;
int hit,
buror;
for(a=0;a<4;a++)
buff[a][0]=rand()%10;
do{
cont++;
scanf("%d,%d,%d,%d",&buff[0][1],&buff[1][1],&buff[2][1],&buff[3][1]);
// printf("\t");
hit=0;
buror=0;
for(a=0;a<4;a++){
if(buff[a][0]==buff[a][1])hit++;
for(b=0;b<4;b++)
if(a!=b && buff[a][0]==buff[1])buror++;
}
if(0<hit)printf("ヒット:%d,",hit);
if(0<buror)printf("ブロー:%d",buror);
printf("\n");
}while(hit<4);
printf("クリアー\n"
"クリアーまで%d回かかりました",cont);
}
</tt>

Re:課題ができなくて困ってます
あれ?
randって使えませんでした?
すいません…どうしよう…Randにしてみたら行けるかも…
(普通にc言語で書いてたので…だって楽ですし…)
randって使えませんでした?
すいません…どうしよう…Randにしてみたら行けるかも…
(普通にc言語で書いてたので…だって楽ですし…)
Re:課題ができなくて困ってます
・・・
何かランダムな数を出す関数(命令?)知ってたら使ってください。
知らないのなら難しいかもです…だれか来ないかな?
非常に汚いのでできれば張りたくないような悲惨なプログラムになってきた気がするのですが…
#include<stdio.h>
int main(void){
int buff[4][2],
a,b,cont=0;
int hit,
buror;
//正解の値を入力します。
for(a=0;a<4;a++)
buff[a][0]=rand()%10;
//ループ
do{
//何ターン目かを数えます
cont++;
//初期化します
hit=0;
buror=0;
//自分の答えを入力します。注意:数字打つごとに','を入力しないといけません
scanf("%d,%d,%d,%d",&buff[0][1],&buff[1][1],&buff[2][1],&buff[3][1]);
// printf("\t");
//かぶりがないのか確認(ついでに9以下であることも確認)
for(a=0;a<3;a++)
for(b=a+1;b<4;b++)
if(buff[a][1]==buff[1] || 9<buff[1] || 9<buff[1]){
hit=-1;
}
//違反がなければ
if(hit==0){
//hit数及びブロー数を数えます
for(a=0;a<4;a++){
if(buff[a][0]==buff[a][1])hit++;
for(b=0;b<4;b++)
if(a!=b && buff[a][0]==buff[1])buror++;
}
//描写します
if(0<hit)printf("ヒット:%d,",hit);
if(0<buror)printf("ブロー:%d",buror);
printf("\n");
}else{
//もしもの時のため
printf("ルール違反\n");
}
//ループ条件(ヒット数が4だった時)
}while(hit<4);
//終わりの合図
printf("クリアー\n"
"クリアーまで%d回かかりました",cont);
return 0;
}
無理やりねじ込みました。
ランダムどうしましょう・・・
DXライブラリ用のものとrand以外知らないのですが…
後は時間でも習得するしか…
何かランダムな数を出す関数(命令?)知ってたら使ってください。
知らないのなら難しいかもです…だれか来ないかな?
非常に汚いのでできれば張りたくないような悲惨なプログラムになってきた気がするのですが…
#include<stdio.h>
int main(void){
int buff[4][2],
a,b,cont=0;
int hit,
buror;
//正解の値を入力します。
for(a=0;a<4;a++)
buff[a][0]=rand()%10;
//ループ
do{
//何ターン目かを数えます
cont++;
//初期化します
hit=0;
buror=0;
//自分の答えを入力します。注意:数字打つごとに','を入力しないといけません
scanf("%d,%d,%d,%d",&buff[0][1],&buff[1][1],&buff[2][1],&buff[3][1]);
// printf("\t");
//かぶりがないのか確認(ついでに9以下であることも確認)
for(a=0;a<3;a++)
for(b=a+1;b<4;b++)
if(buff[a][1]==buff[1] || 9<buff[1] || 9<buff[1]){
hit=-1;
}
//違反がなければ
if(hit==0){
//hit数及びブロー数を数えます
for(a=0;a<4;a++){
if(buff[a][0]==buff[a][1])hit++;
for(b=0;b<4;b++)
if(a!=b && buff[a][0]==buff[1])buror++;
}
//描写します
if(0<hit)printf("ヒット:%d,",hit);
if(0<buror)printf("ブロー:%d",buror);
printf("\n");
}else{
//もしもの時のため
printf("ルール違反\n");
}
//ループ条件(ヒット数が4だった時)
}while(hit<4);
//終わりの合図
printf("クリアー\n"
"クリアーまで%d回かかりました",cont);
return 0;
}
無理やりねじ込みました。
ランダムどうしましょう・・・
DXライブラリ用のものとrand以外知らないのですが…
後は時間でも習得するしか…

Re:課題ができなくて困ってます
一応
間違えてた時のために説明文を書いておきました。
できればわからないところを一つ一つ聞きたかったのですが…
仕方ないですね…私も明日学校ですし…
ご武運を
ここの掲示板丸投げ禁止(当然ですが)なので、
今度からは自分でプログラムを書いてみて(間違いだらけでも大丈夫です)、
それを書き込むようにしてくださいね。
(できればもっと早い時間に…)
間違えてた時のために説明文を書いておきました。
できればわからないところを一つ一つ聞きたかったのですが…
仕方ないですね…私も明日学校ですし…
ご武運を
ここの掲示板丸投げ禁止(当然ですが)なので、
今度からは自分でプログラムを書いてみて(間違いだらけでも大丈夫です)、
それを書き込むようにしてくださいね。
(できればもっと早い時間に…)