C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Java乱数表示の数合えゲームプログラム


(過去ログ 83 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■49115 / inTopicNo.1)  Java乱数表示の数合えゲームプログラム
  
□投稿者/ takuya (1回)-(2010/04/22(Thu) 19:00:47)

分類:[Java] 

以下のように作成していたのですが、表示がおかしく答えにたどり着かないのですが、どこを改善したらよろしいでしょうか?


import java.util.Scanner;
import java.util.Random;
public class Exercise2 {
	public static void main (String[] args){
		Scanner stdIn = new Scanner (System.in);
		Random rand = new Random();
		System.out.println("★☆★数当てゲーム★☆★\n");
		System.out.println("遊び方:ジャンケンの手の選択は、0・・・グー/ 1・・・チョキ/ 2・・・パー とします。\n" +
		"    ジャンケンで勝ったほうが回答権が得られます。\n");
		System.out.print("初めに回答する数字の範囲を決定します。\n学籍番号の下2桁を入力してください。→ ");
		int num = stdIn.nextInt();
		System.out.print("好きな整数を入力してください。→ ");
		int who = stdIn.nextInt();
		int ran = rand.nextInt( 2*num+1);
		int pm = ran - num; //乱数の範囲整数±学籍番号下2桁
		int Ans = pm + who; //ランダムに選択された整数
		int aOwn = 0,aCom =0,c=1;
		int lim = (int)(Math.random()*10)+(int)(Math.random()*10)+1;
		System.out.println("回答できるチャンスは合計" + lim +"回です。頑張ってください!");
		for(int i=1; i<=lim ;i++)
		{
			System.out.println("第" + i + "回戦目です!");
			System.out.print("最初はグー、じゃんけん、ぽん! → ");//もし、0,1,2以外の入力がきたらどうする?
			int own = stdIn.nextInt();
			int com = (rand.nextInt(101))%3;
			switch( own )
			{
			case 0: System.out.print("グー vs "); break;
			case 1: System.out.print("チョキ vs "); break;
			case 2: System.out.print("パー vs "); break;
			}
			switch( com )
			{
			case 0: System.out.println("グー"); break;
			case 1: System.out.println("チョキ"); break;
			case 2: System.out.println("パー"); break;
			}
			while( own == com )
			{
				System.out.print("あいこで、しょっ! → ");
				own = stdIn.nextInt();
				com = (rand.nextInt(101))%3;
				switch( own )
				{
				case 0: System.out.print("グー vs "); break;
				case 1: System.out.print("チョキ vs "); break;
				case 2: System.out.print("パー vs "); break;
				}
				switch( com )
				{
				case 0: System.out.println("グー"); break;
				case 1: System.out.println("チョキ"); break;
				case 2: System.out.println("パー"); break;
				}
				
			}
			if((own==0&&com==1)||(own==1&&com==2)||(own==2&&com==0))
			{
				System.out.print("あなたの予想はいくつ? → ");
				aOwn = stdIn.nextInt();
			}
			else 
			{
				int rCom = rand.nextInt( 2*num+1 );
				int wCom = rCom - num;
				aCom = who + wCom;
				System.out.println("NPCの予想 → " + aCom );
			}
			if((aOwn==Ans)||(aCom==Ans))
			{
				System.out.println("正解です。答えは、"+ Ans +"でした。");
				break;
			}
			else if( c==lim )
			{
				if((aOwn!=Ans)||(aCom!=Ans))
				System.out.println("残念でした。答えは、"+ Ans + "でした。また、やってみてね!");
			}
			else 
			{
				if((aOwn<Ans)) //表示がおかしい
				{
					System.out.println("予想より大きいです、考え直しましょう!");
					c++;
					continue;
				}
				if((aCom<Ans)) //表示がおかしい
				{
					System.out.println("予想より大きいです、考え直しましょう!");
					c++;
					continue;
				}
				else if(aOwn>Ans) //表示がおかしい
				{
					System.out.println("予想より小さいです、考え直しましょう!");
					c++;
					continue;
				}
				else if(aCom>Ans) //表示がおかしい
				{
					System.out.println("予想より小さいです、考え直しましょう!");
					c++;
					continue;
				}
			}
		}
	}
}

引用返信 編集キー/
■49120 / inTopicNo.2)  Re[1]: Java乱数表示の数合えゲームプログラム
□投稿者/ .SHO (1310回)-(2010/04/22(Thu) 23:22:28)
No49115 (takuya さん) に返信

Debug しましょ!
引用返信 編集キー/
■49124 / inTopicNo.3)  Re[2]: Java乱数表示の数合えゲームプログラム
□投稿者/ Jitta on the way (618回)-(2010/04/23(Fri) 07:49:39)
No49120 (.SHO さん) に返信
> ■No49115 (takuya さん) に返信
>
> Debug しましょ!

いや、設計が先。
・じゃんけんの手の表示は、1回にできる
・携帯で見ているのでインデント量しか見ていないが、繰り返しの場所がおかしい
引用返信 編集キー/
■49137 / inTopicNo.4)  Re[3]: Java乱数表示の数合えゲームプログラム
□投稿者/ takuya (2回)-(2010/04/23(Fri) 15:44:24)
No49124 (Jitta on the way さん) に返信
> ■No49120 (.SHO さん) に返信
>>■No49115 (takuya さん) に返信
>>
>>Debug しましょ!
>
> いや、設計が先。
> ・じゃんけんの手の表示は、1回にできる
> ・携帯で見ているのでインデント量しか見ていないが、繰り返しの場所がおかしい
解決済み
引用返信 編集キー/
■49154 / inTopicNo.5)  Re[4]: Java乱数表示の数合えゲームプログラム
□投稿者/ れお (1回)-(2010/04/24(Sat) 20:14:56)
VBにしとけよ。
VBでなんでも作れるぞ。
VBでやれなきゃ、何言語をやってもいっしょ。

引用返信 編集キー/
■49183 / inTopicNo.6)  Re[5]: Java乱数表示の数合えゲームプログラム
□投稿者/ Jitta on the way (619回)-(2010/04/26(Mon) 07:22:18)
No49154 (れお さん) に返信
> VBにしとけよ。
> VBでなんでも作れるぞ。
> VBでやれなきゃ、何言語をやってもいっしょ。
>
設計が出来なきゃどの言語でも出来ない。
引用返信 編集キー/
■49185 / inTopicNo.7)  Re[6]: Java乱数表示の数合えゲームプログラム
□投稿者/ みきぬ (877回)-(2010/04/26(Mon) 10:27:59)
> int com = (rand.nextInt(101))%3;

これだと(乱数の範囲が 0〜100 なので)パーを出す確率が若干低くなるけど、意図的かしら?
引用返信 編集キー/
■49238 / inTopicNo.8)  Re[7]: Java乱数表示の数合えゲームプログラム
□投稿者/ れお (2回)-(2010/04/27(Tue) 19:47:31)
あのねジタ君>ぼくは脳内でフロチャートを作成して、脳内で暗算処理するんで、なんでも設計できますよ!!

以上。
引用返信 編集キー/
■49240 / inTopicNo.9)  Re[8]: Java乱数表示の数合えゲームプログラム
□投稿者/ Jitta (638回)-(2010/04/27(Tue) 22:11:46)
No49238 (れお さん) に返信
> あのねジタ君>ぼくは脳内でフロチャートを作成して、脳内で暗算処理するんで、なんでも設計できますよ!!
>
> 以上。
れおさんはtakuyaさんですか?
引用返信 編集キー/
■49241 / inTopicNo.10)  Re[1]: Java乱数表示の数合えゲームプログラム
□投稿者/ Jitta (639回)-(2010/04/27(Tue) 22:12:24)
No49115 (takuya さん) に返信

> int ran = rand.nextInt( 2*num+1);
> int pm = ran - num; //乱数の範囲整数±学籍番号下2桁
 ran は1〜(num*2)を取り得る。したがって、ran < num の場合もあり、Ans が負数になることもあり得る。
これは、意図通りでしょうか?

> switch( own )
> {
>   case 0: System.out.print("グー vs "); break;
>   case 1: System.out.print("チョキ vs "); break;
>   case 2: System.out.print("パー vs "); break;
> }
 自分と com の「手」なんだから、ひとつのオブジェクト。そうすると、こんなふうに何度も switch する必要はなくなる。

> while( own == com )
> {
>   System.out.print("あいこで、しょっ! → ");
>   (略)
> }
 最初は「あいこ」と考えると、1回に省略できる。

// 最初はグー
HandShape own = new HandShape(STONE);
HandShape com = new HandShape(STONE);
while (own.Check(com) == DRAW) {
  // ここで手を入力
  if (own.Check(com) == WIN) {
    // 「あなた」が勝った
    break;
  } elseif (com.Check(own) == WIN) {
    // 「com」が勝った
    break;
  }
  // あいこでしょ
}

> int rCom = rand.nextInt( 2*num+1 );
> int wCom = rCom - num;
> aCom = who + wCom;
> System.out.println("NPCの予想 → " + aCom );
 あなたは、「より大きい」「より小さい」という情報から、予想する範囲を絞るはず。
com にも同じように「考えさせ」ましょう。

int comSmall = 0;
int comBig = num * 2;
int aCom = comSmall 〜 comBig の間の数
// 「予想より大きい」で、comSmall を予想した数に合わせる
// 「予想より小さい」で、comBig を予想した数に合わせる


> if((aOwn<Ans)) //表示がおかしい
 どういう状態を期待して、どういう状態になるから「おかしい」と判断したのか。
それがわからなければ何とも言えない。
com の番なのに「あなた」が予想した結果を表示する?

引用返信 編集キー/
■49273 / inTopicNo.11)  Re[2]: Java乱数表示の数合えゲームプログラム
□投稿者/ れお (3回)-(2010/04/28(Wed) 18:41:09)
れおはレオですよ。
論理演算で処理すれば?

<ふむ> がんばれ^^</ふむ>
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -