C# BlackJack
·
C#
최근 진행하고 있는 스파르타 부트캠프 과제로 블랙잭 만들기가 주어졌습니다. 따라서 오늘은 C# 콘솔 환경에서 블랙잭 게임을 구현 해보겠습니다. 1. 블랙잭 규칙 블랙잭 게임은 카지노에서 흔히 볼 수 있는 게임으로 카드의 합이 21에 가까운 사람이 승리하는 간단한 규칙의 게임입니다. 게임이 시작되면 딜러와 플레이어는 카드를 2장씩 받게 됩니다. 만약 이때 플레이어의 카드의 합이 21이면 그 즉시 블랙잭으로 승리하게 됩니다. 단, 딜러 카드의 합 또한 21이면 무승부 처리됩니다. 딜러는 무조건 카드의 합이 17이상 되도록 카드를 뽑아야하기 때문에 어떻게 보면 플레이어가 조금 유리한 게임이라고 할 수 있습니다. 하지만, 딜러와 플레이어 모두 21이 넘었을 경우에는 무조건 플레이어의 패배이기 때문에 플레이어는 ..
C# SnakeGame
·
C#
1. 뱀 게임 만들기 최근 진행하고 있는 부트캠프에서 과제로 뱀 게임이 주어졌습니다. 오늘은 뱀 게임을 만들면서 느꼈던 고민들과 구현 내용을 포스팅 하겠습니다. 2. 뱀 게임의 요구사항 1. 뱀은 매 턴마다 자신의 앞으로 이동합니다. 2. 사용자는 방향키를 이용하여 뱀의 이동 방향을 제어할 수 있습니다. 3. 뱀은 맵에 무작위로 생성되는 음식을 먹을 수 있습니다. 4. 뱀이 음식을 먹으면 점수가 올라가고, 길이가 늘어납니다. 5. 뱀이 벽이나 자신의 몸에 부딪히면 게임이 끝나고 'Game Over' 메세지를 출력합니다. 요구사항들을 확인하며 가장 많이 고민 했던 부분들은 아래와 같습니다. 1. 콘솔 환경에서 사용자의 키 입력 받기. - 콘솔 환경에서 Console.Wirte로 문자열 입력은 받아 봤지만,..
C# virtual, override
·
C#
1. virtual을 사용하는 이유 Monster 클래스를 상속 받은 Slime이라는 클래스가 있습니다. Slime 클래스는 슬라임의 종족 특성으로 기존 몬스터 이동속도에서 추가 되야하는 이동속도 값이 존재합니다. 이를 위해 Slime의 GetMoveSpeed라는 프로퍼티를 구현해서 추가 이동속도 값을 더해서 값을 반환해줬습니다. 이후 slime 객체에서 Move()를 실행하게 되는데 문제는 여기서 발생합니다. 슬라임의 이동속도를 더하는 GetMoveSpeed를 만들었지만 사용되지 않았습니다. 이는 Move()안의 매개변수 Monster가 다형성이기 때문입니다. Monster는 Monster 클래스를 가리키지만 동시의 Monster 클래스를 상속 받은 Slime이 될 수도 있습니다. 따라서 위 코드의 _..
C# Partial
·
C#
1. 파티셜을 사용하는 이유 partial은 부분적인이라는 뜻에서 알 수 있듯이 하나의 클래스를 여러개로 나눠서 작업할 수 있게 하는 키워드입니다. 우리가 코딩을 하다보면 하나의 클래스 안에 너무 많은 내용이 담길 때가 있습니다. 이렇게 많은 내용을 담다 보면 프로그램의 줄 수가 늘어나서 가독성도 안좋아지고, 하나의 클래스가 하는 역할을 파악하는데 시간이 오래 걸릴 수 있습니다. 이럴 때 파티셜을 사용하면 하나의 클래스를 쪼개서 여러개로 관리 할 수 있게 됩니다. 2. 파티셜 사용법 Player로 예를들면 Player의 퀘스트, 전투, 이동과 같은 부분으로 기능을 세분화 할 수 있습니다. Class 파일을 생성하여 Player 클래스가 가지고 있던 역할을 분담 해줍니다. 사용 방법은 세분화 시킬 Play..
C# Static
·
C#
static은 고정된이라는 이름 자체에서도 알 수 있듯이, 어떠한 객체에 정적인 속성을 부여하는 키워드 입니다. 1. Static 사용법 - Static을 사용하지 않았을 경우 Monster클래스의 멤버변수 name과 hp는 정적이지 않기 때문에 객체 각각의 값을 가집니다. 그렇기 때문에 실행 결과가 위처럼 Monster객체 monster1과 monster2가 서로 다른 이름을 출력한 것입니다. - Static 활용시 Monster클래스의 멤버변수 name을 static으로 지정해주었습니다. static으로 지정된 name은 스태틱 메모리 영역에 할당되며 단 하나만 존재하게 됩니다. Monster 클래스의 name은 단하나만 존재하기 때문에 monster1에서 생성자로 "슬라임"이라는 이름을 변경해도 처..
C# Class
·
C#
1. 클래스란? 클래스는 쉽게 말하면 객체를 만들기 위한 틀 혹은 설계도라고 할 수 있습니다. 예를 들어 몬스터라는 오브젝트를 만든다고 했을때 몬스터를 만들기 위한 설계도라고 생각하면 됩니다. 몬스터를 만들기 위한 설계도는 어떻게 구성하는 것이 좋을지 생각해보고, 그 생각한 내용을 클래스에 담으면 됩니다. 2. 클래스 생성 클래스의 선언은 위 코드에서도 알 수 있듯이 class 키워드를 통해 만들 수 있습니다. 이후 class안에 객체가 가져야할 요소들을 넣어 주면 됩니다. 3. 클래스 사용 클래스의 생성은 위와 같습니다. 클래스를 보다 잘 활용하기 위해선 반드시 접근제한자라는 개념에 대해 알고 있어야합니다. 접근제한자 public은 아무데서나 접근이 가능하고 private은 클래스 내에서만 접근이 가능..
C# JSON 사용 방법(직렬화, 역직렬화)
·
C#
Json은 (JavaScript Object Notation)의 약자로 JavaScipt에서 오브젝트를 만들때 사용하는 표현방식입니다. Json은 텍스트로 이루어져있기 때문에 사람과 기계 모두 읽고 쓰기 좋다는 장점을 가지고 있습니다. 또한 프로그램 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체 교환에도 좋습니다. 제가 사용한 Json 함수를 사용하기 위해선 먼저 패키지를 설치해줘야합니다. 본 계시글에서는 NewtonSoft의 Json패키지를 사용했습니다. 1. 패키지 설치 비주얼스튜디오에서 도구 -> NuGet 패키지 관리자 -> 솔루션용 NuGet 패키지 관리에 들어갑니다. 이후 찾아보기에서 json을 검색한 후 Newtonsoft.Json을 클릭 후 프로젝트에 해당 패키지를 설치합니다. ..
2024_01_02 (Class, List)
·
TIL
오늘은 List에 대해 좀 더 깊게 이해하는 날이였던 것 같습니다. TextRPG 게임에서 사용할 Item의 정보를 Calss의 배열로 관리했는데 늘리기도 힘들고 수정도 용이하지 않아서 중간에 List로 변경했습니다. List는 쉽게 말하면 가변배열이라고 말할 수 있는데, 기존에 배열은 배열의 크기를 늘리거나 추가하기도 어렵고. 안에 있는 데이터들을 수정하기 불편한 감이 있었는데 List를 사용하면 어느정도 해소가 됩니다. 예를 들어 아이템 정보를 가지고 있는 Item이라는 클래스가 있다고 합시다. 아이템 1개의 경우 해당 클래스 하나로 해결할 수 있지만 만약에 저장해야할 아이템이 1개가 아니라 20개가 있다면.. 해당 아이템 정보를 가진 클래스의 배열이 20개 필요할 것 입니다. C#에서는 이렇게 클래..