목록연습 (14)
강께르의 개발일지
1. 이것은 무엇인가? - 큐는 선입선출의 특징을 가지고 있다. 그 특징을 구현하는데 문제점인 인덱스 변경으로 인한 배열 사용 범위가 애매해지는 것이 있다. 이를 보완하는 순환 큐를 이해해보고자 구현해보았다. 2. 순환 큐의 구조 - 순환 큐를 도식화하면 이렇게 생겼다. - 큐는 선입선출의 특징을 가지고 있어 데이터를 하나 꺼낸다고 한다면, 가장 앞에 있는 인덱스를 비울 수 없기에 그 다음 데이터를 가진 인덱스로 바꿀 것이다. - 이 때 모든 인덱스를 하나씩 땡겨서 그 빈자리를 채우는 것이 아니라 가리키는 인덱스를 옮기는 것이어서 공간에 대한 애매함이 있다. - 이를 보완하는 것이 순환 큐인 것이다. 마치 마지막 인덱스의 다음 인덱스는 다시 처음 인덱스인 것으로 논리적으로 구현한 것이다. - front는..
1. 이것은 무엇인가? - STL에서 제공하는 스택을 이해하기 위해 직접 구현해보았다. 2. 스택이란 무엇인가? - 스택은 가장 먼저 들어온 데이터가 가장 늦게 나가는 방식을 사용하는 자료구조이다. 이 방식을 선입후출, First in Last out, FILO라고도 한다. - 이런 특성을 살리기 위해 top이라는 인덱스가 필요하다. 이는 현 스택에 데이터의 마지막 혹은 스택의 꼭대기가 어디에 있는지 알려주기 위함이다. - 이 top을 통해 데이터를 맨 앞부터 차곡차곡 쌓고 맨 뒤부터 다시 빼는 방식을 구현할 수 있다. 3. 요구 사항 - 스택의 데이터 추가 - 스택의 데이터 제거 - 스택의 데이터 유무 확인 - 스택의 포화 상태 확인 - 스택의 모든 데이터 출력 4. 함수 설명 - 스택에 대한 아래 코..
1. 이것은 무엇인가? - STL에서 제공하며, 노드 기반 자료구조로 사용을 하는 리스트를 이해하기 위해 직접 구현해보았다. 2. 단방향 리스트 구조 - 아래의 글은 이 블로그의 'list 템플릿 클래스' 글에서 가져온 것이다. - list는 다수의 node라는 데이터 구조로 이루어져있다. - node는 값을 저장하는 data와 그 다음 노드의 주소값을 저장할 next로 이루어져있다.(여기서 이름은 임의로 지정한 것이다.) - node는 그 다음 노드의 주소를 가리켜서 그 다음 노드를 접근할 수 있다. - 그렇게 연속적으로 접근하면 가장 마지막 노드까지 접근할 수 있을 것이다. - 이런 접근으로 데이터를 저장하고 다루는 것이 list이다. - head는 가장 앞에 있는 노드이며 특정한 data를 지니지 ..
1. 이것은 무엇인가? - 플레이어의 인벤토리와 상점 간의 상호작용을 구현해보았다. 일반적으로 상점에서 할 수있는 매매 기능과 인벤토리에서 물건을 확인하고 원하는 장비로 착용할 수 있게 하는 기능을 구현한 것이다. 2. 요구 사항 - 상점에서 사고 팔기가 가능하도록 기능을 구현 - 사고 파는 과정에서 플레이어의 돈의 증감이 있도록 한다. - 갯수는 무한정으로 설정하는 것이 아닌 한정적인 수량으로 사고 파는 것으로 한다. - 인벤토리에 물건이 어떤 것이 있는지 볼 수 있도록 한다. - 장비를 확인하고 원하는 장비를 인벤토리의 물건과 바꿔 착용할 수 있게 한다. - 이에 대한 기능을 구현할 때, vector로 이용해 데이터를 관리하도록 한다. 3. 클래스 구성 - 클래스는 기본적으로 플레이어 클래스, 인벤토..
1. 이것은 무엇인가? - 이 게임은 무엇인가? 월남뽕? 잘못들은 줄 알았다. 이는 카드 게임의 일종이며, 그 룰에 대한 설명은 아래 링크를 대신해 게임에 대한 설명은 줄이도록 하겠다. https://namu.wiki/w/%EC%9B%94%EB%82%A8%EB%BD%95 2. 요구사항 - 이 게임의 카드는 트럼프 카드로 알려진 그 카드로 사용한다. 총 52장이며, 게임 시작할 때, 무작위로 순서를 잘 섞을 것이다. - 이 게임은 매 판마다 플레이어에게 판돈을 걸 것인지, 접을 것인지 입력을 받을 것이다. 그 선택에 따라 판돈을 입력하거나, 이를 생략할 수 있다. 생략했을 시, 판돈은 0으로 고정된다. - 판돈의 최소 금액은 1000원이다. - 52장의 카드로 이루어진 카드 뭉치에서 3장을 뽑을 것이다. ..
1. 이것은 무엇인가? - 이 게임은 몬스터 3마리와 동시에 전투를 벌이는데 턴제 방식으로 서로의 동작을 처리하여 서로의 체력을 감소시켜 살아남는 게임이다. - 클래스를 배우고 있는 중인 만큼, 클래스 중심으로 프로그래밍하는 법을 익히는 게임이 될 것이다. 2. 요구 사항 - 플레이어와 몬스터 3마리와 동시에 싸우는 게임이다. 싸우는 방식은 플레이어 - 몬스터1 - 플레이어 - 몬스터2 ... 이런 식으로 싸우게 할 것이다. - 같은 몬스터 3마리로 하는 것이 아니라 다양한 몬스터가 무작위로 결정될 수 있도록 한다. 이 게임 같은 경우엔 본인이 구상한 몬스터로 하피와 큰턱괴물이라는 이름의 몬스터가 무작위로 결정될 것이다. - 플레이어와 각 몬스터는 기본기 하나와 스킬 3개로 구성될 것이다. 기본기는 부모..
1. 이것은 무엇인가? - 이 게임은 4x4 2차원 배열 게임판에 16개의 숫자를 무작위로 섞고 그 섞은 배열을 순서대로 나열할 수 있게 조작하여 완성하는 게임이다. 일반적으로 그림 맞추기 게임으로 익숙할 것이다. 2. 요구 사항 - 게임 시작과 게임 종료를 제공하는 메뉴 화면 구현 - 3가지 선택지에 따라서 섞는 횟수가 다른 난이도 시스템 구현 - 메뉴 화면에서 게임 종료를 선택하지 않는 한, 계속 해서 게임을 할 수 있는 시스템 구현 - 게임의 시작점을 항상 가장 왼쪽 상단, 하단, 가장 오른쪽 상단, 하단 중 하나로 시작할 수 있게 구현 - 플레이어가 조종하는 커서가 게임판을 벗어나는 불상사가 일어나지 않도록 구현 3. 새로 알게 된 점 - 클래스의 생성자를 통해서 다양한 것을 할 수 있다는 점을 ..
1. 이것은 무엇인가? - 컴퓨터가 무작위로 중복되지 않은 일정 범위의 숫자를 5x5 게임판에 배열하고 플레이어는 특정 숫자를 지정하여 체크한 후, 가로나 세로 혹은 대각선이든 숫자 5개를 연속하여 1줄을 완성한다면 1 빙고로 인정하고 이 빙고를 3개 달성하는 것이 목표인 빙고 게임이다. - 사실 구조체화한 일대일 턴제 게임보다 더 먼저 만들었으나 시간이 지난 뒤, 수정하려 했으나 일정상 어려움과 시간이 얼마 지나지 않았음에도 내 코드를 내가 다시 익히기 위해 읽어야하는 불상사가 발생하여 일단은 코드만 올리려고 한다. 2. 주요 게임 동작 설명 2-1. 게임 시작 전 숫자 섞기 - 컴퓨터는 2차원 배열 5x5의 첫번째 인덱스에 1부터 25까지의 숫자 중 무작위로 하나를 넣는다. 그리고 그 다음 두번째 인..
1. 이것은 무엇인가? 이 게임은 이전에 만들었던 몬스터와 일대일 턴제 전투 게임과 내용이 거의 다를 것이 없다. 다른 부분을 짚자면 기존 한 파일 내에 기본 자료형으로 구성되었던 것을 구조체로 수정해서 만들었다는 것이다. 수정하는 김에 한 파일에 몰아넣어 있어 가독성이 떨어지는 점을 고려해 분할 파일로 코드를 보기 좋게 바꾸려고 시도했다. 그리고 코드를 좀 더 분할하여 함수화하는 방향으로 가독성 좋게 보이는 방안을 고민해보았다. 2. 새로 알게 된 점 - 객체 지향 프로그래밍의 장점을 어느 정도 알 것 같다. 기존의 코드에서는 코드 내에서 연관성이 있는 함수들이어도 실제로 묶어주는 게 없이 제각기 선언되어 있어 코드를 짜는 본인도 간혹 이해하기 힘들 때가 있었다. 그런데 구조체로 연관 있는 변수를 멤버..
1. 이것은 무엇인가? 컴퓨터가 무작위로 고른 4자리의 숫자를 맞추는 게임이다. 자릿수와 숫자가 맞은 것 하나당 스트라이크 하나로 인정하고, 자릿수는 다르지만 숫자가 맞은 것은 볼 하나로 인정한다. 이렇게 해서 스트라이크 4개 즉, 모든 숫자와 자릿수를 알아 맞히면 홈런이라고 하여 정답 처리를 하고 게임을 끝낸다. 숫자야구 진행 순서는 "시작 출력문 - 난이도 설정 - (플레이어 입력 - 입력한 값에서 정답 판단 처리 - 그에 대한 결과 출력) - 게임 종료 출력문"으로 이루어져있다. 2. 새로 알게 된 점 - int형배열을 4개의 요소로 하나 정의하고 그곳에 입력을 받으려고 시험삼아 1234를 입력했는데 아뿔싸, 첫번째 배열요소에 1234라고 때려박는 걸 발견했다. - 이에 대한 고민으로 문자열은 숫자..