플레이어 상호작용 Practice

sejun-Lee·2025년 3월 27일

// 플레이어가 다양한 물체 앞에서 상호작용 키를 누르면 앞 대상에 따라 다양한 방응.

public interface Interaction    // 상호작용을 인터페이스로 정의
{
    public void interaction();
}

// 1. npc 앞에선 대화
public class NPC : Interaction  
{
    public void interaction()   // npc는 상호작용을 인터페이스로 받아 대화를 함
    {
        Console.WriteLine("npc와 대화 합니다.");
    }
}

// npc중 상인은 상점 열기
public class Merchant : NPC
{
    public void OpenShop()  // 상인은 상호작용을 인터페이스로 받아 상점을 열음
    {
        Console.WriteLine("상점을 엽니다.");
    }
}

// 2. 상자 앞에선 아이템 습득
public class Box : Interaction
{
    public void interaction()   // 상자는 상호작용을 인터페이스로 받아 아이템 습득을 함
    {
        Console.WriteLine("아이템을 습득 합니다.");
    }
}

// 3. 문 앞에선 이동 진행
public class Door : Interaction
{
    public void interaction()   // 문은 상호작용을 인터페이스로 받아 이동을 함
    {
        Console.WriteLine("문 안으로 이동합니다.");
    }
}

public class Player
{
    public string Move()
    {
        string input;
        while (true)  // 올바른 입력을 받을 때까지 반복
        {
            Console.WriteLine("현재 Player가 이동할 대상을 선택해 주세요.");
            Console.WriteLine("1. npc 2. box 3. door 4. Merchant npc");
            input = Console.ReadLine();     // 이동할 대상 선택

            switch (input)      // 선택한 대상으로 이동
            {
                case "1":
                    Console.WriteLine("npc 앞으로 이동합니다.");
                    return input;
                case "2":
                    Console.WriteLine("box 앞으로 이동합니다.");
                    return input;
                case "3":
                    Console.WriteLine("door 앞으로 이동합니다.");
                    return input;
                case "4":
                    Console.WriteLine("Merchant npc 앞으로 이동합니다.");
                    return input;
                default:
                    Console.WriteLine("잘못된 입력입니다. 다시 선택해 주세요.");
                    Console.WriteLine();
                    break;  // while 루프를 계속 반복
            }
        }
    }
}

static void Main(string[] args)
{
    NPC npc = new NPC();
    Merchant merchant = new Merchant();
    Box box = new Box();
    Door door = new Door();
    Player player = new Player();

    // 올바른 대상이 입력될 때까지 반복하여 입력 받음
    string input = player.Move();
     
    bool Fkey = true;   // F 키의 올바른 입력시 까지 반복하기 위한 매개변수
    while (Fkey) 
    {
        Console.WriteLine("상호작용 키는 F 입니다. F 를 눌러주세요");
        string input2 = Console.ReadLine().ToUpper(); // 대소문자를 따로 인식하는 오류를 막기위해 무조건 대문자로 변환

        if (input2 == "F")      // 상호작용 키를 누르면 상호작용
        {
            switch (input)
            {
                case "1":
                    npc.interaction();
                    Fkey = false;
                    break;
                case "2":
                    box.interaction();
                    Fkey = false;
                    break;
                case "3":
                    door.interaction();
                    Fkey = false;
                    break;
                case "4":
                    merchant.interaction();
                    merchant.OpenShop();
                    Fkey = false;
                    break;
                default:
                    Console.WriteLine("잘못된 입력입니다.");
                    break;  // 잘못된 입력시 다시 시작.
            }
        }
    }
}

현재 Player가 이동할 대상을 선택해 주세요.
1. npc 2. box 3. door 4. Merchant npc
4
Merchant npc 앞으로 이동합니다.
상호작용 키는 F 입니다. F 를 눌러주세요
ww
상호작용 키는 F 입니다. F 를 눌러주세요
f
npc와 대화 합니다.
상점을 엽니다.

profile
초보 개발자

0개의 댓글