티스토리 뷰
C# 진행중이고.. 랜덤값, 반복문과 제어문, 콘솔 좌표 개념에 대해 배웠다
그리고 이들을 이용해 이용한 간단한 콘솔 게임을 만들었다이 시간을 통해 그 날 배운 개념들을 직접 게임에서 어떻게 활용할 지 체험해 보는 것은 좋다
💻 C#
랜덤값
Random rand = new Random();
int monsterPower = rand.Next(10, 31); // 10부터 30 사이의 랜덤 공격력
몬스터의 공격력이나 보상의 양을 결정하는 데 사용할 수 있다
반복문
while (isAlive) // 플레이어가 살아있는 동안 반복
{
// 게임 상태 업데이트 및 입력 받기
}
게임의 상태를 업데이트하고 플레이어의 선택을 반복해서 받을 수 있다
제어문
switch (input)
{
case 1:
// 탐험하기
break;
case 2:
// 장비 뽑기
break;
default:
Console.WriteLine("잘못된 입력입니다.");
break;
}
플레이어의 선택에 따라 다른 행동을 수행할 수 있다
if (eventChance <= 40)
{
// 40% 확률로 전투
}
else if (eventChance <= 80)
{
// 40% 확률로 보상
}
else
{
// 20% 확률로 회복
}
랜덤값과 함께 활용하여 확범위에 따라 다른 결과가 나타나게 한다.
콘솔 좌표
Console.SetCursorPosition(playerX, playerY); // 플레이어의 위치 설정
Console.Write(player); // 플레이어 캐릭터 출력
플레이어의 위치나 게임의 상태를 콘솔에 나타낼 수 있다
🕹️ 콘솔 게임 만들기
모험가 키우기 게임
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace game2
{
class Program
{
static void Main(string[] args)
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Random rand = new Random();
int gold = 500;
int health = 100;
int power = 10;
int monsterHealth = 100;
int input;
bool isAlive = true;
Console.WriteLine("⚔️ 모험가 키우기 ⚔️");
while (isAlive)
{
Console.Clear();
Console.WriteLine($"현재 상태 - 체력 {health} | 공격력 {power} | 골드 {gold} | 몬스터 체력 {monsterHealth}\\n");
Console.WriteLine("1. 탐험하기 🏕️");
Console.WriteLine("2. 장비뽑기 🎲 (1000골드)");
Console.WriteLine("3. 휴식하기 💤 (체력 +20)");
Console.WriteLine("4. 게임종료");
Console.Write("입력 : ");
input = int.Parse(Console.ReadLine());
switch (input)
{
case 1:
Console.Clear();
Console.WriteLine("탐험을 떠납니다.");
Thread.Sleep(500);
Console.WriteLine("탐험을 떠납니다..");
Thread.Sleep(500);
Console.WriteLine("탐험을 떠납니다...");
Thread.Sleep(500);
Console.WriteLine("탐험을 떠납니다....");
int eventChance = rand.Next(1, 101);
if (eventChance <= 40) // 40% 확률로 전투 발생
{
int monsterPower = rand.Next(10, 31);
Console.WriteLine($"⚔️ 몬스터를 만났습니다! (몬스터 공격력: {monsterPower})");
int damage = monsterPower;
if (power < monsterPower)
{
damage = (int)(monsterPower * 1.5);
Console.WriteLine($"몬스터가 강합니다! 피해가 증가합니다. (체력 -{damage})");
Console.WriteLine($"몬스터에게 공격을 했습니다. (몬스터체력 -{power})");
}
else
{
damage = monsterPower / 2;
Console.WriteLine($"몬스터가 약합니다! 피해가 감소합니다. (체력 -{damage})");
Console.WriteLine($"몬스터에게 공격을 했습니다. (몬스터체력 -{power})");
}
health -= damage;
monsterHealth -= power;
}
else if (eventChance <= 80) // 40% 확률로 보상
{
int reward = rand.Next(100, 301);
Console.WriteLine($"💰 보물을 발견했습니다! (골드 +{reward})");
gold += reward;
} else // 20% 확률로 회복
{
int heal = rand.Next(10, 31);
Console.WriteLine($"🌿 신비한 약초를 발견했습니다! (체력 +{heal})");
health += heal;
}
if (health <= 0)
{
Console.WriteLine("💀 체력이 0이 되어 사망했습니다... 게임 오버!");
isAlive = false;
} else if (monsterHealth <= 0)
{
Console.WriteLine("🎉 몬스터를 물리쳤습니다!!");
isAlive = false;
}
break;
case 2:
if (gold >= 1000)
{
gold -= 1000;
Console.Clear();
Console.WriteLine("🎲 장비를 뽑습니다...");
Thread.Sleep(1000);
int rnd = rand.Next(1, 101);
if (rnd <= 1)
{
Console.WriteLine("SSS 전설의검 획득! (공격력 +50)");
power += 50;
}
else if (rnd <= 10)
{
Console.WriteLine("SS 희귀의검 획득! (공격력 +30)");
power += 30;
}
else if (rnd <= 30)
{
Console.WriteLine("S 강철검 획득! (공격력 +20)");
power += 20;
}
else
{
Console.WriteLine("녹슨칼 획득! (공격력 +5)");
power += 5;
}
//Console.WriteLine($"현재 공격력 : {power}");
}
else
{
Console.WriteLine("골드가 부족합니다. (1000골드 필요)");
}
break;
case 3:
Console.WriteLine("휴식을 취합니다... (체력 +20)");
health += 20;
break;
case 4:
Console.WriteLine("게임을 종료합니다.");
Environment.Exit(0);
break;
default:
Console.WriteLine("잘못된 입력입니다.");
break;
}
Thread.Sleep(2000);
}
}
}
}
타겟 맞추기 게임 (📝 콘솔 게임 자유 과제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleCoordinates
{
class Program
{
static void Main(string[] args)
{
Console.SetWindowSize(80, 25); // 콘솔 창 크기 설정
Console.SetBufferSize(80, 25); // 콘솔 버퍼 크기도 설정 (스크롤 없이 고정된 창 유지)
//Console.Title = "멋사 콘솔 게임 만들기";
//Console.BackgroundColor = ConsoleColor.Yellow;
Console.CursorVisible = false;
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.Write("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
for (int j=1; j<=24; j++)
{
if (j == 12)
{
Console.SetCursorPosition(0, j);
Console.Write("┃ 타겟 맞추기 ┃");
continue;
}
Console.SetCursorPosition(0, j);
Console.Write("┃ ┃");
}
Console.Write("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
Thread.Sleep(3000);
Console.Clear();
Random rand = new Random();
Console.WriteLine("wsad로 이동하여 타겟(★)을 맞춰주세요!");
Console.WriteLine("장애물(x)을 건너 이동할 수 없습니다.");
Thread.Sleep(2000);
int round = 1;
int score = 0;
string player = "◎";
string target = "★";
string barrier = "x";
int playerX = 0, playerY = 0;
int targetX = 0, targetY = 0;
List<(int, int)> barriers = new List<(int, int)>();
bool isGameRunning = true;
while (isGameRunning)
{
int barrierX = rand.Next(0, 80);
int barrierY = rand.Next(1, 25);
barriers.Add((barrierX, barrierY));
playerX = rand.Next(0, 80);
playerY = rand.Next(0, 25);
targetX = rand.Next(0, 80);
targetY = rand.Next(0, 25);
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.Write($"{round}단계 | 점수 {score}");
Console.SetCursorPosition(playerX, playerY);
Console.Write(player);
Console.SetCursorPosition(targetX, targetY);
Console.Write(target);
foreach (var b in barriers)
{
Console.SetCursorPosition(b.Item1, b.Item2);
Console.Write(barrier);
}
while (true)
{
ConsoleKeyInfo key = Console.ReadKey(true);
int newX = playerX;
int newY = playerY;
switch (key.Key)
{
case ConsoleKey.W:
if (playerY > 1)
{
newY--;
}
break;
case ConsoleKey.S:
if (playerY < 24)
{
newY++;
}
break;
case ConsoleKey.A:
if (playerX > 1)
{
newX--;
}
break;
case ConsoleKey.D:
if (playerX < 79)
{
newX++;
}
break;
}
if (!barriers.Contains((newX, newY))) // 장애물 확인
{
playerX = newX;
playerY = newY;
}
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.Write($"{round}단계 | 점수 {score}");
Console.SetCursorPosition(playerX, playerY);
Console.Write(player);
Console.SetCursorPosition(targetX, targetY);
Console.Write(target);
foreach (var b in barriers)
{
Console.SetCursorPosition(b.Item1, b.Item2);
Console.Write(barrier);
}
if (playerX == targetX && playerY == targetY)
{
score += 1;
break;
}
}
round++;
}
}
}
}
'Unity > 멋쟁이사자처럼' 카테고리의 다른 글
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 9일차 회고 (0) | 2025.03.07 |
---|---|
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 8일차 회고 (0) | 2025.03.07 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 7일차 회고 (0) | 2025.03.07 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 6일차 회고 (0) | 2025.03.07 |
멋쟁이 사자처럼 부트캠프 유니티 게임 개발 4기 5일차 회고 (0) | 2025.03.07 |