728x90

TiL 53

텍스트 RPG 게임, 팀원과 협업하기 - TIL#12

저번에 개별적으로 텍스트 RPG 게임을 구현해보는 과제가 있었다. 오늘 추가로 팀원끼리 협업해서 추가 기능을 넣은 텍스트 RPG 게임을 개발하는 과제가 생겼는데, 우리 팀에서는 각자 구현했던 콘솔 게임의 스크립트를 차례로 발표하고, 가장 괜찮은 사람의 것을 바탕으로 팀 전체의 프로젝트를 진행하기로 결정했다. 그런데 팀원 중 한 분이 게임엔진급으로 확장성이 매우 좋은 스크립트를 구현하셔서 (난 내가 배웠던 C#의 기능을 이렇게 다채롭게 쓸 수 있다는 것을 처음 알았다.) 팀원 모두 그것을 바탕으로 프로젝트를 진행하기로 했다. 1. 프로젝트의 구조와 역할 분담 프로젝트 파일은 여러 개의 C# 스크립트로 구성되어 있다. 여기서 Utilities.cs와 EventManager.cs는 프로젝트의 중추적인 역할을 ..

C# : 정렬, 탐색 알고리즘 - TIL#11

알고리즘하면 빼먹을 수 없는 정렬, 탐색 알고리즘이다. 정렬 알고리즘은, 어떤 데이터 세트가 있을 때, 특정 순서(오름차순, 내림차순 등)로 배열하는 알고리즘이다. 즉, {5, 1, 2, 6, 4, 3}이란 데이터가 주어진다면, 오름차순으로 {1, 2, 3, 4, 5, 6}으로 정리하는 방법 등을 말한다. 정렬 알고리즘은 대표적으로 4가지가 있다. 선택 정렬 (Selection Sort) 삽입 정렬 (Insertion Sort) 퀵 정렬 (Quick Sort) 병렬 정렬 (Merge Sort) https://www.youtube.com/watch?v=kPRA0W1kECg 정렬 알고리즘을 방법별로 아주 쉽게 이해할 수 있는 영상. 시각화랑 청각화가 동시에 되어있다. 위 영상에서 처음 4개의 정렬 알고리즘이..

텍스트 RPG 게임 만들기 (3), 알고리즘 기초 - TIL#10

어제 만들던 것에 이어서 남은 필수 요구사항을 구현하기로 했다. 상점에서 구매 시 골드가 부족한 경우 처리 장비해서 변화된 능력치 상태창에 표시 InputAction에서 의도된 입력 외의 입력 처리 아이템 종류 더 추가하기 https://sicilian-najdorf.tistory.com/11 텍스트 RPG 게임 만들기 (2) - TIL#9 오늘은 어제까지 했던 것과 다르게 C# 문법에 대해 공부를 따로 하지는 않고 4주차 과제인 '텍스트 RPG 게임 만들기'의 필수 기능을 구현을 최대한 하기 위한 시간을 가지도록 했다. 지난번에 코드 sicilian-najdorf.tistory.com 우선, 상점에서 골드가 부족할 때 아이템 구매를 하려고 하면 "Gold가 부족합니다!" 라는 메시지를 띄우려 한다. i..

텍스트 RPG 게임 만들기 (2) - TIL#9

오늘은 어제까지 했던 것과 다르게 C# 문법에 대해 공부를 따로 하지는 않고 4주차 과제인 '텍스트 RPG 게임 만들기'의 필수 기능을 구현을 최대한 하기 위한 시간을 가지도록 했다. 지난번에 코드의 뼈대만 진짜 간략하게 만들어봤는데... 게임? 이라고 하기도 뭐한 뼈만 남은 닭다리였다. 오늘 추가한 기능과 코드를 설명하는 방식으로 살펴보고, 마지막에 전체 코드를 싣기로 하였다. 먼저, 가장 중요한 Player 클래스에 '플레이어와 관련 있는 행동'을 메서드로 추가하고, 인벤토리를 만들었다. (아이템 정보는 GameScene 클래스에 있다.) public class Player { // 플레이어의 능력치 public int level = 1; public string name = "Chad"; publi..

C# 기초 문법 나머지, 텍스트 RPG 게임 만들기 - TIL#8 (2)

https://sicilian-najdorf.tistory.com/9 C# 기초 문법 나머지, 텍스트 RPG 게임 만들기 (1) - TIL#8 어제는 객체 지향 프로그래밍(OOC)과 가장 중요한 개념인 객체와 클래스를 중점적으로 다뤄봤었다. 오늘은 이어서 인터페이스(Interface)에 대해서 배웠는데, 인터페이스는 USB 포트와 같이 클래스 sicilian-najdorf.tistory.com 이전 글에 이어서 TIL을 작성한다. 이번 글에선 LINQ, 고급 자료형, 본격적인 텍스트 RPG 게임 만들기에 대해 다룰 것이다. LINQ란? .NET 프레임워크에서 제공되는 쿼리 언어 확장이다. 데이터베이스에서 다양한 작업을 지원하는 확장인데, 데이터를 다뤄서 그런지 정보처리기능사를 준비할 때 배웠던 SQL과 ..

C# 기초 문법 나머지, 텍스트 RPG 게임 만들기 - TIL#8 (1)

어제는 객체 지향 프로그래밍(OOC)과 가장 중요한 개념인 객체와 클래스를 중점적으로 다뤄봤었다. 오늘은 이어서 인터페이스(Interface)에 대해서 배웠는데, 인터페이스는 USB 포트와 같이 클래스를 정의할 때 일종의 규격을 만드는 기능이다. 클래스 상속과 사용 방법은 거의 동일하다. 이러면 클래스와 다를 게 뭔가 의문점이 든다. 인터페이스를 쓰는 이유를 크게 3가지로 볼 수 있다. 다중 상속 가능 (클래스는 안 됨) 클래스 정의 시 일정한 규격의 변수 지정을 강제할 수 있음 객체정보 간소화 클래스는 다이아몬드 문제를 피하기 위해 다중 상속이 안되지만, 인터페이스는 일종의 다중 상속과도 같은 기능을 구현해 볼 수 있다. 다이아몬드 문제 관련글: https://velog.io/@soongle/c-%EB..

C# 문법 기초, 콘솔 숫자야구 게임 만들기 - TIL#7

오늘은 공부한 분량이 상당했기 때문에 전부 다 꼼꼼하게 정리하기엔 어느정도 한계가 있다고 판단했다... 그래서 공부할 때 메모했던 내용을 다듬는 식으로 정리할까 싶다. 항상 나는 Python을 주로 다뤘기 때문에 배열 = 리스트? 라고 단순히 생각했었다. 하지만, 적어도 C#에서는 배열과 리스트는 다르다! 배열은 처음에 정적으로 인덱스의 갯수를 할당해줘서 마치 단체 손님에게 방을 몇 개 내 줄 건가와도 같은 형식인데 리스트는 메모리가 동적 할당되며, 어느 부분에선 배열보다 간단하나, 당연히도 코딩 복잡도가 증가한다. var 키워드 때처럼 무분별하게 사용하지 않는 것이 중요하다는 생각을 했다. 리스트와 기타 구조의 자료를 사용하고 싶다면 System.Collections.Generic 네임스페이스를 추가해..

C# 문법 기초, 새로 알게 된 사실과 느낀 점 - TIL#6

오늘부터는 본격적으로 C#을 다루는 것에 집중해서 수업을 받게 된다. 그런만큼 C#에 대해 처음 알게 되는 사실도 있었고 기존에 다른 프로그래밍 언어를 다룰 때 배웠던 개념들도 C#에서는 어떻게 표현하는 지 알 수 있었다. 1. Hello, World! 2. 마법의 키워드 var 3. 궁금했던 문법, 3항 연산자( ? : ) 4. 궁금증: Switch case 문과 If else문의 차이? 5. 기타(foreach, 중첩반복문) 1. Hello, World! 항상 어떤 프로그래밍 언어를 배울 때 제일 처음에 시작하는 것은 당연히 Hello, world!를 콘솔 창에 띄우는 것부터다. Hello, world! 를 콘솔 창에 띄우는 것을 보고 우리는 그 언어에 대해 첫인상을 받게 되고 대충 이럴 것이다 라는..

카드 찾기 게임 종합 정리와 기타 알게 된 사실들 - TIL#5

오늘은 그동안 만들었던 똑같은 카드 찾기 게임을 다시금 정리하는 시간을 가졌다. 그래도 강의를 들으며 예제를 따라 만들었을 때, 나는 꽤 잘 알고 있다고 생각했지만, 튜터님과 함께 수업을 하고 질문도 하니 의외로 잘 모르고 있었다는 생각이 들었다. 항상 GameManager.cs 의 Start 함수에 게임의 시간을 설정했었는데 Time.deltaTime이 문자 그대로 해석을 해도 '시간차'를 의미하는 건 알고 있었지만 정확히 '언제부터 언제까지의' 시간차를 의미하는 지는 몰랐다. 하지만, 이는 fps(frames per second, 단위 시간(초)당 프레임의 수)와 관계가 있으며 60fps로 설정할 시 1/60초에 1프레임이 흘러가며 지금 우리가 느끼는 것과 똑같은 시간이 흘러가는 것이다. 잘 생각해보..

카드 섞는 기능 구현하기 - TIL#4

어제 르탄이 찾기 카드게임에 추가했던 다시 시작 버튼 말고 오늘은 버튼을 누르면 남은 카드들끼리 섞이는 기능을 추가해보려고 한다. 우선은 어제 다시 시작 버튼을 만들었던 것처럼 새로운 기능을 맡아줄 버튼의 스프라이트를 제작했다. 기존의 retryBtn 오브젝트를 Ctrl + D 해서 복제한 뒤, 이름만 바꾸고 새로 스크립트만 적용시키면 기본적인 세팅은 끝난다. 문제는 지금부터였다. '지금 남아있는 카드끼리 섞는 기능' 이라는 것은 내 머리로 이해하기는 굉장히 쉬운 개념이지만 이를 로직을 생각해서 스크립트로 구현하기는 또 다른 문제였다. public void shuffleCard() { // 내가 원하는 기능: // 남은 카드의 인덱스를 가져온 뒤 다시 섞고, // 그 위치 그대로 섞인 인덱스를 적용하기 ..

728x90