재밌겠당...메이플...😿
STR, DEX, INT, LUX
네 가지 스탯각 스탯의 최소 값은 4
각 스탯의 최대 값은 13
(총합이 25가 되는 조건을 맞추기 위해)
스탯의 총합은 25
사용자가 SpaceBar
를 눌러 주사위를 굴릴 수 있도록 함
주사위를 던지는 횟수는 랜덤하게 결정하여, 주사위를 많이 던지면 굴리는 효과가 많이 나오고 적게 던지면 적게 나오는 느낌을 줌
주사위 굴리는 시각적 효과를 위해 콘솔 화면을 초기화하고 잠시 대기하는 과정을 반복
사용자가 Enter
를 눌러 스탯 가챠를 종료할 수 있도록 함
운영 체제 환경에 따라 엔터키 입력 처리가 다를 수 있으므로 \r
과 \n
을 모두 고려
\r :
Windows 환경에서 getch() 함수는 Enter 키를 \r
로 감지
\n :
Unix/Linux 환경에서 Enter 키는 \n
으로 처리되는 경우가 많지만 getch() 함수는 일반적으로 \r
을 반환
_getch() :
버퍼를 사용하지 않고, 에코하지 않기 때문에 즉시 키 입력을 처리._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..