じゃんけんゲームの勝敗の出し方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
じゃが

じゃんけんゲームの勝敗の出し方

#1

投稿記事 by じゃが » 16年前

じゃんけんゲームというのを作っているのですが、勝ち負けあいこを出そうとすると0で表示されてしまいます・・・。

わかる方ご解答お願いします。

またどこか簡単にできる部分もありましたらご指南お願いします。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

void Init()
{
	srand(time(NULL));
}


int Draw(int aiko ,int win ,int lose)
{
	int jibun , teki;
	printf("0.グー 1.チョキ 2.パー ");
	scanf("%d", &jibun);
	
	teki = rand() % 3;

	switch(teki)
	{
	case 0:
			printf("敵は%sです\n" , "グー");
			break;
	case 1:
			printf("敵は%sです\n" , "チョキ");
			break;
	case 2:
			printf("敵は%sです\n" , "パー");
			break;
	}

	if(jibun == teki)
	{
		printf("アイコです\n");
		aiko += 1;
	}
	else if((jibun == 0 && teki == 1) || (jibun == 1 && teki == 2) || (jibun == 2 && teki == 0) )
	{
		printf("勝ち\n");
		win += 1;
	}
	else	
	{
		printf("負け\n");
		lose += 1;
	}
	
	return aiko , win , lose;
}


void main()
{
	int Input , aiko = 0 , win = 0 , lose = 0;

	Init();		// データの初期化

	// ゲームループ
	while(1)
	{
		Draw(aiko, win, lose);		// データの表示

		Input = getch();	// 入力待ち
		if(Input == 0x1B)
		{
			break;
		}
	}
	printf("勝ち...%d\t負け...%d\t引き分け...%d\n",win , lose , aiko);
}

MNS

Re:じゃんけんゲームの勝敗の出し方

#2

投稿記事 by MNS » 16年前

Draw関数が値渡しになっています。
ポインタ渡しか、参照渡しに変更してください。

さが

Re:じゃんけんゲームの勝敗の出し方

#3

投稿記事 by さが » 16年前

懐かしくなって、ファイル漁っていたらあったので判定の参考にどうぞ
if(me==enemy)
	printf("アイコ");
else if(me==enemy-1||me==enemy+2)
	printf("勝ち");
else
	printf("負け");
このころはまだ良かった。

box

Re:じゃんけんゲームの勝敗の出し方

#4

投稿記事 by box » 16年前

ポインタを渡すのが正解です。
なお、今のソースコードにおける

> 	return aiko , win , lose;

この書き方では、
1)aikoを評価
2)winを評価
3)loseを評価
の3つを順に行なった結果、最後に行なったloseの評価結果「だけ」が有効となります。
呼び出し元に返るのは、loseの値です。
しかも、その結果を呼び出し元で使っていないので、勝ち・負け・あいことも
ゼロを出力します。

じゃが

Re:じゃんけんゲームの勝敗の出し方

#5

投稿記事 by じゃが » 16年前

ご解答ありがとうございます。
MNSさん
ポインタを使うということでようやく分かりました;
読む分には分かるのですが、自分で使うと分からなくなってしまいます・・・orz

さがさんのプログラムは理解に時間がかかりましたが、すごくすっきりしますね。
参考にさせて頂きます。
この頃はまだ良かった・・・?なにかあったのでしょうか。。

boxさん
return文はこれではloseしか返していなかったんですね;
自分で応用できるように頑張ってみます。

KEYONN_

Re:じゃんけんゲームの勝敗の出し方

#6

投稿記事 by KEYONN_ » 16年前

TKOZです。ネットカフェから書き込みです。
もっと短くしてみました。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define GUU 0
#define CYOKI 1
#define PAA 2

int main(void)
{
	char Guu[3][20]={"アイコです。","勝ちです。","負けです。"};
	char Cyoki[3][20]={"負けです。","アイコです。","勝ちです。"};
	char Paa[3][20]={"勝ちです。","負けです。","アイコです。"};
	char janken[3][20]={"グー","チョキ","パー"};
	int input,com;
	printf("じゃんけんゲームです。\n");
	srand(time(NULL));
	while(1)
	{
		printf("手を入力してください。\n(0:グー,1:チョキ,2:パー)->");
		scanf("%d",&input);
		com=rand()%3;
		printf("コンピュータは%sを出しました。\n",janken[com]);
		if(input==GUU){printf("%s\n",Guu[com]);}
		else if(input==CYOKI){printf("%s\n",Cyoki[com]);}
		else if(input==PAA){printf("%s\n",Paa[com]);}
	}
		
}

御津凪

Re:じゃんけんゲームの勝敗の出し方

#7

投稿記事 by 御津凪 » 16年前

> もっと短くしてみました。

私も負けじともう少し短くしてみました。
(TKOZ さんのコードを元にし、やめられるように改良もしてます)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){
    char* result[3][3] = {
        { "あいこ", "勝ち",   "負け"   },
        { "負け",   "あいこ", "勝ち"   },
        { "勝ち",   "負け",   "あいこ" }
    };
    char* ken[3] = { "グー", "チョキ", "パー" };
    int input, com;
    printf("じゃんけんゲームです。\n");
    srand(time(NULL));
loop:
    printf("手を入力してください。\n(0:グー,1:チョキ,2:パー,3:やめる)->");
    scanf("%d", &input);
    if(input < 0 || 3 < input){
        printf("値が違います。\n");
        goto loop;
    }
    if(input == 3) return 0;
    com = rand() % 3;
    printf("コンピュータは%sを出しました。\n", ken[com]);
    printf("%sです。\n", result[input][com]);
    goto loop;
    return -1;
}
勝ち負けを2次元配列のテーブルで参照している部分がミソです。

じゃが

Re:じゃんけんゲームの勝敗の出し方

#8

投稿記事 by じゃが » 16年前

おお、ありがとうございます。
2次元配列は分かるんですが、苦手なんですよね・・・。
参考にさせて頂きます~。

閉鎖

“C言語何でも質問掲示板” へ戻る