ジャンケン

C言語初心者学習記Part7

C言語の入門書を1冊やり終えて…

サイトの更新自体も、このシリーズも久々ですねw

暇なときにチマチマ進めていた入門書が終わりまして、実際に色々なものを作ってみようという事を考えていました。

やってみると色々な問題点にはまってしまって大変でした。

正直、入門書を1冊終えた時点では本当に漠然とした知識しかないことに驚きます。

 

なんとか形になったのでこうして記事を書いている次第ですが…。

そのため、今回から数回は私が性懲りもなく作ったヨクワカラナイプログラムを通して問題点を洗い出しておこうというものになります。

今更、ジャンケンゲームを作ってみる

「ジャンケンゲーム位なら今の自分でも作れるかな~」と思い、手を付けたら見事に悪戦苦闘する始末…

その殆どの時間は要らぬ機能を実装した故に起こっているのですが…

まぁ、それは後ほど…

 

先ずどんな感じにしようか考える

当初案では、

タイトル

グーチョキパーを入力

何らかの方法でコンピュータもグーチョキパーを出す

勝敗判定

結果発表

 

という風にする予定でした。

「入出力はmain関数で、グーチョキパーは数字に対応させて入力してもらって、出した手を変換する関数と組み合わせで勝敗を決める関数を書けばいいかな?」

とある程度の目途をつけ作業開始しました。

 

できあがったプログラムがこちら(暫定)

※実はこのコードは暫定でして後で少しいじっています。

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

/*プロトタイプ宣言*/
void trans(int);
void judge(int,int);

/*変数*/
int hand;
int comhand;

/*フラグ変数*/
int signal=0;

int main(void)
{
	/*タイトル*/
	printf("\n*===ジャンケンゲーム===*\n");
	printf("\n");
	
	/*ジャンケンゲーム本体(あいこ、予期せぬ入力でここに戻る)*/
	do{
		/*導入部分*/
		printf("ジャン\a\n");
		printf("ケン\a\n");
		printf("出す手を決めて数字を半角で入力\n【1:グー2:チョキ3:パー】\n:");
		
		/*入力部分*/
		char str[10];
		memset(str,0,sizeof(str));
		fgets(str,sizeof(str),stdin);
		hand=atoi(str);
		
		/*出力部分*/
		printf("ポン!\a\n");
		printf("\n");
		printf("貴方の手:");
		trans(hand);
		
		srand((unsigned int)time(NULL));
		comhand=rand()%3+1;
		printf("コンピューターの手:");
		trans(comhand);
		
		/*結果出力*/
		judge(hand,comhand);
	}while(signal==1,signal--);
	
	return 0;
}

/*変換関数*/
void trans(int hand)
{
	switch(hand){
		case 1:
			printf("グー\n");
			break;
			
		case 2:
			printf("チョキ\n");
			break;
			
		case 3:
			printf("パー\n");
			break;
			
		default:
			printf("ズルはしないでいただきたい!\n");
			break;
	}
}

/*勝敗判別関数*/
void judge(int hand,int comhand)
{
	if(hand!=1^hand!=2^hand!=3){
		printf("やりなおし!\n");
		signal++;
	}else{
		if(hand==comhand){
			printf("あいこだ!\n「貴様…なかなかやるな…」\n");
			signal++;
		}else{
			if(hand==1){
				if(comhand==2){
					printf("貴方の勝ち!\n「貴様…ジャンケン道を極めたようだな…」\n");
				}else{
					printf("貴方の負け…\n「ジャンケン道、其即、阿修羅道也!」\n");
				}
			}
			if(hand==2){
				if(comhand==3){
					printf("貴方の勝ち!\n「貴様…ジャンケン道を極めたようだな…」\n");
				}else{
					printf("貴方の負け…\n「ジャンケン道、其即、阿修羅道也!」\n");
				}
			}
			if(hand==3){
				if(comhand==1){
					printf("貴方の勝ち!\n「貴様…ジャンケン道を極めたようだな…」\n");
				}else{
					printf("貴方の負け…\n「ジャンケン道、其即、阿修羅道也!」\n");
				}
			}
		}
	}
}

ジャンケンゲームの大枠はこんな感じで完成しました。

書いていて「ここは工夫次第でもっとスマートにできそうな気がする…」とか思っていましたが私のセンスではここまでが限界のようですw

judge関数なんかは、「こんなに愚直でいいのか?」と今でも思っています。

とりあえず、今回はこのあたりで…

次回からはこのコードを書く上で躓いた点や調べた点を載せていこうかと思っております。


 

【前→C言語初心者学習記 part6

【後→C言語初心者学習記 part8】


 

0

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA