Language/C, C++, C#

[C] Sleep(), system("cls")를 이용한 주사위 굴리기

byunghyun23 2020. 8. 16. 23:48

1. Sleep()

      • 런타임에 프로그램을 일시적으로 대기 상태로 만들기 위한 함수

      • Sleep(1000);  // 1000ms (1초) 동안 프로그램 대기 상태

2. system("cls")

      • 콘솔 화면을 지우는 함수

      • Linux : clear, Windows : cls 명령어와 같은 기능

 

위 함수를 이용하여 재밌는 프로그램을 만들어 볼 수 있다.

바로 옛날 메이플 스토리에서 캐릭터 생성 시 필수 관문인 주사위 굴리기를 구현해봤다.

코드는 아래와 같다.

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

#define SIZE 4

int main()
{
	int i, j, sum, key, value[SIZE];
	char p_stat[SIZE][SIZE] = { "STR","DEX","INT","LUX" };

	srand((unsigned)time(NULL));

	while (1) {
		key = _getch();

		if (key == ' ') { // Space Bar 입력
			system("cls");

			while (1) {	// 주사위 합 25
				sum = 0;
				for (i = 0; i < 4; i++) {
					value[i] = rand() % 8 + 4;
					sum += value[i];
				}
				if (sum == 25)
					break;
			}

			for (j = 0; j < 10; j++) { // 주사위 굴리는 것러럼 보이기
				for (i = 0; i < SIZE; i++)
					printf("%s %d\n", p_stat[i], rand() % 9 + 1);
				Sleep(10);
				system("cls");
			}

			for (i = 0; i < SIZE; i++) {
				printf("%s %d\n", p_stat[i], value[i]);
			}
		}
		else if (key == '\r') { // Enter 입력
			break;
		}
	}
	
	printf("\n프로그램 종료..\n");

	return 0;
}

1. _getch()를 이용하여 키보드 입력을 받고, 그 값이 Space Bar이면 주사위를 굴리고 Enter이면 프로그램을 종료한다.

2. 랜덤으로 할당한 스탯의 총 합은 25가 되어야한다. 아닐 경우 25가 나올 때까지 반복으로 스탯을 할당한다.

3. 주사위를 굴리는 것처럼 보이기 위해(스탯이 변하는 것처럼) Sleep()을 이용하여 의미 없는 숫자를 일정 시간동안 보여주고 system("cls")를 이용하여 콘솔을 클리어 시킨다.

4. 3번 작업을 여러 번 한다.

5. 이전에 할당해놓은 스탯을 보여준다.

 

캐릭터 정보를 저장할 수 있는 구조체와 키보드 방향키 입력을 이용한다면 더 현실감 있는 프로그램을 만들 수 있다.

 

캐릭터 생성 주사위 굴리기