본문 바로가기
GGM/게임프로그래밍

20230310 - 게임프로그래밍 - 난수

by DDongYeop 2023. 3. 10.
728x90

 

1. 난수 발생 만들기

 - 난수의 필요성

  = 게임은 항상 상대가 있어야 한다. 그 상대는 적이 될 수도 있고, 어떠한 목표가 될 수도 있다. 

  = 컴퓨터 판단의 기본이 되기 떄문이다. 

 

 - 난수 생성 함수

  1) rnad()함수

    = srand()로 인해 생성된 값을 바탕으로 난수를 생성하는 함수이다. 

    = 생성되는 난수의 범위를 지정하는 방법

    : rand() % (마지막 값 - 시작 값 + 1) + 시작 값

  2) srand() 함수

   = 호출할 때 전달 받은 인자를 기반으로 난수를 초기화하는 함수이다. 

   = 정해진 순서가 안 나오도록 여러 개 만들어 매번 다른 난수표를 읽도록 만듦. 이 난수표를 선택하는 동작을 시드(Seed)라고 한다.

   = 사용할때 srand((unsigbed int) time(NULL); 이런식으로 사용한다.  

  EX) 만약 100 ~ 200 안에 있는 난수를 얻고 싶다면? 아래 코드처럼 사용하면 된다.

#include <iostream>
using namespace std;
int main()
{
    srand((unsigned int)time(NULL));
    cout << rand() % 101 + 100;
}

 

위에서 배운 것을 활용하여 아래처럼 "스타포스 강화 게임"도 만들 수 있다. 

#include <iostream>

using namespace std;

int main()
{
	srand((unsigned int)time(NULL));
	cout << "=================" << endl;
	cout << "스타포스 강화 게임" << endl;
	cout << "=================" << endl << endl;
	int iUpgrade = 0;
	float fPercent = 0.f;
	cout << "현재 무기는 몇성인가요?" << endl;
	cin >> iUpgrade;
	switch (iUpgrade)
	{
	case 0:
	case 1:
	case 2:
		fPercent = 90;
		break;
	case 3:
	case 4:
	case 5:
		fPercent = 50;
		break;
	case 6:
	case 7:
	case 8:
	case 9:
		fPercent = 10;
		break;
	default:
		fPercent = 1;
		break;
	}
	cout << "현재 무기 UPgrade : " << iUpgrade << "성" << endl;
	cout << "강화 확률 Percent : " << fPercent << "%" << endl;
	cout << "강화하시겠습니까? 예:1 , 아니오: 0" << endl;
	int iInput;
	cin >> iInput;

	if (iInput == 0) //종료조건 처리.
		return 0;

	if (fPercent > rand() % 101 + 1)
		cout << "강화 성공";
	else
		cout << "강화 실패";
}

 

 

iostream에 srand(), rand()와 같은 함수가 들어 있다고한다. 굳이 time.h를 넣을 필요가 없다. 

 

728x90

댓글