게임 개발 영상(유니티)
-
HistoChess(오토배틀러) 개발 영상
ttps://www.youtube.com/watch?v=FYqYRxLhg28 개발 스크립트 파일 및 URL : https://github.com/ysw0595/GameDevelopmentSampleCode/tree/main/Autobattler_SampleCode/Scripts
2024.01.18 18:00 -
UrgentFps(FPS) 개발영상
https://www.youtube.com/watch?v=_7_KKx67sDw 개발 스크립트 파일 및 URL : https://github.com/ysw0595/GameDevelopmentSampleCode/tree/main/FPS_SampleCode/Scripts
2023.10.27 16:37
Coding Test Preparation
-
Day 9
문제 910 진수 decimal을 입력받아 2 진수로 변환해서 문자열 형태로 반환하는 solution() 함수를 구현하라. 제약 조건제약 조건 없음입출력의 예decimalresult10"1010"27"11011"12345"11000000111001"우선 10 진수를 2 진수로 표현하는 과정을 보자. 10 진수 N을 2로 나눈 나머지, 즉, % 2 연산을 한 값을 저장하고 N은 2로 나눈다몫이 0이 아니면 나머지를 버리고 다시 1을 수행한다모든 과정이 끝나고 1에서 저장한 수를 뒤부터 순서대로 가져와 붙인다#include #include using namespace std;string solution(int decimal) { if (decimal == 0) return 0; // 입력값이 0이면 바..
-
Day 8
문제 8소괄호는 짝을 맞춘 열린 괄호 '('와 닫힌 괄호 ')'로 구성된다. 문제에서는 열린 괄호나 닫힌 괄호가 마구 뒤섞인 문자열 s를 준다. 이때 소괄호가 정상으로 열고 닫혔는지 판별하는 solution() 함수를 구현하라. 만약 소괄호가 정상적으로 열고 닫혔다면 true를, 그렇지 않다면 false를 반환하면 된다. 제약 조건 열린 괄호는 자신과 가장 가까운 닫힌 괄호를 만나면 상쇄된다.모든 괄호가 상쇄되어 더 이상 아무 괄호도 없어야만 정상으로 열고 닫혔다고 할 수 있다.더 상쇄할 괄호가 없을 때까지 상쇄를 반복한다. 입출력의 예sresult"(())()"true"((())()"false이런 괄호 짝 맞추기를 해결하려면 어떻게 해야 할까? 바로 스택을 사용하면 됩니다. 스택을 어떻게 적용할 수 있..
-
Day 7
문제 7게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같다. U: 위쪽으로 한 칸 가기D: 아래쪽으로 한 칸 가기R: 오른쪽으로 한 칸 가기L: 왼쪽으로 한 칸 가기 캐릭터는 좌표 평면의 (0, 0) 위치에서 시작한다. 좌표 평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 구성한다. ▲y │5 │ │───────┼───────►x-5 │ (0,0) 5 │ │ -5 예시 1) 예를 들어 ULU..
-
Day 6
문제 6슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프렌즈 오천성이 대성공을 거뒀지만 최근 신규 사용자 수가 급감했기 때문이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였습니다. 이 문제를 어떻게 할까 고민한 그녀는 동적으로 게임 시간을 늘려 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하시오.실패율 정의 : 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어의 수전체 스테이지 개수가 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 주어질 대 실패율이 높은 스..
-
Day 5
문제 52차원 배열 arr1 과 arr2를 입력받아 arr1에 arr2를 행렬 곱한 결과를 반환하는 solution() 함수를 완성하라.제약 조건배열 arr1, arr2의 행과 열의 길이는 2 이상 100 이하이다.배열 arr1, arr2의 데이터는 -10 이상 20 이하인 자연수이다.행렬 곱 할 수 있는 배열만 주어진다.입출력의 예arr1arr2arr3[[1, 4], [3, 2], [4, 1]][[3, 3], [3, 3]][[15, 15], [15, 15], [15, 15]][[2, 3, 2], [4, 2, 4], [3, 1, 4]][[5, 4, 3], [2, 4, 1], [3, 1, 1]][[22, 22, 11], [36, 28, 18], [29, 20, 14]]수학의 행렬 곱셈을 그대로 구현하면 된..
Design Pattern
-
Type Object Pattern(타입 객체 패턴)
타입 객체 패턴은 클래스 하나를 인스턴스별로 다른 개체형으로 표현할 수 있게 만들어 새로운 클래스들을 유연하게 만들 수 있게 하는 디자인 패턴이다. RPG 게임을 개발한다고 해보자. 우리는 몬스터를 구현하기 위해서 체력, 공격, 그래픽 리소스, 사운드 등 다양한 속성을 정의해야한다. 모든 몬스터는 위의 속성들을 무조건 가지고 있다. 기획자는 용이나 트롤 등과 같은 다양한 몬스터 종족을 만들고 싶어한다. 각 종족은 몬스터의 특징을 나타내고 또 필드에는 같은 종족 몬스터가 여러 마리 동시에 돌아다닐 수 있다. 종족은 몬스터의 최대 체력을 결정한다. 따라서 용은 트롤보다 최대 체력이 더 높기 때문에 죽이기가 훨씬 힘들다. 또한 종족이 같은 몬스터들은 공격하는 방식도 모두 같아야한다. 자 이제 전형적인 객체 ..
-
Subclass Sandbox Pattern(하위 클래스 샌드박스 패턴)
하위 클래스 샌드박스 패턴은 상위 클래스가 제공하는 기능들을 통해서 하위 클래스에서 행동을 정희하는 것이다. 슈퍼히어로 게임을 만든다고 과정해보자. 유저의 다양한 경험을 위해 우리는 수십 개가 넘는 초능력을 구현해야한다 먼저 Superpower라는 상위 클래스를 만든 후 초능력별로 이를 상속받는 클래스를 정의해보자. 이렇게 하면 수십 개가 넘는 초능력 클래스가 만들어질 것이다. 또한 더욱더 풍부한 경험을 위해 Superpower를 상속받은 초능력 클래스에서 사운드, 시각 이펙트, AI와의 상호작용, 다른 게임 개체의 생성과 파괴, 물리 작용 같은 모든 일을 할 수 있어야 한다. 만약 이런 식으로 초능력 클래스를 구현하면 어떻게 될까?중복 코드가 많아진다. 초능력은 다양하겠지만 여러 부분이 겹칠 가능성이 ..
-
Update Method Pattern(업데이트 메서드 패턴)
업데이트 메서드 패턴은 컬렉션에 들어 있는 객체별로 한 프레임 단위의 작업을 진행하라고 알려줘서 전체를 시뮬레이션하는 방법이다. 용사가 보물을 찾기 위해 마왕성에 들어간다. 하지만 커다란 성문 앞에는 저주받은 가고일 석상과 흉측한 언데드 전사가 그 문 앞을 지키고 있다. 그냥 만들어 놓기만 하면 밋밋하니 언데드 병사부터 문 주위를 순찰하게 만들어 보자. 게임 프로그래밍을 전혀 모른다면 해골 병사가 왔다갔다하는 코드를 이렇게 작성할 것이다.while(){ // 오른쪽으로 간다. for(double x = 0; x 0; x--) { skeleton.setX(x); }} 물론 이 코드는 무한루프가 있어 해골 병사가 순찰도는 걸 플레이어는 볼 수 없다는 문제가 있다(게임이 멈춘다는 뜻이다).우리가 ..
-
Bytecode Pattern(바이트코드 패턴)
바이트코드 패턴은 가상 머신 명령어를 요즘 코딩한 데이터로 행동을 표현할 수 있는 유연함을 제공한다. 요즘 게임을 만들려면 엄청난 양의 복잡한 소스 코드를 구현해야 한다. 크래시가 나지 않게 구현도 해야하고 동시에 플랫폼의 성능도 최대한 끄집어내야 한다. 게임은 다른 모든 소프트웨어보다 성능이 중요하다. 또한 게임 시장 경쟁력에서 뒤쳐지지 않게 최적화도 지속해야한다. 성능과 안정성을 위해 C++ 같은 중량언어를 사용한다. 이런 언어는 성능을 최대한 끌어낼 수 있는 저수준 표현과 버그를 막거나 적어도 가둬두기 위한 풍부한 타입 시스템을 함께 제공한다. 게임에는 골치 아프면서도 가장 중요한 제약이 하나 더 있는데 그것은 바로 재미다. 유저들은 신선하면서도 배런스가 잘 맞는 게임을 원한다. 이런 게임 개발을 ..
-
Game Loop Pattern(게임 루프 패턴)
게임 루프 패턴은 거의 모든 게임에서 사용하며, 어느 것도 서로 똑같지 않고. 게임이 아닌 분야에서는 그다지 쓰이지 않는 다는 점에서 전형적인 '게임 프로그래밍 패턴'이다. 게임 루프 패턴은 게임 시간 진행을 유저 입력, 프로세서 속도와 디커플링 하기 위해서 만들어 졌다. 예전 프로그램은 배치 모드 프로그램으로 코드를 작성하고 버튼을 누르면 한참 기다려야 결과를 볼 수 있었고, 작업이 끝나고 나면 프로그램은 멈췄다. vs의 콘솔창도 배치 모드 프로그램의 일종이다.아무튼 이런 비효율적인 프로그램 대신에 즉각적인 피드백을 원했던 개발자들이 대화형 프로그램을 만들었다. 초기 대화형 프로그램 중에는 게임도 있었다. 작자가 예전에 만들었던 텍스트 RPG도 여기 해당된다.프로그램은 입력을 기다렸다가 응답한다. 입력..
-
Double Buffer Pattern(이중 버퍼 패턴)
이중 버퍼 패턴은 순서 패턴의 한 중류이다.이중 버퍼 사용의 의도는 여러 순차 작업의 결과를 한 번에 보여주기 위함이다. 본질적으로 컴퓨터는 순차적으로 동작한다. 굉장히 큰 일은 작은 단계로 쪼개어 하나씩 처리하는 것이다.하지만 사용자 입장에서 순차적으로 혹은 동시에 진행 되는 여러 작업을 한 번에 모아서 봐야 할 경우가 있다. 예를 들어 게임 랜더링시에 플레이어에게 시각적인 모든 정보를 한 번에 제공해야 한다.멀리 있는 산, 굴불구불한 언덕, 나무 등 모든 것들을 말이다.이때 화면에 그려지는 인스턴스들을 하나씩 보여주면 플레이어의 몰입을 방해할 수 있다.따라서 장면은 부드럽고 빠르게 업데이트 돼야 하고 매 프레임 완성되면 한 번에 보여줘야 한다. 위의 조건을 만족하기 위한 수단으로 이중 버퍼 패턴을 사..
-
State Pattern(상태 패턴)
상태 패턴은 GoF의 세가지 패턴 중 행위 패턴에 속한다. 행위 패턴은 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다.상태 패턴의 특징은 다음과 같다.- 객체 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용- 객체 상태를 캡슐화하고 이를 참조하는 방식으로 처리 상태 패턴의 근본 개념인 유한 상태 기계(FSM, finite state machine)와 더 나아가 계층형 상태 기계(HSM, hierarchical state machine)와 푸시다운 오토마타 pushdown automata 까지 알아보자. 보통 상태 기계는 AI나 컴파일러 개발자가 아니라면 익숙한 개념이 아닐 수 있다. 하지만 상태 기계 역시 다른 분야에서도 사용될 수 있다. 간단한 횡스크롤 플랫포머..
-
Singleton Pattern(싱글턴 패턴)
싱글턴 패턴은 GoF의 세가지 패턴 중 생성 패턴에 속한다. 생성 패턴은 클래스나 객체의 생성과 참조 과정을 정의하는 패턴이다. 싱글턴 패턴의 특징은 다음과 같다.- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하지는 못함- 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비를 최소화 할 수 있음 싱글턴 패턴은 의도와는 달리 득보다는 실이 많다. 싱글턴 패턴을 부적당한 곳에 사용하면 못질하는데 톱을 가져오는 것 만큼이나 쓸모가 없다. 싱글턴 패턴이 무엇인지 다루고, 또 피할 수 있는 방법도 같이 다뤄보자. 싱글턴 패턴은 오직 한 개의 클래스 인스턴스만 갖도록 보장한다.인스턴스가 여러 개면 제대로 작동하지 않는 상황이 종종 있다. 예를들어 ..
-
Prototype Pattern(프로토타입 패턴)
관찰자 패턴은 GoF의 세가지 패턴 중 생성 패턴에 속한다. 생성 패턴은 클래스나 객체의 생성과 참조 과정을 정의하는 패턴이다. 프로토타입 패턴의 특징은 다음과 같다.- 원본 객체를 복제하는 방법으로 객체를 생성- 일반적인 방법으로 객체를 생성하며, 비용이 큰 경우 주로 이용함 RPG 게임을 만든다고 해보자. 몬스터들은 영웅을 해치기 위해 떼지어 다닌다. 이 몬스터들은 스포너를 통해 게임 레벨에 등장하는데, 몬스터 종류마다 스포터가 따로 있다 게임에 나올 몬스터마다 클래스를 만들어 보자. Ghost, Demon, Sorcerer 3 종류의 몬스터가 있다.class Monster{ // 데이터...};class Ghost : public Monster {};class Demon : public Mon..
-
Command Pattern(명령 패턴)
명령 패턴은 GoF의 세가지 패턴 중 행위 패턴에 속한다. 행위 패턴은 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴이다. 명령 패턴의 특징은 다음과 같다.- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남김- 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화 명령 패턴이 자주 쓰이는 입력키 변경 코드를 예시로 들어보자 모든 게임은 버튼이나 키보드, 마우스를 이용한 입력을 읽는 코드가 있다.위의 그림에 맞는 아주 간단한 코드를 작성해보자.void InputHandler::handleInput{ if(isPressed(BUTTON_X) jump(); else if(isPressed..
C# Console TextRPG
-
C# 콘솔창으로 게임 만들기(Day 10)
오늘은 Chapter 2와 마찬가지로 Chapter 3도 만들어 보겠다. MONSTER enum에 Chapter 3에 등장할 몬스터들을 만들어 주자. 이어서 PALADIN, LYCAN 클래스 또한 이전 몬스터와 같다. Paladin, Lycan 모두 이렇게 수정해주면 클래스는 만들어 주었다. 보스도 만들어 주자. Boss enum에 WERFENRIR를 추가해주고 스킬도 정해준다. 위와 같이 작성해주고 SetBleed 함수를 통해서 출혈 피해를 주기위한 실행문들을 Player 클래스에서 작업해준다. 변수 선언을 해주고 여타 상태 이상 효과들과 똑같이 작성해준다. 다음 Game 클래스로 넘어와서 BossBattle 메서드에 저번 시간에 다루었던 내용 그대로 이름만 수정해 주어 추가해주면 된다. 다음 수정할 ..
-
C# 콘솔창으로 게임 만들기(Day 9)
오늘은 Chapter 2를 만들것이다. Chapter 1과 등장 몬스터 및 보스 등을 제외하면 전반적으로 동일할 것이다. 먼저 MONSTER enum에 Chapter 2에 등장할 몬스터들을 만들어 주자. 이어서 KNIGHT, WEREWOLF의 클래스를 만들어주자. NIGHT와 WEREWOLF의 데이터들을 각각 설정해준 뒤 일반 몬스터라서 WOLF의 메서드를 붙여넣기 하여 등장 텍스트나, 설정 값들만 바꿔주면 끝이다. 보스도 추가해주자 BOSS enum에 추가해주고, 스킬을 만들어준다. 마찬가지로 Priest의 내용을 붙여넣기 하여서 필요한 부분만 수정해준다. 빨간 네모는 Priest와 다른 부분이다. Addicted 메서드로 인해 중독 상태도 Player 클래스와 Game 클래스에 실행문들을 추가로 작성..
-
C# 콘솔창으로 게임 만들기(Day 8)
이제 Episode 메서드가 끝과, 보스전에서 승리하면 스킬을 추가해주는 메서드 부터 작성해보도록 하겠다. VampireSkill enum의 처음부터 끝까지 랜덤한 수를 받아와서 이 스킬이 이미 스킬에 추가가 됐는지를 확인하고, 동일한 스킬이 이미 있으면 다시 수를 받고, 그렇지 않다면 스킬을 추가해주는 메서드이다. 이 Game 클래스에 작성된 세 개의 메서드를 통해서 능력치 강화를 시켜줄 실행문들은 다 끝났고 이제 직접적으로 캐릭터의 능력치를 변화시켜주는 메서드를 작성하면 된다. SetSkill 메서드 안에 있는 빨간 네모 부분의 tmp.SetSkill(skill)은 조금만 생각해보면 이름만 같을 뿐 다른 메서드라는 것을 짐작할 수 있다. 이 메서드가 실질적으로 Player의 스킬을 추가해주는 메서드라..
-
C# 콘솔창으로 게임 만들기(Day 7)
오늘은 Priest의 스킬 시스템을 작성하고, 보스전까지 마무리 짓도록 하겠다. 예전에 등장 텍스트 출력을 위해서 만들어 두었던 Priest 클래스를 활용할텐데 그 전에 Boss 클래스를 만들어주어 Priest 클래스가 Boss 클래스를 상속받도록 해줄 것이다. 보스들의 스탯은 다를 수 있어도 스킬 갯수나, 행동은 서로 비슷하기 때문이다. Monster 클래스를 상속 받는 Boss 클래스를 만들어 주었다. 이제 이 Boss 클래스를 Priest에 상속하여 주면, 자동적으로 Monster 클래스 또한 사용할 수 있게 된다. Vampire의 스킬을 만들 때랑 거의 비슷하게 생성자는 위의 명령문 대로 기본 스탯을 설정해주고, 공격할 방식을 만들어주어 스킬 설정을 해주고 등장 텍스트를 출력해주도록 하였다. 다음..
-
C# 콘솔창으로 게임 만들기(Day 6)
기본적인 전투 시스템은 다 갖추었으니 이제 전투가 끝났을 때 일어날 시퀀스만 작성해주면 게임의 전반적인 부분은 거의다 마무리된다. 전투의 끝의 기준부터 정해야 하는데, 플레이어가 죽었을 때랑 적이 죽었을 때로 해줄 것이다. 먼저 적이 죽으면 전투가 종료되고 적 처치 텍스트가 등장한 후 캐릭터의 능력치를 강화(체력 회복, 공격력 증가, 최대체력 증가)하고 다음 스테이지로 넘어가도록 코드를 짜볼것이다. Monster 클래스에 player와 MONSTER enum을 매개 변수로 가진 ShowDisappear이란 메서드에 Farmer, Hunter, Wolf 처치하면, 파일 입출력을 통해 각각의 몬스터 별로 저장해 놓은 처치 텍스트 파일을 가져와 열도록 해주었고, 처치 효과로 각각 최대 체력 1 증가, 20 체..
-
C# 콘솔창으로 게임 만들기(Day 5)
저번 시간에는 몬스터와 플레이어가 서로 공격하는 전투 시스템까지 구현했었다. 하지만, 몬스터의 공격 방식은 스킬이 없으니 그렇다고 쳐도, 플레이어는 챕터를 거듭할수록 사용할 스킬들이 생기고 스킬들마다 효과가 다르기 때문에 저번에 만들었던 시스템가지고는 한계가있다. 따라서 오늘은 C#의 대리자를 사용하여 플레이어의 공격을 관장하는 시스템을 구축하려고 한다. 먼저 Vampire 클래스에 멤버 변수로 각각 Vampire가 취할 액션 메서드인 VampireAction 대리자와, 스킬 이름에 맞는 VampireAction을 실행해줄 Dictionary 형태의 actionDic을 추가해주었다. 그런 다음 AddAction 메서드를 통해 actionDic에 stateName(스킬명)이 있으면 action이라는 val..
-
C# 콘솔창으로 게임 만들기(Day 4)
저번 시간에 스토리와, 몬스터마다 개별 등장 문구가 출력되도록 하였으니 그 이후 진행될 전투 시스템을 구성하려 한다. 전투 시스템은 최상단에 턴 수가 나오고, 플레이어와 몬스터의 각각의 최대 체력, 현재 체력, 공격력이 나오도록 설정해 줄 것이다. 플레이어가 행동을 선택하면 그 행동을 한 직후 몬스터도 행동하는 식으로 턴이 진행된다. 가장 먼저 플레이어와 몬스터의 상태를 보여주는 메서드를 작성해보자. 매개변수로는 player, monster, mob, turn 이렇게 받아서 턴수를 표시하고 플레이어와 몬스터의 상태를 출력해 준다. mob을 매개변수로 받는 이유는 어떤 몬스터의 상태를 나타내는지 표시해주기 위해서 넣어주었다. 다음은 출력화면이다. 이제 Battle 메서드를 만들어 주어서 본격적으로 시스템을..
-
C# 콘솔창으로 게임 만들기(Day 3)
각 챕터 별로 10 스테이지씩 진행을 할 것이다. 스테이지 1, 6, 10(보스 전)에 스토리가 등장하고 나머지 스테이지는 1챕터의 몬스터들이 랜덤으로 등장하도록 설정해줄 것이다. 이번에는 스토리와 몬스터 등장 문구가 각 스테이지별로 출력되게 할 것이다. 챕터별 스토리와 몬스터 및 보스 등장 문구를 콘솔 화면에 출력하기 위해 사전에 시나리오를 작성해놓고 각 폴더에 알맞게 저장해 주었다. 이제 각 스테이지별로 해당하는 스토리가 출력되도록 파일 입출력을 통해 코드를 작성해보도록 하겠다. 스테이지가 10 개고 계속 증가하는 형태기 때문에 for 문으로 작성해 주었다. 또 i 스테이지마다 정해진 시퀀스가 출력이 돼야함으로 챕터의 이름과 스테이지 번호가 출력되도록 작성을 해주었고, 전체적인 스테이지의 흐름은 sw..
-
C# 콘솔창으로 게임 만들기(Day 2)
오늘은 로비 화면과, 캐릭터(뱀파이어) 클래스, 챕터 1에 등장할 몬스터 클래스를 작성해보도록 하겠다. 로비에서 캐릭터를 선택할 것이기 때문에 아직 구현하지 않은 뱀파이어 클래스부터 작성해보자. Player 클래스를 상속받은 Vampire 클래스의 기본적인 형태 로비의 구성은 게임 이름이 나오게 하고, 위에서 언급했듯 캐릭터를 선택하는 것이 전부이다. 위 코드에서 ConsoleClear 메서드는 게임이 진행되는 동안 화면이 고정되지 않고 계속 내려가 집중에 방해가 될 것을 우려하여 콘솔 화면을 지워줄 메서드다. 다음은 ConsoleClear 메서드의 코드다. 이제 게임을 실행하면 Lobby 메서드가 실행이 되어 게임 이름이 나오고, 캐릭터를 생성하면 캐릭터가 생성되었다고 알려주는 것까지 나올 것이다. 한..
-
C# 콘솔창으로 게임 만들기(Day 1)
C#의 콘솔창에서 텍스트 알피지를 만들어 보려고 한다. 게임명 If The NIght Comes 장르 텍스트 알피지 진행 방식 3개의 챕터(챕터는 총 10 stage로 구성), 스토리는 각 챕터의 1,5,10 stage에 나올 예정, 챕터의 마지막(10 stage)은 보스전, 나머지 stage는 일반 몬스터와의 대결 캐릭터 뱀파이어(시작은 뱀파이어로 하고 여유가 된다면 늘려갈 예정) 스토리 늑대인간과 인간의 공격으로 멸족 위기에 처한 뱀파이어였지만, 강력한 뱀파이어가 태어나 일족을 지킨다는 이야기 스킬 4~5개 구현 예정 표를 통해 간략하게 게임의 방향성에 대해 스케치 해보았다. 이제 게임의 가장 기본이 될 클래스(게임, 플레이어, 몬스터)와 게임 프로세스를 작성해보도록 하겠다. 여러 스크립트가 같이 있..
C# Practicing
-
C# Practicing(가비지 컬렉션)
이번 포스트가 C# Practicing의 마지막 포스트가 될 것이다. 마지막으로 알아볼 주제는 가비지 컬렉션이다. 가비지 컬렉션 (Garbage Collection) : 여러가지 이유로 생기는 쓰레기를 알아서 치워준다. - Garbage : 쓰레기. - 쓸데없이 메모리를 차지하는 데이터, 객체 등을 말함. - 쓰레기를 치워서 메모리를 절약하지만, 쓰레기를 치우는 일 자체가 힘든 일이다 (컴퓨터의 렉을 유발) 가비지 컬렉션은 여러 세대로 나뉜다. 세대별 가비지 컬렉션 - 세대별로 객체를 검사한다. 0 세대, 1 세대, 2세대 - 0 세대에 메모리가 꽉 차면 0 세대를 검사함. 쓰레기가 아닌 객체는 다음 세대로 넘어감. - 1 세대에 메모리가 꽉 차면 1 세대를 검사함. 쓰레기가 아닌 객체는 다음 세대로 넘..
-
C# Practicing(파일 입출력)
이번 시간은 파일 입출력에 대해 알아보자 파일 입출력 : 파일 입력, 파일 출력 텍스트 파일 입출력. 텍스트 파일 출력 = 텍스트 파일을 윈도우로 출력함. 텍스트 파일을 만듦. 텍스트 파일 입력 = 텍스트 파일의 내용을 읽어서 도스창에 보여지게 만듦. 텍스트 파일을 불러옴. ※ 콘솔창에서 보여지도록 하는게 입력이다. 유의하자!! 파일 입출력을 위해선 아래와 같은 네임스페이스를 불러와야한다. System.IO : IO = Input/Output : 입출력 다음은 파일 입출력을 위한 명령어 중 주로 쓰이는 것들을 적어놓았다. FileMode Append : 파일이 존재하면 파일을 열고 맨 끝부분부터 시작. 파일이 없으면 생성. Open : 해당하는 경로의 파일이 존재하면 열기. 존재하지 않으면 예외 발생 O..
-
C# Practicing(스레드)
이번 시간은 스레드에 대해서 알아보려고 한다. Thread 스레드 : 운영체제가 CPU 시간을 할당하는 기본 단위이다. 스레드가 여러 개 = 여러 가지 일을 동시에(따로 따로) 처리할 수 있다는 얘기가 된다. 먼저 스레드를 사용하기 위해선 네임 스페이스가 필요하다. 스레드의 생성자는 매개변수로 메서드를 받는다. 그렇기 때문에 간단한 메서드를 만들어준다. 1초마다 한 번씩 실행이 된다. 다음은 Thread.sleep(1000을 쓰지 않았을때의 실행 결과다) 순식간에 10까지 찍혀버렸다.. 자 이 스레드를 정지키시는 데에는 두 가지 방법이 있다. 스레드 정지 Thread.abort() : 이 친구는 C# 스레드에 도가 트지 않은 이상 사용하지 않는다. 프로그램에 심각한 오류가 생길 수 있다. Thread.I..
-
C# Practicing(C#의 자료구조)
오늘은 Insert 메서드의 마지막 문장 arr = resultArr;를 ref를 쓰면 왜 바꿔줄 수 있는지 자료구조로 설명해보겠다. C#의 메모리 영역은 크게 4가지로 나뉜다(Stack, Heap, Data, Code). 오늘 설명할 것은 이중 Stack과 Heap으로 설명할 수 있다. 그렇다면 Stack 영역과 Heap 영역은 무엇일까? Stack 영역 https://stillchobo.tistory.com/119 값 형식(Value Type)이 들어가는 메모리 공간이다. 일반적인 value type인 int, char, bool 같은 것이 있다. (string은 reference type이다) 사용자가 선언한 struct도 value type으로 stack에 저장된다. 선언되었던 코드 블록이 끝나면..
-
C# Practicing(Generic Programming2)
오늘은 데이터 형식만 다른 메서드를 추가하지 않고도 다른 데이터 타입의 변수를 사용할 수 있는 메서드를 만들어 보려고 한다. 저번 시간에 만들었던 메서드를 다시 가져와 보자 이를 1번 코드라하겠다. 자 우리는 저번 시간에 int형 배열에 int형 변수를 집어넣는 insertNum 메서드를 만들었다. 하지만 char 형 배열에 char 형 변수나 string, float 등의 데이터는 넣어줄 수 없었다. 그렇다면 데이터 형식만 다른 메서드를 만들 수 밖에 없나? 다행히도 우리는 일반화 프로그래밍을 통해 메서드 하나만으로 int가 아닌 다른 데이터 타입의 변수도 함께 사용할 수 있다. 일반화 프로그래밍 일반화란 여러 개체들이 가지고 있는 공통된 특성을 부각시켜 한 개념이나 법칙을 성립시키는 과정 혹은 그 결..
-
C# Practicing(Generic Programming1)
오늘은 10칸 짜리 배열에 원하는 인덱스에 원하는 정수를 삽입하는 코드를 작성해보고자 한다. 1 ~ 10이 차례대로 들어있는 10칸 짜리 배열이 있다. 이 배열의 세번째에 99를 삽입하려고 한다. 우선 배열을 만들어주자. 이제 2와 3 사이에(세번째) 99를 넣으려면 어떻게 해야할까? 가장 먼저 드는 생각은 배열의 세번째에(arr[2]) 99를 대입하고 싶지만, 배열은 데이터 공간이 연속적으로 나열 돼어있기 때문에, 데이터 공간을 잘라내서 그 사이에 새로운 공간을 집어넣는 것이 불가능하다. 따라서 배열의 공간을 넣을 숫자의 갯수만큼 늘린 배열을 하나 더 생성하여 주어야 한다. 숫자를 집어넣어줄 InsertNum 함수를 작성해보자. InsertNum의 매개변수로 변경할 배열과, 삽입하고자 하는 인덱스, 삽..
-
C# Practicing(Property 응용)
Age 프로퍼티를 이용하여 나이를 입력받아 이 사람이 성인인지 아닌지를 출력해보는 프로퍼티를 작성해 보려고 한다. 일단 Human 클래스 나이는 private이기 때문에 메인에서 접근할 수 없으므로, 메서드로 접근해야하기 때문에 나이를 설정해주고 또 반환도 해주는 메서드 2개를 만들어보자 나이를 설정해주는 메서드를 만들었으니 메인에서 객체를 실행해서 확인해보자 컴파일까지 해보니 잘 작동하다. 자 그럼 이제 성인인지 판별해주는 메서드를 만들어보자. 이는 판별만 하면 되므로 bool값을 써보도록 하겠다. 잘 작동하는 것을 볼 수 있다. 이제 setAge, getAge를 프로퍼티로 isAdult도 프로퍼티로 한 번 작성해보자. 이제 프로퍼티를 다 만들었으니 메인에 적용해서 동일한 값을 출력해보자! 값이 제..
-
C# Practicing(static & property)
Static이란 일반적으로 클래스 내의 데이터(변수)나 기능(메서드)들은 new를 통해 객체를 생성했을때 객체가 가진다. 하지만 클래스 내의 static은 객체가 아닌 클래스가 자체적으로 가지고 있는 저장 공간, 메서드라고 할 수 있다. static으로 표시된 데이터나 메서드는 프로그램이 시작할 때부터 존재한다. property란 property가 가진 많은 의미 중에 속성이라는 의미가 있다. 프로퍼티는 메서드지만 마치 변수인 것처럼 쓰인다. 다음은 가장 기본적인 property의 형태다 [접근 제어 지시자] [데이터 형식] [프로퍼티의 이름] { [접근 제어 지시자] get { 실행문들 return [반환 값] } [접근 제어 지시자] set { 실행문들 } } property 내의 get과 set의 ..
-
C# Practicing(추상 메서드와 인터페이스)
이번 포스트에세는 추상 메서드와 인터페이스를 다뤄보려고 한다. 추상 메서드란? 추상 메서드 : 메서드의 내용이 없고 형태만 있는 메서드. - 메서드 앞에 abstract(추상적인)를 붙인다. - 추상 메서드를 하나라도 가진 클래스는 추상 클래스이며 - 추상 클래스에는 클래스 앞에 abstract를 붙여야 한다. ※ 추상 클래스를 상속받은 클래스는 '반드시' 추상 메서드를 재정의해야 한다 인터페이스란? 인터페이스 : 클래스와 비슷하지만 메서드를 선언만 해놓은 집합이다. - 인터페이스는 변수(데이터)를 가질 수 없다. - 인터페이스 내에 선언된 메서드는 내용이 없어야한다. ※ 인터페이스를 상속받은 클래스는 반드시 해당 인터페이스의 메서드를 가지고 있어야한다. // 인터페이스의 기본 형태 interface [..
-
C# Practicing(가상 메서드 오버라이드 심화)
이번 시간에는 저번시간에 했던 상속과, 가상 메서드 오버라이드를 활용해보려고 한다. 각 동물을 10마리씩 총 30 마리를 만들어 줄 것이다. 모든 동물이 각자 밥을 먹게 할 것이다. 다음은 위의 문제를 풀기위한 조건이다. 1. 토끼, 새, 호랑이 클래스를 만든다. 2. 각 동물은 이름과 색깔이 있다. 3. 토끼는 풀을 뜯어먹는다. 4. 새는 모이를 먹는다. 5. 호랑이는 다른 동물을 먹는다. 자 먼저 토끼 새 호랑이 클래스를 만들어 주기 전에 셋다 동물이니 동물 클래스를 만들어주자. 이름과 색깔을 가진 동물 클래스에 이름과 색깔을 정해줄 수 있는 생성자를 만들어줬다. 잘 작동하는지 알아보자 토끼, 새, 호랑이가 밥을 잘 먹는 것을 확인할 수 있다. 하지만 토끼는 풀을 먹어야 되고, 새는 모이를, 호랑이는..
HTML Practicing
-
HTML input의 다양한 활용
자 이번 시간은 저번에 만들었던 로그인 폼에서 이메일, 성별, 취미 등 세부적인 것들을 좀 더 추가해보려고 한다. 일단 저번 시간에 만들어 뒀던 코드를 가져오겠다. 아이디: 비밀번호: 저번 시간에 했던 내용들을 불러 왔으니 비밀번호 밑에 아이디와 비밀번호와 같은 방식으로 이메일과 이름을 입력받는 칸을 작성해보자. 아이디: 비밀번호: 이메일: 이름: 자 이렇게 추가는 해줬는데 입력창이 정리가 안되어 있어서 보기 불편하다.간..
-
HTML의 입력 담당 태그 input과 form 태그
이번 시간은 input 태그를 활용해서 HTML에서 사용자의 입력 값을 받는 방법에 대해 소개하려고 한다.또한 본격적으로 저번 시간에 다뤘던 컨테이너 태그와 전역 속성이 사용될 것 같다. 자 일단 input 태그와 form 태그에 대해 소개하겠다. input 태그- 사용자로부터 값을 입력받을수 있는 대화형 컨드롤(또는 필드)을 라고하며 일반적으로 입력창이라고도 한다. - 기본적으로 인라인 레벨 요소이며 단일 태그이다. 입력요소 input (type 속성)- input은 type에 따라 입력 요소의 형태나 입력데이터 유형등이 달라진다. - 사용 가능한 type은 20가지이며 따로 type을 작성하지 않으면 기본값은 text이다. - type에 따라 값이 달라지기 때문에 적용가능한 추가 속성의 종류도 ..
-
HTML의 컨테이너 태그와 전역 속성
이번 시간은 컨테이너 태그와 전역 속성에 대해 "간단하게" 알아보도록 하자.이 두 가지는 워낙 많은 곳에서 쓰이기 때문에 개별적으로 설명하기에는 애매하다.따라서 이번 포스팅은 이런것들이 있구나 하고 넘어가고 잘 기억하고 있다가 다음에 짚고 넘어가겠다. 우선 컨테이너 태그부터 알아보자 컨테이너 태그란 무엇일까?- 컨텐츠나 레이아웃에 아무런 형향을 주지않고 다른 요소 여럿을 묶어 관리하기 편하게 만드는 역할을 하는 태그를 컨테이너 태그라고 한다.- 컨텐츠를 구분하거나 공통적인 스타일을 적용하고자 할때 개발자는 컨테이너를 사용한다. 이 컨테이너 태그는 두 가지 레벨 속성을 갖는데 이제는 익숙한 블럭 레벨 속성과, 인라인 레벨 속성이다. -블럭 레벨(block-level) 요소 : 자기가 속한 영역의 너비를..
-
HTML의 링크 태그
이번 시간에는 HTML의 링크 태그에 대해 알아보려고 한다. 링크(link)란?-링크란 현재 문서에서 다른 문서로 이동하는 수단을 의미한다. 링크(anchor)란?- a 태그 요소는 href 속성을 통해 다른 페이지, 전화번호 , 이메일 주소와 그외 다른 url로 연결할 수 있는 링크를 만든다.- anchor는 인라인 요소이며 컨텐츠는 주로 링크의 목적지를 나타낸다. 링크에 대해 간단히 소개 했으니 직접 사용해보자 Html 링크 설명 1.Hello 예제 2.폰트태그 예제 3.목록태그 예제 4.이미지태그 예제 5.비디오태그 예제 다음은 실행 결과다 a 태그는 인라인 속성이기 때문에 옆으로 줄줄이 출력된다. br 태그만 추가해주자 ..
-
HTML에서 이미지와 동영상 그려보기
이번 시간은 HTML에서 이미지와 동영상을 그려보려고 한다. 이미지(Image) 태그- img 태그는 이미지를 표시할 때 사용하는 태그이다- 단일 태그로써 닫는 태그는 필요하지 않다.- 컨테츠를 적어주는 대신 표시할 이미지에 대한 정보를 속성으로 지정해야 한다.기본 형태 이게 무슨 말인지 크게 와 닿지 않을 테니 직접 HTML 코드를 작성해보자.하지만 그 전에 이미지 파일이 하나 필요하니 첼시 로고 이미지 다운받아 오겠다. 본인은 첼시 팬 아니다. 설마 이 글을 읽고 따라해볼 사람이 있나 싶지만 이미지 파일은 본인이 원하는 이미지 파일을 사용해도 무방하다. 이미지 파일은 현재 작성하고 있는 파일이 저장되는 폴더에 저장해주는게 가장 이롭다고 생각한다. 자 이제 코드를 작성해보자. ..
-
HTML에서 목록 표시하기
이번 시간에는 HTML에서 목록을 표시하는 방법을 알아보려고 한다. 먼저 목록이란 연관있는 항목(item)들을 나열하는것을 의미한다.우리가 알아볼 HTML은 '순서있는 목록'과 '순서없는 목록'으로 구분한다. 순서 있는 목록이란 뭘까?HTML 코드를 통해 살펴보도록 하자!! Ordered List(순서가 있는 목록) 하나 둘 셋 하나 둘 셋 이라고 적은 부분이 굉장히 하찮아 보이긴 하지만 가장 대표적인 순서가 있는 목록이다출력을 한 번 해보자우리가 1. 2. 3. 을 적어주지 않았지만 자동적으로 숫자를 기입하여 정렬해 준 모습을 볼 수 있다. 이번에는 순서가 없는 목록도 같이 출력해보자간단한 소스를 더 추가해보겠다. ..
-
HTML의 텍스트 표시 방법과 태그의 구분(Block VS Inline)
이번에는 HTML의 텍스트 표시 방법과 저번 시간에 잠깐 언급했던 태그의 구분에 대해 설명해보고자 한다. 일단 지금 소개하는 태그들은 HTML에서 가장 기본적으로 쓰이는 태그이며 이 밖에 수많은 태그들이 있지만 이번에는h 태그와 p 태그만 소개하겠다. 제목(headline) 태그- 태그는 제목을 표시하는 태그이다.- 태그는 1 ~ 6까지 사용되며 1이 가장 큰 제목이고 6이 가장 작은 태그이다.- 그 외의 숫자가 입력되면 기본 폰트 사이즈 3으로 출력된다. 작성해서 결과물을 봐보도록 하자! h1 tag입니다 h2 tag입니다 h3 tag입니다 h4 tag입니다 h5 tag입니다 h6 tag입니다 h6 tag입니다 이렇게 h의 번호에 따라 글자의 크기와 굵기가 조..
-
HTML에서 인사를 해보자!
게임 개발을 하다가 풀스택까지 시도하게 될 줄은 몰랐다.풀스택이라고 하면 너무 거창하지만 지금 내딛는 한 발이 더 큰 미래로의 시작이길 바라는 마음으로 HTML을 공부한 내용을 기록해보려고한다. 작자는 VSC IDE를 통해 HTML을 공부하였음을 알리며 포스팅을 시작하겠다. 먼저 HTML이 무엇인지 부터 알아보고 시작하도록 하겠다. HTML은 무엇일까? HTML이란 Hyper Text Markup Language를 의미한다. . Hyper Text : 하이퍼 링크를 통해서 어떤 문서에서 다른 문서로 접근할 수 있는 텍스트 . Markup : (콘텐츠를) 표시하다. . Language : 언어 위와 같이 하이퍼 링크를 통해 다른 문서로 접근하여 내용을 사람의 언어로 표현해주는 언어를 HTML이라고..
CSS Practicing
-
CSS 레이아웃 만들기 2
자 이번 시간은 저번 시간에 이어서 레이아웃 위에 레이아웃을 추가해 볼 것이다. 일단 저번 시간에 했던 것을 가져오도록 하자 header aside content footer 자 여기서 우리는 content 안에 4 개의 상자를 추가해볼 것이다. header aside [공지사항] [최근게시물] [최근댓글] [유용한사이트] footer 자 각 아이템들에게 창을 만들어주자 header aside ..
-
CSS 레이아웃 만들기 1
header aside [공지사항] [최근게시물] [최근댓글] [유용한사이트] footer 우리가 보는 모든 웹 페이지는 레이아웃이란게 존재한다 레이아웃은 배치라고 보면 되겠다 무수히 많은 레이아웃들이 존재하지만 우리는 가장 기본적인header, container, footer 부터 만들어 볼 것이다. header content footer 위와 같이 코드를 작성해주고 실행해보면이렇게 나온다. 이것이 가장 기본적인 레이아웃이다.여기에 색깔만 좀 입혀주고 부담스러운 가로 길이만 조정해주면 훨씬 보기..
-
CSS 수평메뉴 수직메뉴 간단하게 만들어 보기
오늘은 수평메뉴와 수직 메뉴를 간단하게 구현해보겠다애플 공식 홈페이지의 수평 메뉴의 일부를 만들어보려고 한다. 일단 메뉴 안에 여러 카테고리 들이 있는 걸로 생각해서 list를 쓰면 편할 것 같다그럼 리스트를 해서 작성 해보자 스토어 Mac iPad iPhone Watch Vision AirPods 리스트를 썼더니 수평이 아닌 수직 메뉴가 생성 됐다. 하지만 괜찮다 CSS는 이를 수평으로 바꿔줄 뿐더러 좀 더 멋드러지게 바꿔줄 수 있다. 스토어 ..
-
CSS 선택자(Selector)의 요소 정리
CSS에서 선택자(Selector)란 어떤 요소에 스타일을 적용할 것인가에 대한 정보이다. 선택자{ 속성명: 속성값;}선택자는 위와 같은 기본 문법 형태를 가진다. 선택자의 종류는 다음과 같이 5개가 있다.- 기본 선택자(Element Selector) : tag명- 그룹 선택자 : h1,p,div ... { color:red; } - 특성 선택자(Attribute Selector) : 속성이용한 Selector- 결합 선택자(부모 > 자식 , 나~형제, 나 + 형제,..) - 의사 클래스 : a:hover { color:red; } 기본 선택자에는 5개의 선택자가 포함된다기본 선택자 1) Universal Selector* : asterisk는 전체를 의미한다.* { color : red..
-
CSS(Cascading Style Sheets)란?
이번 시간에는 CSS에 대해 소개하려고 한다. CSS(Cascading Style Sheets)란 무엇인가?- 계단식으로 스타일을 정의하는 문서- CSS는 HTML문서에 스타일을 더해준다.- HTML 문서는 태그가 태그를 포함하는 계단식 구조를 갖고 있다.- HTML과 CSS를 더해서 웹브라우저로 실행하게되면 웹브라우저는 문서에 적혀있는대로 화면을 구성하고 사용자에게 보여준다 이 과정을 렌더링이라고 한다. 단, CSS 문서 자체는 독립적으로 존재할 수 있지만, 그 목적이 구조화된 HTML 문서의 스타일을 정리하는데 있으므로 HTML문서가 없는 CSS문서는 사실상 의미가 없다.- HTML : 웹문서의 콘텐츠를 구성하는 언어 -CSS : 웹문서의 콘텐츠에 스타일을 추가하는 언어(색상, 크기, 위치등.....