2013年5月29日 星期三

[C]猜數字遊戲

猜數字遊戲,電腦亂數產生不重複的四位數字,由使用者猜,如電腦亂數為5137,猜1234,則輸出1A1B,A代表數字與位置都對,B代表數字對,但位置不對。

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

#define DIGIT 4

void produce_number(int number[]);
int check_answer(int number[],int user_answer[],int& same_letter_place,int& same_letter);
void input_convert(int number[],int input_number);

void main(void)
{
	for(;;)
	{
		int number[DIGIT],user_answer[DIGIT],user_input,tsuzuku=1;
		char play=0;
		produce_number(number);
		//-------測試用--------
		/*for(int i=0;i<DIGIT;i++)
			printf("%d\t",number[i]);
		printf("\n");*/
		//-------測試用--------
		while(tsuzuku)
		{
			int a=0,b=0;
			printf("please enter 4-digits number >");
			scanf("%d",&user_input);
			input_convert(user_answer,user_input);
			tsuzuku=check_answer(number,user_answer,a,b);
			printf("%dA%dB\n",a,b);
		}
		printf("you got it !! play again ? [Y/N]");
		while(play != 'n' && play != 'N' && play != 'y' && play != 'Y')
			play=getchar();
		if(play == 'n' || play == 'N')
			break;
	}
	printf("Bye! Bye!");
	system("pause");
}

void produce_number(int number[])
{
	srand(time(NULL));
	int i=1;
	number[0]=1+rand()%9;
	while(i < DIGIT)
	{
		int temp=1+rand()%9,test_result=1;
		for(int j=0;j<i;j++)
			if(temp==number[j])
				test_result=0;
		if(test_result)
		{
			number[i]=temp;
			i++;
		}
	}
}

int check_answer(int number[],int user_answer[],int& same_letter_place,int& same_letter)
{
	for(int i=0;i<DIGIT;i++)
		for(int j=0;j<DIGIT;j++)
			if(user_answer[i]==number[j])
				same_letter++;
	for(int k=0;k<DIGIT;k++)
		if(user_answer[k]==number[k])
			same_letter_place++;
	same_letter=same_letter-same_letter_place;
	if(same_letter_place==DIGIT)
		return 0;
	else
		return 1;
}

void input_convert(int number[],int input_number)
{
	for(int i=DIGIT-1;i>=0;i--)
	{
		number[i]=input_number%10;
		input_number/=10;
	}
}

沒有留言:

張貼留言