[C] 배열 - 발모제 찾기 게임

2022. 4. 24. 21:09·언어/C
728x90
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void)
{
	srand(time(NULL));
	printf("\n\n==발모제 찾기 게임==\n\n");
	int answer;
	int treatment = rand() % 4; // 발모제 결정

	int prevShowBottle = 0;
	int curShowBottle = 0;

	for (int i = 1; i <= 3; i++)
	{
		printf("%d번째 시도입니다.\n\n", i);
		int bottle[4] = { 0,0,0,0 };
		do
		{
			curShowBottle = rand() % 2 + 2; // 2~3
		} while (prevShowBottle == curShowBottle);
		prevShowBottle = curShowBottle;

		int isIncluded = 0;

		for (int j = 0; j < curShowBottle; j++)
		{
			
			int randBottle = rand() % 4;

			if (randBottle == treatment)
			{
				isIncluded = 1;
			}

			if (bottle[randBottle] == 0)
			{
				bottle[randBottle] = 1;
			}
			else
			{
				j--;
			}
		}

		for (int k = 0; k < 4; k++)
		{
			if (bottle[k] == 1)
				printf("%d ", k +1);
		}
		printf("번 약을 바릅니다.\n\n");
		
		
		if (isIncluded == 1)
		{
			printf("성공입니다.\n\n");
		}
		else
		{
			printf("실패입니다.\n\n");
		}
		getchar();
	}

		printf("\n\n발모제는 ? ");
		scanf_s("%d", &answer);

		if (answer == treatment + 1)
		{
			printf("정답입니다~\n");
		}
		else
		{
			printf("오답입니다. 정답은 %d번 입니다.", treatment + 1);
		}
	

	return 0;
}

나도코딩으로 공부하면서 이상하게 가장 어려웠던 프로젝트다... 수많은 시도 끝에 혼자 힘으로 성공했다. 정말 뿌듯했다.

4개의 병 중 한 병에는 발모제가 들어있다. 프로그램은 3차례 2개 혹은 3개의 약을 동시에 공개한다. 발모제가 포함되어 있으면 성공, 발모제가 포함되어 있지 않으면 실패가 출력된다. 사용자는 성공, 실패 결과를 보고 몇 번 병에 있는 약이 발모제인지 맞추면 된다.

가장 막힌 부분은 이전 공개 병의 숫자와 이번에 공개할 병 숫자를 결정하는 부분이다.

 do
	{
			curShowBottle = rand() % 2 + 2; // 2~3
	} while (prevShowBottle == curShowBottle);
	prevShowBottle = curShowBottle;

	int isIncluded = 0;

	for (int j = 0; j < curShowBottle; j++)
	{
			
		int randBottle = rand() % 4;

		if (randBottle == treatment)
		{
			isIncluded = 1;
		}

		if (bottle[randBottle] == 0)
		{
			bottle[randBottle] = 1;
		}
		else
		{
			j--;
		}
	}

우선 병 공개를 do 함수 안에 넣어 무한 루프 시킨다. 현재 공개할 병 갯수(curShowBottle)를 2개 혹은 3개로 랜덤하게 고른다. 무한 루프는 이전에 공개한 병 갯수(prevShowBottle)와 값이 같은 동안 유지한다.

루프가 끝나면 (curShowBottle==prevShowBottle) curShowBottle 값을 prevShowBottle에 넣어준다.

이때 int isIncluded= 0;은 공개한 병에 발모제 유무를 판단하는 변수다. 공개한 병에 발모제가 들어있으면 isIncluded = 1;로 바꿔준다.

여기만 이해하면 전체적으로 어려운 것 없는 프로그램이다.

728x90

'언어 > C' 카테고리의 다른 글

[C] define 매크로 함수 사용하기  (0) 2022.04.24
[C] 파일 입출력 - 비밀 일기 프로젝트  (0) 2022.04.24
[C] 함수 - 컴퓨터와 가위바위보하기  (0) 2022.04.24
[C] 조건문 - 업 다운 게임 만들기  (0) 2022.04.24
[C] 반복문 - 별로 피라미드 그리기  (0) 2022.04.24
'언어/C' 카테고리의 다른 글
  • [C] define 매크로 함수 사용하기
  • [C] 파일 입출력 - 비밀 일기 프로젝트
  • [C] 함수 - 컴퓨터와 가위바위보하기
  • [C] 조건문 - 업 다운 게임 만들기
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (238) N
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (7)
        • Unity (43)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
      • 자기 관리 (3) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    게임서버
    C언어
    디자인패턴
    Entityfamework
    네트워크
    EntityFramework
    Python
    코딩
    라즈베리파이
    백준
    tcp
    유니티
    C#
    자바
    java
    EFCore
    HTML
    unity
    C
    coding
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[C] 배열 - 발모제 찾기 게임
상단으로

티스토리툴바