2025. 10. 1. 22:03ㆍ개발

전체 게임 콘솔창 녹화화면


펼치면 전체코드
namespace ConsoleApp;
public class Character
{
public int level = 255;
public string name = "daisy";
public string job = "wizard";
public int attack = 300;
public int defense = 500;
public int health = 200;
public int Gold = 1000;
}
public class TextRpg
{
Character character = new Character();
string[] itemNames =
{
"무쇠갑옷", //0
"낡은 검", //1
"연습용 창", //2
};
int[] itemTypes = //아이템 타입 배열
{
1, //방어구
0, //무기
0
};
int[] itemStats = //아이템 공격력 배열
{
5, //무쇠갑옷, 방어력
2, //낡은 검, 공격력
3 //연습용 창, 공격력
};
string[] itemAbout = //아이템 설명 배열
{
"무쇠로 만들어져 튼튼한 갑옷입니다.",
"쉽게 볼 수 있는 낡은 검입니다.",
"검보다는 그대로 창이 다루기 쉽죠."
};
//장착여부 배열 만들기
bool [] equipment =
{
false,
false,
false
};
static void Main()
{
TextRpg textRpg = new TextRpg();
textRpg.Intro();
}
public void Intro()
{
while(true)
{
Console.WriteLine("스파르타 마을에 오신 여러분 환영합니다.\n이곳에서 던전으로 들어가기 전 활동을 할 수 있습니다.");
Console.WriteLine("1.상태 보기\n2.인벤토리");
Console.WriteLine("원하시는 행동을 입력해주세요.");
string input = Console.ReadLine();
if (input == "1")
{
Console.WriteLine("상태보기를 선택했습니다.");
Information();
}
else if (input == "2")
{
Console.WriteLine("인벤토리를 선택했습니다.");
Inventory();
}
else
{
Console.WriteLine("잘못된 입력입니다.");
}
}
}
public void Information() //캐릭터 정보 기능 매서드
{
while (true)
{
Console.Clear();
Console.WriteLine("상태 보기 \n 캐릭터의 정보가 표시됩니다.");
Console.WriteLine($"Level: {character.level}\n{character.name}( {character.job} )\n공격력: {character.attack}()\n방어력: {character.defense}()\n체력: {character.health}\nGold: {character.Gold} G");
Console.WriteLine("0.나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
string input = Console.ReadLine();
if (input == "1")
{
Console.WriteLine(character.name);
Console.WriteLine(character.job);
Console.WriteLine(character.level);
Console.WriteLine(character.health);
Console.WriteLine(character.Gold);
Console.WriteLine(character.attack);
Console.WriteLine(character.defense);
}
else if (input == "0")
{
Console.Clear();
TextRpg textRpg = new TextRpg();
textRpg.Intro();
}
}
}
public void InventoryList()
{
for (int i = 0; i< 3; i++)
{
Console.Write($"-{itemNames[i]}");
if (equipment[i]==true)
{
Console.Write("[E]");
}
if (itemTypes[i] == 0)
{
Console.Write($"\t공격력+{itemStats[i]}");
}
else if (itemTypes[i] == 1)
{
Console.Write($"\t방어력+{itemStats[i]}");
}
Console.WriteLine($"|\t{itemAbout[i]}");
}
}
public void Inventory()
{
while (true)
{
Console.Clear();
Console.WriteLine("인벤토리");
Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
Console.WriteLine("[아이템 목록]");
//아이템 목록 호출
InventoryList();
Console.WriteLine("1.장착 관리");
Console.WriteLine("0.나가기");
string input = Console.ReadLine();
if (input == "1")
{
Console.WriteLine("장착 관리를 실행합니다");
Equipment(character);
}
else if (input == "0")
{
Console.Clear();
break;
}
else
{
Console.WriteLine("잘못된 입력입니다.");
}
}
}
//장착관리 매서드
public void Equipment(Character character){
Console.Clear();
for (int i = 0; i<itemNames.Length; i++)
{
Console.Write($"{i+1}{itemNames[i]}");
if (equipment[i]==true)
{
Console.Write("[E]");
}
if (itemTypes[i] == 0)
{
Console.Write($"\t공격력+{itemStats[i]}");
}
else if (itemTypes[i] == 1)
{
Console.Write($"\t방어력+{itemStats[i]}");
}
Console.WriteLine($"|\t{itemAbout[i]}");
}
string input = Console.ReadLine();
int idx = int.Parse(input)-1;
if (equipment[idx]==false)
{
equipment[idx] = true;
if (itemTypes[idx] == 0) //무기
{
character.attack += itemStats[idx]; //무기+(공격력)
}
else if (itemTypes[idx] == 1)//방어구
{
character.defense += itemStats[idx]; //방어구 +방어력
}
}
else //해제
{
equipment[idx] = false;
if (itemTypes[idx] == 0) //무기
{
character.attack -= itemStats[idx]; //무기-(공격력)
}
else if (itemTypes[idx] == 1)//방어구
{
character.defense -= itemStats[idx]; //방어구 -방어력
}
}
InventoryList();
string input2 = Console.ReadLine();
if (input2 == "0")
{
Console.Clear();
TextRpg textRpg = new TextRpg();
}
if (equipment[idx]==true)
{
InventoryList();
Information();
}
}
}

그래도 젭코 500 땄다 가영아..
토닥토닥..ㅜㅜ
오늘 배운거 self설명 들어갈게요..
step 1. 게임 시작 문구 출력
이 부분은 이제 와서 생각해보니 어려울게 별로 없었는데, 왤케 튜터님 잡고 늘어졌지..큼큼;



진짜 별거 없어요..
console.writeline 으로 문구들 쓰고
이스케이프 \n 달아서 엔터 달아주면 됩니다.
유저에게 값 입력 받기 위해서
string input = console.readline()
달아주고
입력 값마다 어떤 문구 띄워줘야하는지 조건문 쓰면 됩니다.
ㄹㅇ 별거 없음.


스탭 2에서 캐릭터 정보 만들어달라고 해서
이렇게 클래스 따로 만들어서
캐릭터의 정보들을 넣어줍니다.
튜터님들이 누누이 말씀해주셨지만
클래스 = 붕어빵 틀! / 설계도!
안에 들어가는건 앙고~

자 스탭3 넘어오면 캐릭터의 상태를 보여줘야해요.
이전 것들은 지워주어야겠죠

Console.Clear();
이걸 통해서 지워줄 수 있습니다.



if input 1은 그냥 백그라운드에 있는 정보들일 뿐,
유저창에는 보이지 않습니다.
유저창에 보이라면 저 위에 기다란 코드에서 설정하면 됨.
0누르면 다시 시작화면으로 돌아갑니다.

이제 스텝 4로 넘어가요..


오.. 여기 배열을 묶음으로 만들어버리는게 너무 어려웠어요 ....



아이템 이름, 타입, 공격력, 설명 다 배열로 만들었습니다.
그리고 bool로 장비 장착여부 배열까지 만들었어요

장비를 장착했는지 아닌지를 알아야하잖아요?
~인지
~아닌지
선택지가 true와 false로 나뉘는 자료형. bool을 써야겠지요?
근데 여기서 전부 false를 쓴 이유는
장비를 착용하지 않은 상태가 기본상태이기 때문입니다.
그리고 false를 3번이나 쓴 이유는
다른 배열들도 다 값이 3개씩 있기 때문이죠.



반복문은 무조건 for문 써야합니다.
아이템 목록 호출에다가 반복문을 써서
아이템 배열들의 인덱스 값들을 writeline으로 호출해왔어요.
백그라운드의 인덱스는 조건에서처럼 0~2일때 반복호출되는거겠죠.

이제 일치하는 아이템 쓸거에요.
그러면 유저한테 어떤 아이템 선택할건지 입력 받아야해요.
근데 백그라운드의 input값이랑
유저가 선택한 input값이랑 달라요
백그라운드 input =>(0,1,2)
유저선택 input => (1,2,3)
그래서 값을 동일하게 해주려면
input에다가 -1해준겁니다.

빼기를 쓰는 다른 방법들.
이렇게도 쓸 수 있어요
우린 정석대로 갑시다.


자 다음 스탭 넘어가요..
이제 장착했을 때 [E]달아줄거에요.
이 역시 조건문으로
보간 달아서
배열 불러와주고

1은 방어구
0은 무기죠

그쵸..

마찬가지로 이큅먼트 매서드 안에서
장비 장착하고 있지 않을 때 무기+공격력
방어구+방어력
코드 작성해주고

장착 안하면 그냥 빼주면 됩니다
-=

'개발' 카테고리의 다른 글
| C#으로 블랙잭 게임 만들기 (0) | 2025.10.13 |
|---|---|
| C# 스네이크게임 만들기 (0) | 2025.10.09 |
| Text RPG 개발-2 (0) | 2025.09.30 |
| C#문법 종합 개인과제 [도전! 던전 탈출] (1) | 2025.09.29 |
| C#기초 공부 / void랑 class 차이점 (0) | 2025.09.28 |