[내맘대로 코딩]🎮추억의 옛날 메이플스토리: 주사위 굴리기 시스템 C언어로 재현하기

김나정·2024년 5월 23일
0

C

목록 보기
8/8
post-thumbnail
재밌겠당...메이플...😿

🎲프로그램 참고 사항

1. 스탯 종류:

  • 기본적으로 STR, DEX, INT, LUX 네 가지 스탯

2. 최소 / 최대 / 총합 스탯 값:

  • 각 스탯의 최소 값은 4

  • 각 스탯의 최대 값은 13 (총합이 25가 되는 조건을 맞추기 위해)

  • 스탯의 총합은 25

3. 스탯 값 생성: <rand(), srand(), time()>

  • statValue 배열에 난수로 생성된 각 스탯 값을 저장하고, 그 합이 25가 될 때까지 반복

4. 주사위 굴리기 효과: <system("cls"), sleep()>

  • 사용자가 SpaceBar를 눌러 주사위를 굴릴 수 있도록 함

  • 주사위를 던지는 횟수는 랜덤하게 결정하여, 주사위를 많이 던지면 굴리는 효과가 많이 나오고 적게 던지면 적게 나오는 느낌을 줌

  • 주사위 굴리는 시각적 효과를 위해 콘솔 화면을 초기화하고 잠시 대기하는 과정을 반복

5. 종료 조건:

  • 사용자가 Enter를 눌러 스탯 가챠를 종료할 수 있도록 함

  • 운영 체제 환경에 따라 엔터키 입력 처리가 다를 수 있으므로 \r\n을 모두 고려

    \r : Windows 환경에서 getch() 함수는 Enter 키를 \r로 감지
    \n :Unix/Linux 환경에서 Enter 키는 \n 으로 처리되는 경우가 많지만 getch() 함수는 일반적으로 \r을 반환

6. 키 입력 처리: <_getch()>

  • 키 입력을 빠르게 처리하기 위해 getch() 함수를 사용
    _getch() : 버퍼를 사용하지 않고, 에코하지 않기 때문에 즉시 키 입력을 처리.

7. 운영체제 호환성 주의

  • _getch() / system("cls") / sleep() 모두 윈도우 환경 전용임을 주의

📝코드

#include <stdio.h>
#include <conio.h> // _getch() 
#include <stdlib.h> // rand(),srand(),system() 
#include <time.h> // time()
#include <windows.h> // sleep()

#define SIZE 4

int main()
{
	 // statNames 배열은 각 스탯 이름을 문자열로 저장하고 있으며, const를 사용하여 문자열 리터럴을 수정하지 않음을 보장함
	const char* statNames[SIZE] = { "STR","DEX","INT","LUX" }; 

	int userInput; // _getch() 함수로 입력받는 키를 저장하는 변수
	int statsSum; // 랜덤으로 생성된 스탯 수치들의 합을 저장하는 변수
	int statValue[SIZE]; // 랜덤으로 생성된 스탯 수치를 저장하는 배열
	
	srand((unsigned)time(0)); // 프로그램 시작 시 시드를 설정

	while (1){
		userInput = _getch(); // 빠르게 키 입력만 받기위해 버퍼(x),echo(x)인 getch를 사용

		if (userInput == ' ') {//space bar 입력
			system("cls");// 주사위 굴릴때마다 콘솔창 초기화

			/* 실제 캐릭터에 적용시킬 statValue[]의 총합이 25가 될때까지 반복 */
			do {
				statsSum = 0;
				for (int i = 0; i < SIZE; i++) {
					statValue[i] = rand() % 10 + 4; // MIN=4, MAX=13
					statsSum += statValue[i];
				}
			} while (statsSum != 25);

			/* 주사위 굴리는 것처럼 보여주는 효과 */
			for (int i = 0; i < rand() % 9 + 2; i++) {// 주사위 높게던지면 굴리는 효과도 많이 나오게 하려는 살아있는 detail
				for (int j = 0; j < SIZE; j++) {
					printf("%s : %d\n", statNames[j], rand() % 9 + 1);
				}
				Sleep(10); // 잠시 대기 (0.01초)하여 주사위 굴리는 효과 제공
				system("cls");
			}

			/* 최종 스탯 값 출력 */
			for (int i = 0; i < SIZE; i++) 
				printf("%s : %d\n", statNames[i], statValue[i]);
			
		}
		else if (userInput == '\r' || userInput == '\n') //enter 입력하면 스탯 가챠 종료!  Enter 키의 입력 처리가 os환경에 따라 달라서 안전하게 \r과 \n둘다 고려
			break;

	}

	system("cls");
	printf("\n주사위를 하얗게 불태웠다..\n");

	return 0;
}

💻실행 화면

실제로는 좀 더 초ㅏ라라라ㅏㄱㄱ하면서 실행되는데 움짤이라 뚝.딱.🤖그잡채..아쉽ㄷr..
profile
molbwa

0개의 댓글