const int ROCK = 1;
const int PAPER = 2;
const int SCISSORS = 0;
// 0 : 가위 1: 바위 2: 보
Random rand = new Random();
int aiChoice = rand.Next(0, 3); // 컴퓨터의 선택 : 0 ~ 2사이의 랜덤 값
int choice = Convert.ToInt32(Console.ReadLine()); // 사용자의 선택
Console.WriteLine();
switch (choice) // 사용자의 선택
{
case SCISSORS:
Console.WriteLine("당신의 선택은 가위 입니다.");
break;
case ROCK:
Console.WriteLine("당신의 선택은 바위 입니다.");
break;
case PAPER:
Console.WriteLine("당신의 선택은 보 입니다.");
break;
}
switch (aiChoice) // 컴퓨터의 선택
{
case SCISSORS:
Console.WriteLine("컴퓨터의 선택은 가위 입니다.");
break;
case ROCK:
Console.WriteLine("컴퓨터의 선택은 바위 입니다.");
break;
case PAPER:
Console.WriteLine("컴퓨터의 선택은 보 입니다.");
break;
}
// 승리 무승부 패배
if (choice == aiChoice)
Console.WriteLine("무승부 입니다.");
else if (choice == SCISSORS && aiChoice == PAPER)
{
Console.WriteLine("승리 입니다");
}
else if (choice == ROCK && aiChoice == SCISSORS)
{
Console.WriteLine("승리 입니다");
}
else if (choice == PAPER && aiChoice == ROCK)
{
Console.WriteLine("승리 입니다");
}
else
{
Console.WriteLine("패배 입니다");
}
일단 전에 배운 가위,바위,보 프로그램에서 0 ~ 2 의 정수를 넣는 하드 코딩은 게임을 개발할때 굉장히 위험한 경우가 많고 사용할때 헷갈리는 경우가 생기게 된다.
그래서 정수 말고 위의 예제처럼 변수에 이름을 넣어서 사용을 하게 되는데 이때 그냥 int값을 쓰게 되면 에러가 뜨게 된다 왜냐하면 switch 케이스에 들어올 때 이 케이스문에 들어오는 숫자는 변수는 안되고 고정된 상수 값만 받을수 있기 때문에 const 를 선언하여 상수로 바꿔주고 사용해야 한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rookiss_Basic_01
{
internal class Program
{
enum Choice // 열거형
{
Rock = 1,
Paper = 2,
Scissors = 0,
}
static void Main(string[] args)
{
// 0 : 가위 1: 바위 2: 보
Random rand = new Random();
int aiChoice = rand.Next(0, 3); // 컴퓨터의 선택 : 0 ~ 2사이의 랜덤 값
int choice = Convert.ToInt32(Console.ReadLine()); // 사용자의 선택
Console.WriteLine();
switch (choice) // 사용자의 선택
{
case (int)Choice.Scissors:
Console.WriteLine("당신의 선택은 가위 입니다.");
break;
case (int)Choice.Rock:
Console.WriteLine("당신의 선택은 바위 입니다.");
break;
case (int)Choice.Paper:
Console.WriteLine("당신의 선택은 보 입니다.");
break;
}
switch (aiChoice) // 컴퓨터의 선택
{
case (int)Choice.Scissors:
Console.WriteLine("컴퓨터의 선택은 가위 입니다.");
break;
case (int)Choice.Rock:
Console.WriteLine("컴퓨터의 선택은 바위 입니다.");
break;
case (int)Choice.Paper:
Console.WriteLine("컴퓨터의 선택은 보 입니다.");
break;
}
// 승리 무승부 패배
if (choice == aiChoice)
Console.WriteLine("무승부 입니다.");
else if (choice == (int)Choice.Scissors && aiChoice == (int)Choice.Paper)
{
Console.WriteLine("승리 입니다");
}
else if (choice == (int)Choice.Rock && aiChoice == (int)Choice.Scissors)
{
Console.WriteLine("승리 입니다");
}
else if (choice == (int)Choice.Paper && aiChoice == (int)Choice.Rock)
{
Console.WriteLine("승리 입니다");
}
else
{
Console.WriteLine("패배 입니다");
}
}
}
}
switch 안에 들어갈 변수가 많아지게 된다면 관리하기 힘들수 있다. enum 열거형을 선언하여 열거형 안에 사용할 정수들을 넣고 필요한 데이터에서 사용해주면 유지보수도 좋고 사람이 할 수 있는 실수를 줄일수 있게 된다.