각종 노하우 게임 개발의 기초 c/c++ 강의 - 기본5
컨텐츠 정보
- 12 조회
- 0 추천
- 0 비추천
-
목록
본문
작성자: 작성자 없음
안녕하세요 llafjkl입니다.
난수
먼저 srand()란 난수를 사용하기 위해서는 헤더값을 불러와야 한답니다
저번에 배웠던 전처리기 기능으로 #include <time.h>를 가져옵니다!!
time.h를 갖고 오게되면 time(0)이란 코드를 사용할 수 있는데 요것은 시간을 얻어올 수 있는 기능입니다.
1초가 지나면 1이 증가되는 값을 갖고오게 됩니다.
이 time(0)은 1970년도에 만들어졌다고 해요... 엄청 오래됐죠??
rand() 란 랜덤 한 값을 얻어올수 있습니다. 0 ~ 32767 사이의 수를 얻어오게 됩니다.
rand()를 이용해서 랜덤 한 값을 얻어올때 내부적으로 랜덤한 값이 들어가 있는 표를 이용해서 얻어온다고 합니다.
그런데
std::cout << rand() << std::endl;
std::cout << rand() << std::endl;
std::cout << rand() << std::endl;
이렇게 코드를 구성해서 돌려보면
41
18467
6334
이라는 숫자가 고정적으로 나오게 됩니다.
이 이유는 어떤 표를 사용할 것이다 라고 지정한 게 아닌 고정된 표에서 랜덤 한 값을 얻어와서 계속 같은 값이 나오게 되는 것입니다.
그래서 랜덤한 값을 사용하기 위해서는 표를 실행할 때마다 다른 표를 가져올 수 있게 만들어야 합니다.
srand(time(0));
이런 식으로 말이죠
time();라는 코드 자체가 1초마다 숫자가 1씩 증가되어 계속적으로 srand값이 바뀌는 원리를 이용한 겁니다.
또 나머지 연산자를 통해서 ? ~ ? 의 값 사이의 난수를 얻어올 수도 있습니다.
std::cout << rand() % 101 << std::endl;
을 하게 되면 1~100 사이의 난수를 얻어올 수 있게 됩니다.
만약에 여기서 1~200의 난수 코드를 작성하게 되면
std::cout << rand() % 101 + 100 << std::endl;
의 구성이 되게 됩니다.
또 이것을 활용해 1 ~ ???이 아니라
100 ~ 500을 같이 만들려면
난수 % (최대 - 최소 + 1) + 최소의 구성으로
std::cout << rand() % (500 - 100 + 1) + 100 << std::endl;
이 되게 됩니다.
난수를 활용한 가위바위보 게임
#include <iostream> // 입출력 헤더 파일을 갖고 오기 위한 전처리기
#include <time.h> // 난수 사용을 위해 갖고 온 타임 헤더 파일
// enum문을 활용해 가위 바위 보를 구성
enum class SRP
{
S = 1, // 가위
R, // 바위
P // 보
};
int main()
{
// srand를 활용하여 난수 테이블 생성
srand(time(0));
// 첫 난수는 랜덤 한 수가 아닌 계속적으로 상승하는 버그? 가 있어서 rand();값을 한번 작성한다.
rand();
// 플레이어가 가위, 바위, 보, 종료를 선택하기 위한 변수를 생성
int Player = 0;
// while문을 이용하여 게임이 나가지지 않고 반복되게 설정
while (true)
{
// cls 콘솔 명령을 입력해주어서 콘솔 창의 내용을 모두 지워준다.
system("cls");
// 선택하기 위한 내용 설명
std::cout << "1. 가위" << std::endl;
std::cout << "2. 바위" << std::endl;
std::cout << "3. 보" << std::endl;
std::cout << "4. 종료" << std::endl;
std::cout << "선택하세요 : ";
// cin을 활용해 플레이어가 선택할 수 있게 만듦
std::cin >> Player;
// if문을 활용해 플레이어가 4번을 누르면 break;되어 게임을 종료하게 만듦
if (Player == 4)
break;
// 인공지능은 랜덤 하게 셋 중 하나를 선택한다.
int AI = rand() % 3 + 1;
// 스위치문에 인공지능이 선택한것을 enum class 의 열거체 타입만의 변수를 만듬으로써 스위치문에 넣기 위함
SRP AISRP = (SRP)AI;
switch (AISRP)
{
case SRP::S:
std::cout << "AI : 가위" << std::endl;
break;
case SRP::R:
std::cout << "AI : 바위" << std::endl;
break;
case SRP::P:
std::cout << "AI : 보" << std::endl;
break;
}
// enum문 구성을 보면 가위 = 1, 바위 = 2, 보 = 3의 구성이므로
// 승리의 조건은 Player - AI가 1 or -2가 나와야 한다
int Result = Player - AI;
// if문을 활용한 승리 조건
if (Result == 1 || Result == -2)
std::cout << "Player 승리" << std::endl;
// else if를 활용해 비긴 조건
else if (Result == 0)
std::cout << "비겼다" << std::endl;
// else를 활용한 진 조건
else
std::cout << "졌다..ㅠㅠ" << std::endl;
// 콘솔 창을 일시정지시켜준다. 아무 키나 누르면 다시 시작된다.
system("pause");
}
return 0;
}
-
등록일 00:20
-
등록일 08.20
-
등록일 08.10VMware 네트워크 IP 설정댓글 2
-
등록일 08.08