제가 배우고있는것은 게임개발 관련 정부지원 사업중 하나인 내일배움카드를 통해서 진행되고있고 스파르타 캠프라는 곳에서 진행중임을 알려드리고 작성합니다!
CMD Text Rpg의 기본적인 베이스만 만들어보기

cs파일을 여러개로 나누어 따로 진행해보기로 했고 그 과정동안 꽤 다사 다난했던것 같습니다 생각보다 내용이 길어지기 시작했고 여러개로 나눈 파일을 합치는것도 생각보다 시간을 잡아먹게 되었습니다.
{
internal class Program
{
static void Main(string[] args)
{
Start instart = new Start();
instart.Update();
}
}
}
첫 스타트인 program의 Main에서는 게임의 시작화면으로 넘어가는 코드를 짜기로 했고 여긴 그냥 보기 편하게 하기 위한 용도로만 사용했습니다.
필드 Start 의 Main Scene인데 어라 생각보다 잘됐네라고 생각했습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dungeon
{
internal class Start//필드
{
Status status;
Inventory inventory;
Shop shop;
string keyInput;
int numint;
public Start()//메서드(멤버함수)
{
status = new Status("Rtan", 1, 10, 5, 100, 15000);
inventory = new Inventory(status);
shop = new Shop(status, inventory);
}
public void Update()
{
while (true)
{
int num = 0;
Console.WriteLine("\n스파르타 마을에 오신 여러분 환영합니다.");
Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.\n");
Console.WriteLine("1. 상태 보기");
Console.WriteLine("2. 인벤토리");
Console.WriteLine("3. 상점");
Console.WriteLine("0. 나가기\n");
Console.WriteLine("원하시는 행동을 입력해주세요.");
keyInput = Console.ReadLine();
int.TryParse(keyInput, out numint);
switch (numint)
{
case 1:
status.MyStatus();
break;
case 2:
inventory.Render();
break;
case 3:
shop.Store();
break;
default:
Console.Clear();
Console.WriteLine("\n지정된 값이 아닙니다.\n");
break;
}
}
}
}
}
처음엔 무엇이든 잘 진행되는것 같고 머릿속에 있는 최소한의 그림따라 가는것 처럼 원하는 모양이 잡힌다고 생각을 했습니다. 근데 한 곳의 필드에 이것저것 다 집어넣게 되면 복잡해질거라 생각해서 일부러 그렇게 하지 않았는데 오히려 class를 이곳저곳에 넣게 되니 생각하지 않던 부분이 눈에 밟히게 되더군요.
강의 내용을 제대로 따라가지 못하면 제대로 이해할때까지 과제를 늦추자..
switch (menu)
{
case 0:
Console.Clear();
break;
case 1:
if (status.Gold < items[menu - 1].Gold)
{
Console.WriteLine("금액이 부족 합니다.");
}
else
{
if (status.Gold >= items[menu - 1].Gold)
{
status.Gold -= items[menu - 1].Gold;
Console.WriteLine("========================");
Console.WriteLine("아이템을 구매 했습니다!");
inventory.Myinventory(items[menu - 1]);
items.RemoveAt(menu - 1);
Console.WriteLine("========================");
}
}
break;
후회하던 부분중 문제점이 많았던 부분들은 아무래도 Shop 이라는 class를 꾸미던 중에 문제가 발생했습니다. 실제로 구현을 해야하지만 하지 못한 부분도 많았고 그중에서는 구현했음에도 문제가 생겼던 부분이 많았죠 그 부분만 따로보자면
case 0:
Console.Clear();
break;
case 1:
inventory.Myinventory(items[menu - 1]);
items.RemoveAt(menu - 1);
Switch에 사용하는 case 입니다. 무엇이 문제였던고 하면 첫번째, 현재 class:shop안에 매서드는 input을 받아 start로 나가야하는 곳입니다. 그러므로 0을 받으면 Class:Start로 가야하는 곳이죠 근데 이곳에서 return;이 아닌 break;을 쓰게 되면서 이곳에서 구매한 아이템이나 행동들이 값을 받아야하는 class로 넘어가지 못하게 된 상항인거죠 생각보다 자주 쓰게 되는 것이고 자주 보다보니 이상한 점을 눈치채지 못했지만 큰 문제였었죠
두번째, Invetory.Myinventory의 매서드 안에 요청받은 코드를 집어넣어야했는데 멤버변수등 해야하는 작업조차 까먹은 상태로 진행하다보니 오류가 지속적으로 났었죠 받아야할곳과 집어넣어야할 곳은 class마다 필요한데 그때마다 선언 해준다는 것을 안하다보니 코드자체로는 빨간줄이 보이지 않았지만 실제로는 문제가 있던 상태였죠
간단한 보기로 class item => class 내에 Item equipitem(멤버변수등 선언) => class shop.store => Class inventory => Item equipitem(멤버변수등 선언) 등으로 지금 현재 가지고 있는 지식으로는 이런 구성을 해주어야 만들어둔 item을 받아 올수 있던것이었죠 앞으로는 이런 실수는 일어나지않으려면 조금더 설계도를 제대로 그릴줄아는 혹은 다이어그램을 만들어 보는 연습을 주기적으로 해봐야 할것 같습니다. 부족한 실력에 대해서는 그 부분은 노력의 영역이니 최선을 다해야겠죠
마무리
TIL을 매일같이 쓰려고 노력은 해보지만 막상 시작해보면 이 일이 참 쉽지 않다는것을 매일 느끼는것 같습니다 그럼에도 불구하고 어떻게든 뺴먹지 않게 노력하려하며 이만 물러나겠습니다 감사합니다.
'스파르탄캠프 > 본격적인 캠프' 카테고리의 다른 글
| 노베이스의 게임개발(본 캠프) 3주차 월요일 (0) | 2024.04.29 |
|---|---|
| 노베이스의 게임개발(본 캠프) TextRpg 기능 구현 (1) | 2024.04.26 |
| 노베이스의 게임개발(본 캠프) Write, WriteLine (2) | 2024.04.23 |
| 노베이스의 게임개발(본 캠프) 2주차 진입! (0) | 2024.04.22 |
| 노베이스의 게임개발(본 캠프) 1주차의 마무리 (1) | 2024.04.20 |