python으로 게임 만들기/테트리스 27

[테트리스] 코드 전체적으로 수정, 임의의 블록이 바닥까지 떨어지는 것까지 구현

▷ 전체 코드 더보기 # 테트리스 import pygame import random import sys # 초기화 & 기능 사용 시작을 알림 pygame.init() # 전체 스크린의 가로, 세로 설정 screen_width = 480 screen_height = 640 # FPS clock = pygame.time.Clock() # 컬러셋팅 white = (255,255,255) black = (0,0,0) organe = (255,204,153) green = (204,255,229) blue = (204,229,255) pink = (255,204,229) purple = (204,204,255) # 스크린 생성하기 screen = pygame.display.set_mode((screen_width..

[테트리스] 설계 방향 변경

▷ 설계 방향 변경 일단 여기까지 구현을 하고 생각을 해보니, 전체적인 구조에 대해서 조금 다르게 접근할 필요를 느끼게 되었다. 왜냐하면, 지금은 임의의 블록을 하나 생성하고, 블록의 높이가 470을 넘으면 멈추도록 설정을 했는데. 이렇게 하면 다른 블록과의 상호작용을 고려하기가 어렵다. 또, 블록을 멈춰둔 뒤 새로운 블록을 계속 만들어야하는데, 그러면 테트리스의 특성 상 블록을 적어도 50개는 만들어야 충분하지 않을까 싶다. 그런데 다른 사람들의 코드를 잠깐 살펴보니, 그 방법은 아닌 것 같다. 그래서 이 문제를 어떻게 해결할까 생각을 해보다가, 그래픽을 조금 더 나중에 구현을 하고 일단은 뼈대에 집중하자는 생각을 했다. 전체 맵을 0으로 된 2차원 배열로 담고, 여기에 블록을 1로 표현해서 담아야겠다..

[테트리스] 첫번째 블록이 땅에 닿으면 멈추도록

▷ 미션 1. 블록이 땅에 닿으면 멈춰야함 도넛 먹기 게임에서는 도넛이 바닥을 지나면, 다시 위에서 새로 생성된다. 근데, 테트리스는 블록이 바닥에 닿으면 멈춰야함. 더보기 # 테트리스 import pygame import random import sys # 초기화 & 기능 사용 시작을 알림 pygame.init() # 전체 스크린의 가로, 세로 설정 screen_width = 480 screen_height = 640 # FPS clock = pygame.time.Clock() # 컬러셋팅 white = (255,255,255) black = (0,0,0) organe = (255,204,153) green = (204,255,229) blue = (204,229,255) pink = (255,204,..

[테트리스] 블록이 원하는 범위에서 랜덤으로 떨어지도록 지정

# random 모듈 임포트 import random # 0에서 6까지의 범위 안에서 랜덤으로 숫자 생성 block_random_number = random.randint(0, 6) # 120에서 570까지의 범위 안에서 랜덤으로 숫자 생성 block_x_pos = random.randint(120, 570) 블록의 종류를 결정하는 숫자인 block_random_number는 random.randint(0,6)을 이용해서 생성하였습니다. random.randint(시작 숫자, 마지막 숫자) 이렇게 넣어주면 시작 숫자부터 마지막 숫자까지 랜덤으로 수를 생성해서 return해줍니다. block_x_pos의 경우에도 random.randint(120, 570)를 사용했는데, 이것은 화면에서 블록이 생성되는 x..

[테트리스] 전체적인 코드 수정 + 타이머 & 점수판

# 전체 스크린의 가로, 세로 설정 screen_width = 480 screen_height = 640 스크린을 생성하는 데 있어서, 화면 비율도 중요합니다. 일반적인 TV나 모니터의 경우에는 4:3의 비율을 갖기 때문에 여기에 맞춰서 640x480으로 비율을 재조정하였습니다. 추가로 배경화면과 블록을 그리는 코드를 while문 안에 넣었습니다. * 화면 비율 일반적인 TV나 모니터 4:3 = 400x300 / 640x480 / 800x600 / 1024x768 / 1152x864 / 1280x960 DVD 등 16:9 = 760x480 / 1200x900 # 타이머 설정 # 총 시간 total_time = 40 # 시작시간 정보 start_ticks = pygame.time.get_ticks() # ..

[테트리스] 기본 블록 만들어보기

대략 노트에 한번 그림으로 그려보았다. 블록 모양은 7개인데, 회전해서 바뀌는 것까지 모두 고려했다. 색칠된 부분은 1, 아닌 부분은 0으로 입력할 예정이다. 아래와 같은 느낌으로 블록을 하나하나 입력해보았다. block = [ # 1번 인덱스 ㄴ 모양 [ [[0,0,0],[1,0,0],[1,1,1]], [[1,1,0],[1,0,0],[1,0,0]], [[1,1,1],[0,0,1],[0,0,0]], [[0,0,1],[0,0,1],[0,1,1]] ] ] 더보기 block = [ # 0번 인덱스 ㅁ 모양 [ [[1,1,0],[1,1,0],[0,0,0]] ], # 1번 인덱스 ㄴ 모양 [ [[0,0,0],[1,0,0],[1,1,1]], [[1,1,0],[1,0,0],[1,0,0]], [[1,1,1],[0,0,..

[테트리스] 배경화면에 벽 맵 추가하기

대충 이렇게 하니까, 블록이 2개 만들어졌다. 이제 좌표값을 잘 설정하고 for문을 돌리면서 블록을 깔아봐야겠다. 나중에 바꾸기 쉽도록 함수로 만들도록 하자. # 오브젝트 생성하기 # (100,50) 는 스크린에서의 위치 box1 = pygame.Rect(60,530,20,20) pygame.draw.rect(background,pink,box1,10) box2 = pygame.Rect(85,530,20,20) pygame.draw.rect(background,pink,box2,10) 더보기 import sys import pygame from pygame.locals import * # 초기화 & 기능 사용 시작을 알림 pygame.init() ## 초당 프레임 단위 설정 ## FPS = 30 Fram..

[테트리스] 좌표값 설정

pygame에서는 pygame.rect 라는 직사각형 오브젝트를 제공한다. pygame.Rect(left, top, width, height) 여기에서 left는 왼쪽 변의 중앙값을 말하고, top은 윗변의 중앙값을 가리킨다. 그리고 width는 사각형의 넓이, height는 높이를 이야기한다 pygame.draw.rect(배경, 색상, object이름) 이렇게 하면 우리가 만든 직사각형을 출력해볼 수 있다. # 오브젝트 생성하기 # (100,50) 는 스크린에서의 위치 box = pygame.Rect(200,100,200,200) pygame.draw.rect(background,pink,box) 더보기 import sys import pygame from pygame.locals import * # ..

[테트리스] 게임 배경화면 만들기

우선 간단한 것부터 먼저 알아보자. ▶ 스크린 생성하기 background = pygame.display.set_mode((스크린의 가로길이, 스크린의 높이)) 위 함수를 사용하면, 스크린을 간단하게 만들 수 있다. background.fill((204,229,255)) 이런 식으로 튜플의 형태로 RGB 값을 넣어주면 배경색을 지정할 수 있다 (나는 파스텔 색을 좋아하니까 이걸로 연습해보자) print(background) 그리고 이 상태에서 프린트를 해주면 배경화면이 나오게 된다. 더보기 import sys import pygame from pygame.locals import * # 초기화 & 기능 사용 시작을 알림 pygame.init() ## 초당 프레임 단위 설정 ## FPS = 30 Frame..

[테트리스] 7. 게임 필드 표현하기

▶ 미션 _ 완성해야 할 함수 1. FIELD = [] pygame.draw.rect array.insert(i,x) 2. set_game_field() 3. draw_game_field() 책의 가이드를 따라, 하나씩 미션을 수행해봅시다. set_game_field()에서 전체적인 맵 값을 입력하고, draw_game_field()에서 입력한 필드값을 출력해보겠습니다. 1. FIELD = [] 우선, 일단 정보가 없어서 좀 막막하긴 한데... 일단은 pygame 라이브러리 설명서 좀 읽어보기로 했다. 여기서는 pygame.draw.rect를 사용한다고 하니 한번 찾아보자. ▷ pygame.draw.rect https://www.pygame.org/docs/ref/draw.html#pygame.draw...