素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

ジャンケンゲーム

追記:メッセンジャーでprintHandイマイチとコメントを貰ったので直した。
strcatとか初めて使ったけど、なんで値入れるためのポインタを渡すようになってるんだろ。関数の戻り値が文字列を返してくれればいいのに。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

char *hands[] = {"guu", "choki", "paa"};
void janken(){
	int player, computer;
	scanf("%d", &player);
	computer = rand() % 3;
	puts(hands[computer]);
	if(player == computer){
		puts("draw");
		janken();
	}else if((player + 1) % 3 == computer){
		puts("win");
	}else {
		puts("lose");
	}
}

int main(){
	srand(time(NULL));
	char hand_list[100] = "", tmp[10] = "";
	int i;
	for(i=0;i < 3;i++){
		sprintf(tmp, "%s: %d ", hands[i], i);
		strcat(hand_list, tmp);
	}
	puts(hand_list);
	janken();
	return 0;
}

追記ここまで

main関数を再帰してたり、あんまり上手じゃない。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void printHand(int n){
	switch(n){
	case 1:
		puts("guu");
		break;
	case 2:
		puts("choki");
		break;
	case 3:
		puts("paa");
		break;
	}
}

int main(){
	puts("guu:1 choki:2 paa:3");
	int player, computer;
	srand(time(NULL));
	scanf("%d", &player);
	computer = rand() % 3 + 1;
	printHand(computer);
	if(player == computer){
		puts("draw");
		main();
	}else if((player + 1) % 3 == computer){
		puts("win");
	}else {
		puts("lose");
	}
	return 0;
}


追記:JavaScriptだとこんな感じかな

(function(){
  var hands = ["guu","choki","paa"];
  function janken(){
    var player = + prompt();
    var computer = Math.random() * 3 | 0;
    console.log(hands[computer]);
    switch(computer){
    case player:
      console.log("draw");
      janken();
      break;
    case (player + 1) % 3:
      console.log("win");
      break;
    default:
      console.log("lose");
      break;
    }
  }
  console.log(hands.map(function(s,i) s + ":" + i).join(" "));
  janken();
})();