본문 바로가기

전체 글

(90)
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을 보면 어느정도의 윤곽이 드러납니다. 이 그림만으로는 사실 어떻..
TypeError: method() takes no keyword arguments *바쁘신 분들을 위한 빠른 해결법 ## test_dict.get("k1", default=0) ## default라는 설명을 적은것이 에러의 원인 test_dict.get("k1", 0) ## default라는 설명을 제거하면 된다. 해당 에러는 왜 발생하는가? no keyword argument 에러는 python의 함수에서 Keyword Argument를 사용할 수 없기 때문입니다. 이러한 함수는 주로 Built-in function에서 발생합니다. Python은 원래 Keyword Argument를 자유롭게 사용할 수 있습니다. 하지만 python에서 제공하는 Built-in function은 C-level API이기 때문에 Keyword Arguments가 제공되지 않습니다. built-in fu..
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칸 크..
valueerror: exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit * 바쁘신 분들을 위한 빠른 해결법 import sys sys.set_int_max_str_digits(7000) ## 7000보다 더 높은 숫자 입력도 가능 Python의 int는 overflow되지 않는다? Python의 int는 보통의 상식선인 4bytes 크기가 아닌 28bytes나 소모하고 있습니다. 메모리 공간을 많이 차지하는 대신에 overflow에 걱정이 없다는 사실 알고 계셨나요?? * 자세한 글은 https://tyoon9781.tistory.com/entry/python-int-size-28bytes를 참조해 주세요 python의 int는 C/C++의 int와는 비교가 안될 정도로 큰 수를 다룰 수 있습니다. 그렇지만 혹시 의도적이지 않게 큰 숫자를 만들어 버리고 출력하면 시스템에 무..
React란? * 바쁘신 분들을 위한 3줄 요약 1. React는 Meta(Facebook)에서 만든 Javascript 라이브러리이다. 2. JSX 문법을 지원하여 html tag를 마치 프로그래밍 하듯이 작성할 수 있다. 3. Hook, 가상 DOM을 통해 Web application을 효율적으로 개발, 관리, rendering 할 수 있다. * 목차 1. 소개 (Introduce) 2. 언어 (Language) 3. Hook 4. 가상 돔 (Virtual DOM) 소개 (Introduce) React(React.js 또는 ReactJS)는 Component 기반으로 User interface를 구축하기 위한 Frontent Javascript 라이브러리입니다. 이 설명이 어려우신 분들은, "React란 웹페이지를..
Python - List Comprehension *바쁘신 분들을 위한 3줄 요약 1. List생성 code를 한 줄로 표현 가능한 문법입니다. 2. 어려워 보이지만 사실상 python의 문법을 거의 유지하고 있습니다. 3. 속도측면에서 유리할 때도 있지만 주의해서 사용해야 합니다. Introduce(소개) List Comprehension를 한국어로 직역하면 "목록 표현식"이라 할 수 있습니다. python에서는 List 객체를 한 줄로 표현할 수 있는 고유한 문법을 뜻합니다. 이 문법을 사용하면 List를 작성할 때 보다 간결하게 작성이 가능합니다. 예를 들어, 0~9까지의 수 중, 3의 배수가 아닌 것만 list에 담고 싶을 때, 기존 방식으로는 이렇게 작성합니다. a = [] for i in range(10): if i % 3 != 0: a.ap..