일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 동기화
- CPU
- 코딩
- c
- DirectXTK
- View
- vertex
- 세팅
- Direct Init
- Input Assembler
- 다이렉트 초기화
- swapchain
- 다중표본화
- Direct3D Init
- C++
- 프로그래밍
- C언어
- RenderTargetView
- DESC
- Direct3D
- GPU
- DirectX12
- CommandList
- 전처리문
- 다이렉트X
- 게임수학
- UE4
- DirectX
- engine
- 다이렉트X 튜토리얼
- Today
- Total
비타Cpp
조건문 if, if ~ else if ~ else 가위 바위 보 게임 본문
가위 바위 보 게임은 다들 아실 겁니다.
두 명이서 가위 바위 보를 내서 승부를 짓는 게임이죠.
내가 가위를 냈는데 상대가 바위를 내면 지고,
상대가 보를 내면 이기는 간단한 게임을 코드로 만들어 보겠습니다.
일단 헤더는 이렇게 해주세요.
#include <iostream>
#include <time.h>
using namespace std;
이번에는 새롭게 출력만 하는 것이 아닌 콘솔에 직접 무엇을 낼지 입력도 해볼 것입니다.
scanf라는 함수도 있지만 이번에는 std에 있는 cin이라는 인터페이스를 써보겠습니다.
사용방법은 아주 간단합니다.
std::cin >> 입력시킨 값을 넣을 변수;
이렇게만 하면 콘솔은 cin에서 값을 입력해서 엔터를 누를 때까지 대기하게 됩니다.
std는 <iostream>에 정의돼있습니다.
자 그리고 제가 두 개를 다 제가 입력하면 재미없죠..
그래서 컴퓨터가 랜덤 값으로 1~3중 하나를 고르게 할 것입니다.(1 = 가위, 2 = 바위, 3 = 보)
이때는 새로운 헤더가 필요합니다.
#include <time.h>
이 헤더를 가져와서 시간 값을 사용해야 하죠.
srand()는 괄호 안에 일명 '시드'라고 하는 값을 넣어줘야. 값이 바뀌는데 이 값이 항상 다른 값이 들어가게 해야 랜덤이 됩니다. 그래서 항상 값이 바뀌는 시간 값을 넣어줍니다.
이 과정 없이 랜덤을 돌리면 랜덤이 프로그램이 돌아간 시점부터 돌아 항상 같은 주기의 랜덤 값을 내보냅니다. 꼭 해야 하죠.
srand(time(NULL));
자 그럼 시드까지 설정했으면 rand()라는 랜덤 수를 내보내는 함수를 이용하면 랜덤 값이 나옵니다.
하지만 저희는 1~3까지의 수만 필요하죠..
그래서 rand()에 3을 mod(%) 연산을 해줍니다.
그럼 0~2중 아무수가 무조건 나오게 되죠.
거기다가 +1을 해주면 1~3의 랜덤수가 나오게 됩니다.
int nCSelect = 0; // 컴퓨터의 선택
nCSelect = rand() % 3 + 1; // 컴퓨터 랜덤수 저장
자 그럼 이제 저의 패와 컴퓨터 패가 준비됐고,
이제 서로를 비교해야 하겠죠.
이제부터는 저희가 본격적으로 나룰 if문이 나설 때입니다.
총경우의 수는??
제가 가위 바위 보를 냈을 때 컴퓨터는 각각 가위 바위 보를 낼 수 있는 경우의 수가 있죠.
3 X 3 = 9의 경우의 수입니다.
그걸 if ~ else if ~ else로 짜면 이렇게 되죠!
int main()
{
srand(time(NULL));
printf("가위 바위 보 게임!! \n");
printf("(1 = 가위, 2 = 바위, 3 = 보)");
printf("입력: ");
int nPSelect = 0; // 플레이어의 선택
std::cin >> nPSelect; //플레이어 입력
int nCSelect = 0; // 컴퓨터의 선택
nCSelect = rand() % 3 + 1; // 컴퓨터 랜덤수 저장
if (nPSelect == 1)
{
//내가 가위를 냈을때,
if (nCSelect == 1)
{
//컴퓨터가 가위를 낸다.
//가위 vs 가위 = 무승부
printf("무승부!");
}
else if (nCSelect == 2)
{
//컴퓨터가 바위를 낸다.
//가위 vs 바위 = 패배
printf("패배...");
}
else
{
//컴퓨터가 보를 낸다.
//가위 vs 보 = 승리
printf("승리!!!!!");
}
}
else if (nPSelect == 2)
{
//내가 바위를 냈을때,
if (nCSelect == 1)
{
//컴퓨터가 가위를 낸다.
//바위 vs 가위 = 승리
printf("승리!!!!!");
}
else if (nCSelect == 2)
{
//컴퓨터가 바위를 낸다.
//바위 vs 바위 = 무승부
printf("무승부!");
}
else
{
//컴퓨터가 보를 낸다.
//바위 vs 보 = 패배
printf("패배...");
}
}
else
{
//내가 보를 냈을때,
if (nCSelect == 1)
{
//컴퓨터가 가위를 낸다.
//보 vs 가위 = 패배
printf("패배...");
}
else if (nCSelect == 2)
{
//컴퓨터가 바위를 낸다.
//보 vs 바위 = 승리
printf("승리!!!!!");
}
else
{
//컴퓨터가 보를 낸다.
//보 vs 보 = 무승부
printf("무승부!");
}
}
printf("\n player:%d vs computer:%d", nPSelect, nCSelect);
}
그리고 마지막 printf() 괄호 안에 % d와 변수가 있습니다. % d는 정수를 출력한다는 것이고, 어떤 정수인지는 그다음 변수들에게 저장된 값들이 들어가게 되는 것입니다.
'C,C++' 카테고리의 다른 글
const 위치에 따른 의미들 (0) | 2020.05.16 |
---|---|
조건문 switch (0) | 2020.04.22 |
조건문 if, if ~ else if ~ else (0) | 2019.12.02 |
C의 기본타입들..(2) (0) | 2019.11.26 |
C의 기본 타입들..(1) (0) | 2019.11.11 |