티스토리 뷰

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++;
            }

        }
    }
}

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함