본문 바로가기

전체 글

(90)
Python - np.array vs list python에는 데이터를 다루기 위해 주요 쓰이는 주요한 자료구조가 있습니다. ## 서로의 동작이 사실 좀 다릅니다. 자세한 내용은 다음에... ## list 선언. a = list([1, 2, 3]) a = [1, 2, 3] ## set 선언. b = set([1, 2, 3]) b = {1, 2, 3} ## tuple 선언. c = tuple([1, 2, 3]) c = (1, 2, 3) ## dict 선언 d = dict(k1=1, k2=2, k3=3) d = {"k1": 1, "k2": 2, "k3": 3} List, set, tuple, dict은 다음과 같은 특징을 가지고 있습니다. Type 특징 List 수정, 중복데이터를 허용한다. Set 중복데이터는 허용하지 않는다. Tuple 수정이 불가능..
Python - 테트리스(Tetris) 만들기 (9) - Refactoring *이번 시간은 설계를 제대로 하지 않은 업보를 확인하는 시간입니다. 전체적인 설계 없이 4(Draw rect) ~ 8(Field)까지 기능 구현만 집중했더니 Refactoring이 얼마나 힘들어 졌는지 확인해 보세요. 이번 글에서는 Refactoring을 진행해보도록 하겠습니다. Refactoring을 할 코드는 아래와 같습니다. * Tetris 객체 안에서 요소들이 혼잡한 형태라는 것만 파악하셔도 충분합니다. import pygame as pg from typing import List from copy import deepcopy class Mino: def __init__(self, name:str, blocks:List[List], color:tuple): self.name = name self...
Python - 테트리스(Tetris) 만들기 (8) - Field 이전 시간에서의 문제점은, current mino가 drop까지는 되었는데, Field에 남지 않는 문제가 있었습니다. 이렇게 된 원인은 2가지가 있습니다. 1. field 자체가 정의되어 있지 않다. 2. mino를 field에 남기는 함수가 없다. 그래서, 이번시간에는 field를 제대로 만들어 보고자 합니다. 1. Field를 만들어보자. 이전에 처음 field를 표현할 때는 10 x 20으로 보인다 그래서 사각형을 해당 크기만큼 그렸었습니다. 실제 게임상에서 요구하는 Field도 10 x 20일까요? 10 x 40을 안내하면서 20만 보인다고 하고 있습니다. 즉 이런 그림의 형태로 필드라고 생각할 수 있습니다. 이해가 어려우신 분들은 아래 영상까지 같이 참고 바랍니다. 10 x 40 Field 크..
Python - 테트리스(Tetris) 만들기 (7) - Drop Timer 이전 시간에는 mino를 경계선 안에서 자유자재로 움직일 수 있도록 했습니다. 하지만 다음 블럭이 나오는 일은 없었죠. 이번 글에서는, 블럭이 놓이는 조건을 작성하고, 블럭이 놓인 후 다음 블럭이 나올 수 있도록 해보겠습니다. 블럭이 놓이는 조건이 뭘까요? 문서를 찾아보니 Lock Delay라는 문서가 있습니다. 미노가 놓인다고 바로 멈추는 것이 아니라, 적절한 시간이 지나는 동안에도 움직임이 없으면 (보통은 0.5초) 멈춥니다. 이 동작을 만들기 위해서는 타이머를 동작시킬 조건 (더 이상 밑으로 내려가지 못함) 타이머가 필요 (0.5초를 재야 함) 타이머가 0.5초동안 움직인 후 다음 블럭 생성 위 3동작이 있어야 할 것입니다. 바로 작성해 봅시다. 1. 더 이상 밑으로 내려가지 못하는 조건 생성 먼저..
Python - 테트리스(Tetris) 만들기 (6) - Tetriminos 지난 시간에는 키보드에 따라 한 칸씩 움직이는 사각형을 만들었습니다. 이번에는 그 사각형을 Tetriminos(이하 미노라 하겠습니다)로 만들어보겠습니다. 오랜만에 공식 문서 https://tetris.fandom.com/wiki/Tetromino를 확인해 보겠습니다. 미노는 총 7가지가 있습니다. 이 미노를 어떻게 python에서 작성할 수 있을까요? 우선 간단하게 미노를 눈으로 보니 7개의 미노가 존재합니다. I, O, T, S, Z, J, L로 각각 이름이 있으며 모양과 색깔도 있습니다. 이 정보를 가지고 class로 작성해 보았습니다. Mino를 Class로 작성. name에는 string을 작성, blocks에는 x, y가 들어갈 좌표 list를 작성, rgb 숫자를 저장할 tuple를 작성합니..
Python - 테트리스(Tetris) 만들기 (5) - Event Event Handling Event란 무엇일까요? 다양한 뜻이 있지만, 보통은 사건 발생을 의미하며, 게임에서는 사용자의 입력을 의미하기도 합니다. 이런 Event 처리를 Event Handling이라 합니다. pygame에서는 어떤 식으로 event handling을 할지 살펴봅시다. def _event(self): for event in pg.event.get(): if event.type == pg.QUIT: ## Window 상단 X버튼 self._running = False 이전에 봤던 함수죠? pg.QUIT가 없으면 종료조차 못하는 pygame을 확인했던 그 함수입니다. 이 pg.event.get()을 통해, 움직이는 물체를 만들어 보겠습니다. 움직이는 물체를 만들기 위해선 다음과 같은 동작..
Python - 테트리스(Tetris) 만들기 (4) - Draw Rect 이전 글에서는, Tetris를 구동하기 위한 코드 초안을 작성했습니다. import pygame as pg class Tetris: def __init__(self, width: int, height: int): self._size = self.width, self.height = width, height self._display_surf = None self._running = False def _init(self): pg.init() self._display_surf = pg.display.set_mode(self._size) self._running = True def _event(self): for event in pg.event.get(): if event.type == pg.QUIT: ## W..
Python - 테트리스(Tetris) 만들기 (3) - Pygame Library Library 설치 우선 python을 화면에 띄우기 위해서는, library가 있어야 합니다. GUI모듈을 만드는 것은 매우 어려운 일이기 때문에...누군가 잘 만든 Tool, Library, Framework가 있다면 사용해야죠. 빌딩을 크레인 없이 삽질로만 만들 수는 없지 않겠습니까? 저는 GUI Tool로 Pygame을 선택했습니다. Library를 설치해 봅시다. pip install pygame 그러면 설치가 완료됩니다. Library 사용법 확인 pygame까지 설치한 것은 좋았는데, 이제 어떻게 할까요? 새로운 library를 봤으면 유튜브나, 구글 문서를 확인해 보는 것도 좋지만, 공식 Site에서 보여주는 Tutorial을 참조하는 것도 좋은 습관입니다. 여기서 Tutorials에 들어..
Python - 테트리스(Tetris) 만들기 (2) - 환경 설정 프로그래밍을 하기위한 환경 설정은 매우 중요합니다. python을 돌아갈 수 있는 환경을 만들기 위해, vscode를 설치 하도록 합시다. vscode python 환경설정 그리고 Tetris라는 폴더를 새로 만들었습니다. Terminal을 엽니다. 단축키는 ctrl + `(1 옆에 있는 물결 키) 입니다. vscode 설치가 완료되었습니다. 혹시 python이 설치 안되신 분들은 python도 설치하도록 합시다. python 설치 방법 저는 가상환경을 만들어서 작업을 하려 합니다. 아래와 같은 명령어를 입력하도록 합시다. python -m venv .venv 그러면 다음과 같은 폴더가 생성될 것입니다. 이 폴더 안에, python 가상환경이 설치된 것입니다. 가상환경을 활성화 합시다. (윈도우 기준) ..
Python - 테트리스(Tetris) 만들기 (1) - Intro Intro(소개) 테트리스란, 블럭 4개로 이루어진 도형(Mino)를 필드에 쌓아, 줄을 지워나가는 게임입니다. 간단한 규칙에 비해, 다양한 기술들(예 : T-spin)이 있어 인기가 많은 게임입니다. 이 게임을 Python으로 구현하고자 합니다. Purpose(목적) 이 블로그에서 python으로 테트리스를 만드는 목적이 무엇일까요? 이해하기 쉬운 게임을 통해 프로그래밍의 기본적인 흐름을 보여주는 것이 주된 목적입니다. 구현을 아래 6단계로 나눠서 진행합니다. 1단계. 요구사항 문서 분석 2단계. 요구사항에 따른 언어 선택 3단계. 요구사항의 기능을 상세 분석, 구현 4단계. 기능 Test 5단계. Bug fix, 기능 확장(구현 단계인 3으로 돌아감) 6단계. 완성 보통사람들은 막연한 요구사항을 머릿..