본문 바로가기

Development/Tetris

(17)
Python - 테트리스 만들기 Code 공유 (마지막) 꾸준하게 Python으로 Tetris를 만드는 과정을 단계별로 써보려 했습니다. 그런데 이런 속도로 작성하다가는 100개 넘는 글을 써야 할 것 같고...그정도의 시간은 없다 판단되어 이 시점까지 작성한 코드를 그냥 공유하려 합니다. * 예전 글에 작성헀던 UI는 하나도 안썼다는건 안비밀...ㅠㅠ https://github.com/tyoon9781/tetris_python 혹시 이 코드로 숙제나 기타 좋은 곳에 쓰시는 분들은 별좀 눌러주세요ㅎㅎ 이것으로 Python tetris를 마치도록 하겠습니다. 감사합니다.
Python - 테트리스(Tetris) 만들기 (16) - Checkbox 여기까지 잘 따라오신 분들은 Checkbox를 만드는데 전혀 어려움이 없을 것이라 생각됩니다. Checkbox 그림을 넣어서 표현해도 좋지만 간략하게 빈 네모에서 색깔이 찬 네모를 표현하는 것으로 간단하게 만들어 보겠습니다. Checkbox 위치 잡기 python code로 만들면 다음과 같습니다. class CheckBox: _ACTIVATE_COLOR = (127, 255, 127) _DEACTIVATE_COLOR = (192, 192, 192) BACKGROUND_COLOR_MAP = {True: _ACTIVATE_COLOR, False: _DEACTIVATE_COLOR} LINE_COLOR = (255, 255, 255) def __init__(self, x, y, size): self.x, se..
Python - 테트리스(Tetris) 만들기 (15) - Slider 지난시간에는 Text input rect를 만들었었습니다. 이번시간에는 Slider를 만들어 보겠습니다. Slider 만들기 Silder는 시작과 끝이 있고, 그 사이에 Toggle이 있습니다. Toggle을 마우스나 키보드를 활용해서 수직이나 수평으로 이동해서 값을 조절합니다. Silder의 시작과 끝은 Silder가 가질 수 있는 최대값과 최소값을 의미하며 그 사이의 값은 Toggle의 위치에 비례합니다. 이 내용을 가지고 Slider를 만들어 보겠습니다. class SlideBar: _ACTIVE_COLOR = (192, 64, 64) _DEACTIVE_COLOR = (192, 192, 192) BACKGROUND_COLOR_MAP = {True: _ACTIVE_COLOR, False: _DEACT..
Python - 테트리스(Tetris) 만들기 (14) - text input 이번시간에는 text를 input할 input rect를 만들어 보겠습니다. web에서는 tag를 사용하면 참 쉽게 만들 수 있습니다. 하지만 pygame은 저런 tag가 존재하지 않으니 직접 만들어 줘야 합니다. 한번 잘 만든다음에 다양한 곳에서 사용해 보도록 합시다. Input Rect input rect의 기능은 다음과 같이 정리됩니다. 1. active, deactive된다. 2. rect 영역을 클릭하면 active된다. 3. rect 외 영역을 클릭하면 deactive된다. 4. active 되었을 때 key입력에 따라 input rect에 있는 text가 update된다. 5. backspace key를 누르면 text가 한 칸씩 삭제된다. 물론 다양한 경우에 따라 이 규칙들은 조금씩 변화될..
Python - 테트리스(Tetris) 만들기 (13) - Setting Screen 이전시간에는 Main Screen 껍데기를 만들었습니다. 이번에는 Setting Screen을 만들고, 연결하는 작업을 해보도록 하겠습니다. Setting Screen 그리기 Setting Screen은 어떤 내용이 있어야 할까요? 요구사항을 살펴보면 다음과 같은 항목들이 Setting Screen에서 설정해야 하는 값이 됩니다. 1. 키보드 맵핑 2. 홀드 시스템 On/Off 3. 고스트 시스템 On/Off 4. 미리보기 1 ~ 6 개 조정 5. 소리 볼륨 6. Lock Delay : mino가 Lock 된 이후 다음 블럭이 나오는데 걸리는 시간 7. Gravity : 아무 동작을 안하고 있을 때 블럭이 내려오는 속도 8. ARE : 락 되고 다음 생성까지의 지연시간 9. DAS : 자동 이동까지 걸리..
Python - 테트리스(Tetris) 만들기 (12) - Main Screen 시작하기 전에... 테트리스(Tetris) 만들기 (11) 에서 Diagram을 그렸던 것을 다시 확인해 봅시다. 보시면 Main Application에서 실행할 수 있는 기능이 3가지가 있습니다. 1. Setting Screen 2. Tetris Application 3. Exit 이렇게 3가지의 Status가 존재하게 됩니다. Setting screen은 같은 Main Application에 있지만, 세부적으로 들어가면 Main screen과는 다른 화면이 나오므로 화면 기능으로 봅시다. 이번 시간에는 Main Screen을 그려보도록 하겠습니다. Main Screen 그리기 Main Screen은 어떻게 생겼을까요? 위의 Diagram을 보면 어느정도의 윤곽이 드러납니다. 이 그림만으로는 사실 어떻..
Python - 테트리스(Tetris) 만들기 (11) - Diagram 시작하기 전에... 테트리스(Tetris) 만들기 (10) 에서 요구사항을 분석한 결과, 아래와 같은 결론을 얻을 수 있었습니다. 1. Tetrion : playfield area(10x20), hidden playfield(10x40) area, hold area, preview area 2. Tetromino : shape, color, 7-bag random generator, center position, init position 3. Movement : left, right, softdrop, hard drop, SRS 4. Keyboard event : right, left, rotation, hold, soft/hard drop, press key long/short time. 5. Appl..
Python - 테트리스(Tetris) 만들기 (10) - Requirement 들어가기에 앞서... 테트리스 만들기(9) - Refactoring까지 따라오셨다면, 왜 제대로 된 설계 없이 기능 순서대로 마구잡이로 개발하면 안되는지 알게 되셨을 껍니다. 물론 혼자 진행하는 Practice라면 상관이 없지만, 만약에 이게 팀 단위의 Project였고, Refactoring할 시간은 없는데 새 기능을 추가해야 하는 상황이라면 어떻게 될까요? 아찔합니다. 이번 시간에는, 다시 처음으로 돌아가 https://tetris.fandom.com/wiki/Tetris_Wiki의 문서를 분석하고자 합니다. Tetris 요구사항을 전부 확인 먼저, Overview부터 살펴보도록 합시다. - 테트리스는 테트리온이라는 장치 내에서 동작합니다. - 테트리온의 가장 큰 부분은 가로 10칸, 세로 20칸 크..
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 크..