오늘부터 프로그래머스 기초 트레이닝 문제를 풀기 시작했다. 어제 본 배치고사에서 기본적인 문제를 풀지 못했던게 자꾸 생각나 시간을 내서 조금씩이라도 해보려고 한다.
▶▷ 프로그래머스 풀이
Q1. 문자열 str이 주어질 때 str을 출력하는 코드 작성
using System;
public class Q1
{
public static void Main()
{
String s;
Console.Clear();
s = Console.ReadLine();
Console.WriteLine(s);
}
}
A1. Console.WriteLine에 문자열 변수를 넣어 출력
Q2. 정수 a와 b가 주어질 경우 각 수를 입력받아 입출력 예와 같은 형식으로 출력하는 코드 작성
입출력 예
입력:
4 5
출력:
a = 4
b = 5
using System;
public class Q2
{
public static void Main()
{
String[] s;
Console.Clear();
s = Console.ReadLine().Split(' ');
int a = Int32.Parse(s[0]);
int b = Int32.Parse(s[1]);
Console.WriteLine($"a = {a}");
Console.WriteLine($"b = {b}");
}
}
A2. 각각 Console.WriteLine에 $를 붙여 문자열 안에서 변수를 사용할 수 있도록 한 다음 a와 b 각각 출력에 맞게 두줄로 작성
Q3. 문자열 str과 정수 n이 주어질 경우 str이 n번 반복된 문자열을 만들어 출력하는 코드 작성
입출력 예
입력:
string 5
출력:
stringstringstringstringstring
using System;
public class Q3
{
public static void Main()
{
String[] input;
Console.Clear();
input = Console.ReadLine().Split(' ');
String s1 = input[0];
int a = Int32.Parse(input[1]);
for (int i = 0; i < a; i++)
{
Console.Write(s1);
}
}
}
A3. for 반복문을 사용해서 변수 s1을 5번 출력하도록 작성
다음으로 풀 문제는 대소문자를 각각 반대로 바꾸는 문제인데 이 문제는 따로 존재하는 기능이 있는지 모르겠어서 조금 더 고민해 볼 예정이다. 팀 프로젝트 중이라 많이는 풀지 못했지만 조금씩 꾸준히 해보려고 한다.
▶▷ 팀 프로젝트
얼마 안남은 몇가지 기능을 다시 분담해서 진행했다. 내 역할은 캐릭터 생성 씬 제작이다.
현재는 게임을 시작하면 바로 마을로 가서 시작되는 상태라 실행을 담당하는 Program 클래스에서 마을이 아닌 생성 화면으로 시작되도록 약간의 수정을 했고 CreatePlayerScene 클래스를 새로 추가하였다.
using DungeonTRPG.Entity;
using DungeonTRPG.Entity.Player;
using DungeonTRPG.Entity.Utility;
using DungeonTRPG.Utility.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DungeonTRPG.StateMachineSystem.SceneStates.PlayerScene
{
internal class CreatePlayerScene : SceneState
{
private Player player; // Player 객체 참조
internal Job Job { get; private set; }
public CreatePlayerScene(StateMachine stateMachine) : base(stateMachine)
{
player = stateMachine.Player;
}
public override void Exit()
{
base.Exit();
}
public override void Update()
{
base.Update();
}
protected override void View()
{
Console.WriteLine("사용하실 이름을 입력해주세요");
string name = Console.ReadLine();
player.SetName(name); // 플레이어 클래스에 이름 관리 메서드에 입력 받은 이름에 대한 정보 전달
if (name != null)
{
Console.WriteLine($"안녕하세요 '{name}'님 DungeonTRPG에 오신 것을 환영합니다.");
Console.WriteLine("");
Console.WriteLine("===========================================================================");
Console.WriteLine("|| 원하는 직업을 선택해주세요 ||");
Console.WriteLine("|| 1. 전사 2. 법사 3. 궁수 0. 게임 종료 ||");
Console.WriteLine("===========================================================================");
Console.WriteLine("");
string input = Console.ReadLine();
switch (input)
{
// 전사
case "1":
player.Job = Job.Warrior; // player 클래스에 유저가 선택한 직업 정보 전달
stateMachine.ChangeState(stateMachine.VillageScene); // 직업 선택 후 마을로 이동
break;
// 법사
case "2":
player.Job = Job.Mage;
stateMachine.ChangeState(stateMachine.VillageScene);
break;
// 궁수
case "3":
player.Job = Job.Archer;
stateMachine.ChangeState(stateMachine.VillageScene);
break;
// 게임 종료
case "0":
stateMachine.isGameOver = true;
break;
default:
Console.WriteLine("잘못된 입력입니다.");
break;
}
}
}
}
}
먼저 앞에서 만들었던 플레이어 객체를 참조하고 생성자를 통해 객체를 전달하도록 작성했다.
게임을 시작하면 사용할 이름을 입력 받은 다음 name이 null이 아닐 경우 직업 선택을 위한 텍스트를 출력하도록 했다.
그 다음 원하는 직업의 번호를 입력 받아 case문으로 각각 나누어 처리되도록 했고 각 case에서는 선택한 직업에 대한 정보를 player에 전달 하도록 했다.
처음에는 StateMachine에 바로 직접 전달하는 방식으로 코드를 작성했으나 player를 만들어두었으니 거기에 전달하고 player에 있는 값을 StateMachine에서 사용하도록 하는 것이 더 좋을 것 같다는 의견을 듣고 현재의 방법으로 수정하게 되었다.
바꾸는 과정에서 직업의 경우에는 enum으로 나열해둔 클래스가 있어서 문제없이 금방 전달할 수 있었는데 이름은 따로 클래스가 없어서 자꾸 빨간 줄이 생겨 어떻게 해야할지 몰라 사용할 이름 변수를 캐릭터 클래스, 스탯 클래스, 상태머신 클래스, 프로그램 클래스 등 여기저기에 선언 해보았는데 죄다 안되는 어려움을 겪었다.
헤매는 동안 반나절이나 지났던게 너무 허무해서 멍해있던 도중 그 전 역할에서 스탯 클래스에 관리 메서드를 따로 만들어서 캐릭터와 플레이어 클래스에서 사용했던 것이 생각났다. 그래서 플레이어 클래스에도 이름을 관리하는 메서드를 따로 만들어보면 어떨까 해서 SetName() 메서드를 통해 이름 변수를 전달하니 금방 해결되었다.
public void SetName(string name)
{
if (!string.IsNullOrEmpty(name)) // IsNullOrEmpty()로 빈칸이 입력되는 경우까지 방지
{
Name = name;
}
}
별거 아니긴 하지만 반나절의 결실이라고 생각하니 뿌듯했다.
내일은 마무리 단계로 조금씩 남은 기능들과 버그 체크 그리고 주석 추가 등의 작업을 할 것 같다.
'게임 개발 공부 기록' 카테고리의 다른 글
16일차 - TRPG 팀 프로젝트 마무리 + 프로그래머스 기초 트레이닝 (0) | 2025.02.13 |
---|---|
15일차 - TRPG 팀 프로젝트 5 (0) | 2025.02.12 |
13일차 - TRPG 팀 프로젝트 3 (0) | 2025.02.10 |
12일차 - TRPG 팀 프로젝트 2 (0) | 2025.02.07 |
11일차 - TRPG 팀 프로젝트 1 (Git특강 2회차 + 와이어 프레임) (0) | 2025.02.06 |