오늘부터는 TextRPG를 팀 단위로 진행하게 됐다.
진행을 위해서 의논도 하고 깃허브도 다같이 실험해보고 의견도 나누는 시간은 있었지만 지금 당장 쓸 것은 없어보인다..
그리고 아직도 컨디션이 많이 좋지 않아 예전에 공부한 연결리스트와 짧게 작성한 코드 하나만..올려보도록한다.
예전에 C++로 작성해본 양방향 연결리스트가 있어서 가져와봤다.
template <typename T>
struct Node {
T data;
Node<T>* prev;
Node<T>* next;//본인을 가리킬 때에는 템플릿 매개변수 명시 필요X
//첫 번째 생성자
Node()
:data(),
prev(nullptr),
next(nullptr)
{}
//두 번째 생성자
Node(const T& rData, Node<T>* pPrev, Node<T>* pNext)
:data(rData),
prev(pPrev),
next(pNext)
{}
};
두 번째 생성자를 보면 데이터와 앞에 올 노드의 포인터, 뒤에 올 노드의 포인터를 전달 받는다.
//리스트 헤더 & 리스트 길이
template <typename T>
class List {
private:
Node<T>* head;
Node<T>* tail;
int count;
public:
List();
~List();
public:
void pushback(const T& rData);
void pushfront(const T& rData);
};
//List 기본 생성자
template <typename T>
List<T>::List()
:head(nullptr),
tail(nullptr),
count(0)
{
}
하나의 리스트는 맨 앞 노드(head)와 맨 뒷 노드(tail)가 있다.
그리고 총 개수를 세기 위한 count가 있다.
앞과 뒤에 새로운 노드를 추가하는 pushback과 pushfront 멤버 함수가 있다.
생성자에는 특이할 것 없이 노드의 초기화만 있다.
아래 함수는 리스트 뒤쪽에 노드를 넣는 함수이다.
//뒤에 데이터 삽입
template <typename T>
void List<T>::pushback(const T& rData) {// 1. 데이터 받음
Node<T>* newNode = new Node<T>(rData, nullptr, nullptr); // 2. 새로운 노드 생성
// 3.처음 입력이라면
if (nullptr == this->head)
{
this->head = newNode;
this->tail = newNode;
}
else //4. 처음 입력 아니라면
{//1개 이상이라면
// @node 'n'은 생성해서 리스트에 넣을 노드
//1. node n-1이 node n을 next로 가리킴 [node n-1] => [node n]
//2. node n이 node n-1을 prev로 가리킴 [node n-1] <= [node n]
//3. List의 tail이 node n을 가리킴
tail->next = newNode;
newNode->prev = tail;
tail = newNode;
}
++count;
}
조금 헷갈리지만 찬찬히 보면 쉬우며, 자리만 바꾸는 것을 볼 수 있다.
pushfront는 생략
#region 캐릭터 생성
public void CharacterCreation()
{
string name = string.Empty;
string input = string.Empty;
while(true)
{
Console.Clear();
Console.WriteLine("===== 캐릭터 생성 =====");
Console.WriteLine("이름을 입력하십시오.");
name = Console.ReadLine();
if (name == "")
{
Console.WriteLine("입력 값이 없습니다.");
Console.ReadLine();
continue;
}
Console.Clear();
Console.WriteLine("===== 캐릭터 생성 =====");
Console.WriteLine($"입력하신 이름은 {name} 입니다.");
Console.WriteLine("1. 저장");
Console.WriteLine("2. 취소");
Console.Write("");
input = Console.ReadLine();
switch(input)
{
case "1":
break;
case "2":
continue;
default:
continue;
}
Console.Clear();
Console.WriteLine("===== 캐릭터 생성 =====");
Console.WriteLine($"이름 : {name}");
Console.ReadLine();
Console.Clear();
break;
}
player = new Player(1, name, PlayerClass.Worrior, 10, 5, 100, 100, 1500);
}
#endregion