Lotto 제작
아래 코드는 6개의 무작위 숫자를 입력 받아 로또 당첨을 시뮬레이션 해보는 코드다.
실제 로또 방식과 동일하게 6개 전부 맞추면 1등, 5개 + 보너스를 맞추면 2등, 5개를 맞추면 3등, 4개를 맞추면 4등, 3개를 맞추면 3등을 표시한다.
Random 클래스를 이용하여 6개의 로또 번호를 생성하고, 보너스 번호를 추가로 하나 생성한다.
for 혹은 foreach문을 통해 무작위 6+1개의 숫자와 사용자가 입력한 6개의 숫자를 비교한다.
* 중복을 확인하기 위한 변수(flag)와 입력받은 숫자를 임시로 저장하여 비교하기 위한 변수(temp)를 생성하여 사용하는 것이 코드 작성에 좋다고 생각한다.
temp에 입력 받은 숫자를 넣고, 중복 검사를 받은 뒤 통과가 되면 (flag 값을 통해 확인) 배열에 넣는 방식이 보다 깔끔한 코딩 방식이라고 생각한다.
또한 로또 번호는 1~45까지이기 때문에 숫자 범위 제한도 만들어 준다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lotto
{
class Program
{
static int[] selNum = new int[6];
static int[] lottoNum = new int[7];
static int win = 0;
static int bonus = 0;
public static void selectNum()
{
Console.WriteLine("로또 번호를 6개 입력하세요 (1~45)");
for (int i = 0; i < 6; i++)
{
Console.WriteLine($"\n[{i+1}]번째 숫자를 입력해주세요");
int num = Convert.ToInt32(Console.ReadLine());
if(num < 46 && num > 0)
{
for (int j = 0; j < 6; j++)
{
if(selNum[j] == num)
{
Console.WriteLine("!!!!!중복!!!!!\n중복된 숫자가 입력되었습니다.");
i--;
}
}
selNum[i] = num;
}
else
{
Console.WriteLine("!!!!!1~45 사이의 숫자를 입력해주세요!!!!!");
i--;
}
}
}
public static void makeNum()
{
Random ran = new Random();
int temp = 0;
for(int i = 0; i < 7; i++)
{
temp = ran.Next(45) + 1;
bool flag = false;
if(i > 0 && i < 7)
{
//로또 번호가 중복되는지 확인
for(int j = 0; j <= i; j++)
{
if(lottoNum[j] == temp)
{
flag = true;
}
}
}
if (flag)
{
--i;
}
else
{
lottoNum[i] = temp;
}
}
}
public static void checkNum()
{
foreach(int x in lottoNum.Take(6))
{
foreach(int y in selNum)
{
if(x == y)
{
win++;
}
}
}
foreach(int x in selNum)
{
if(x == lottoNum[6])
{
bonus++;
}
}
switch (win)
{
case 6:
Console.WriteLine($"\n* {win}개 번호 전부 맞추셨습니다. 1등입니다. 축하드립니다.");
break;
case 5:
if(bonus == 1)
{
Console.WriteLine($"\n* 보너스를 포함하여 {win}개 번호 맞추셨습니다. 2등입니다. 축하드립니다.");
}
else
{
Console.WriteLine($"\n*{win}개 번호 맞추셨습니다. 2등입니다. 축하드립니다.");
}
break;
case 4:
Console.WriteLine($"\n* {win}개 번호 맞추셨습니다. 3등입니다. 축하드립니다.");
break;
case 3:
Console.WriteLine($"\n*{win}개 번호 맞추셨습니다. 4등입니다. 축하드립니다.");
break;
default:
Console.WriteLine($"\n* {win}개 번호를 맞추셨습니다. 안타깝지만 당첨되지 않으셨습니다.");
break;
}
}
static void Main(string[] args)
{
makeNum();
selectNum();
Console.Write($"\n[이번주 로또 당첨 번호]\n");
foreach (int x in lottoNum)
{
Console.Write($"{x}\t");
}
Console.WriteLine();
Console.Write($"[입력하신 로또 번호]\n");
foreach (int x in selNum)
{
Console.Write($"{x}\t");
}
checkNum();
}
}
}
가위바위보 게임
마찬가지로 가위바위보 게임을 코드로 짜보았다.
Lotto 프로그램과 유사하게 Random 클래스를 이용하여 임의의 값을 받아 가위, 바위, 보를 할당하고, 사용자 입력을 받아서 두 숫자를 비교해서 승패를 비교한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace rsp_game
{
class Program
{
static int iRandom = 0;
static int iSelection = 0;
static string[] choice = { "가위", "바위", "보" };
static int win = 0;
static int lose = 0;
static int same = 0;
static int sel = 0;
static int play = 0;
static void play_game()
{
iRandom = (new Random()).Next(1, 4);
Console.Write("1(가위), 2(바위), 3(보) 입력 : _\b");
iSelection = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n 사용자 : {0}", choice[iSelection - 1]);
Console.WriteLine(" 컴퓨터 : {0}\n", choice[iRandom - 1]);
if (iSelection == iRandom)
{
Console.WriteLine("비김");
same++;
}
else
{
switch (iSelection)
{
case 1:
Console.WriteLine((iRandom == 3) ? "승": "패");
if(iRandom == 3)
{
win++;
} else
{
lose++;
}
break;
case 2:
Console.WriteLine((iRandom == 1) ? "승" : "패");
if(iRandom == 1)
{
win++;
} else
{
lose++;
}
break;
case 3:
Console.WriteLine((iRandom == 2) ? "승" : "패");
if(iRandom == 2)
{
win++;
}
else
{
lose++;
}
break;
}
}
play++;
}
static void score()
{
Console.WriteLine($"\n[{play}]번 게임을 해서 [{win}]번 이기고, [{lose}]번 지고, [{same}]번 비겼습니다.");
}
static void Main()
{
while (true)
{
Console.WriteLine($"\n1. 가위바위보 게임하기\n2. 전적보기\n3. 게임종료");
sel = Convert.ToInt32(Console.ReadLine());
switch (sel)
{
case 1:
play_game();
break;
case 2:
score();
break;
}
if(sel == 3)
{
Console.WriteLine("게임 종료");
break;
}
}
}
}
}
728x90
'Embedded > C, C#, Python' 카테고리의 다른 글
C# 컬렉션, 제네릭, 널(null), LINQ (0) | 2024.04.29 |
---|---|
C# - 문자열 / 예외 처리 (0) | 2024.04.22 |
C - 헷갈리는 개념 정리 (0) | 2024.04.17 |
C# - 클래스 (1) | 2024.04.15 |
C# - 구조체 / 열거형 (0) | 2024.04.15 |