대략 노트에 한번 그림으로 그려보았다. 블록 모양은 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,1],[0,0,0]],
[[0,0,1],[0,0,1],[0,1,1]]
],
# 2번 인덱스 ㄱ 모양
[
[[0,0,0],[0,0,1],[1,1,1]],
[[0,1,1],[0,0,1],[0,0,1]],
[[1,1,1],[1,0,0],[0,0,0]],
[[1,0,0],[1,0,0],[1,1,0]]
],
# 3번 인덱스 ㅓ 모양
[
[[0,0,0],[0,1,0],[1,1,1]],
[[1,0,0],[1,1,0],[1,0,0]],
[[1,1,1],[0,1,0],[0,0,0]],
[[0,0,1],[0,1,1],[0,0,1]]
],
# 4번 인덱스 z 모양
[
[[0,0,0],[1,1,0],[0,1,1]],
[[0,1,0],[1,1,0],[1,0,0]]
],
# 5번 인덱스 z y축 대칭 모양
[
[[0,0,0],[0,1,1],[1,1,0]],
[[0,1,0],[0,1,1],[0,0,1]]
],
# 6번 인덱스 l 모양
[
[[1,1,1],[0,0,0],[0,0,0]],
[[0,0,1],[0,0,1],[0,0,1]]
]
]
한번 그려보자
# 블록 한번 그려보기
for k in range(1,2):
for i in range(3):
for j in range(3):
block_flag = block[k][0][i][j]
box = pygame.Rect(150+25*i,150+25*j, 20*block_flag, 20*block_flag)
pygame.draw.rect(background,purple,box,10)
더보기
import sys
import pygame
from pygame.locals import *
# 초기화 & 기능 사용 시작을 알림
pygame.init()
## 초당 프레임 단위 설정 ##
FPS = 30
FramePerSec = pygame.time.Clock()
# 전체 스크린의 가로, 세로 설정
screen_width = 520
screen_height = 600
# 컬러셋팅
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)
# 스크린 생성하기
background = pygame.display.set_mode((screen_width, screen_height))
background.fill(blue)
print(background)
def background_set():
# 맨 밑에 바닥깔기
for i in range(11):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(60 + 25*i,530,20,20)
pygame.draw.rect(background,pink,box,10)
# 왼쪽벽 만들어보쟈
for j in range(18):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(60,530-25*j,20,20)
pygame.draw.rect(background,pink,box,10)
# 오른쪽벽 만들어보쟈
for j in range(18):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(310,530-25*j,20,20)
pygame.draw.rect(background,pink,box,10)
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,1],[0,0,0]],
[[0,0,1],[0,0,1],[0,1,1]]
],
# 2번 인덱스 ㄱ 모양
[
[[0,0,0],[0,0,1],[1,1,1]],
[[0,1,1],[0,0,1],[0,0,1]],
[[1,1,1],[1,0,0],[0,0,0]],
[[1,0,0],[1,0,0],[1,1,0]]
],
# 3번 인덱스 ㅓ 모양
[
[[0,0,0],[0,1,0],[1,1,1]],
[[1,0,0],[1,1,0],[1,0,0]],
[[1,1,1],[0,1,0],[0,0,0]],
[[0,0,1],[0,1,1],[0,0,1]]
],
# 4번 인덱스 z 모양
[
[[0,0,0],[1,1,0],[0,1,1]],
[[0,1,0],[1,1,0],[1,0,0]]
],
# 5번 인덱스 z y축 대칭 모양
[
[[0,0,0],[0,1,1],[1,1,0]],
[[0,1,0],[0,1,1],[0,0,1]]
],
# 6번 인덱스 l 모양
[
[[1,1,1],[0,0,0],[0,0,0]],
[[0,0,1],[0,0,1],[0,0,1]]
]
]
# 블록 한번 그려보기
for k in range(1,2):
for i in range(3):
for j in range(3):
block_flag = block[k][0][i][j]
box = pygame.Rect(150+25*i,150+25*j, 20*block_flag, 20*block_flag)
pygame.draw.rect(background,purple,box,10)
# 게임창 이름 설정
pygame.display.set_caption("PYGAME Example")
background_set()
# 아하 ! 연습할 때, 게임을 종료시키는 함수가 있어야 실행이 된다.
# 아래 코드 계속 적어줘야함.
# 게임을 종료시키는 함수
while True:
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
FramePerSec.tick(FPS)
블럭이 이렇게 잘 표현되는 걸 알 수 있다.
이제 내려오는 기능과 회전하는 기능을 추가하면 된다.
* 친구 피드백
블록 중에서 ㅁㅁㅁ 이 블록이 왜 3개 밖에 없는지 물어보았다.
아차, 깜빡하고 3개로 만들어버렸네...
블록을 3*3에서 4*4로 바꿔야겠다.
▷ 바꾼 코드
더보기
import sys
import pygame
from pygame.locals import *
# 초기화 & 기능 사용 시작을 알림
pygame.init()
## 초당 프레임 단위 설정 ##
FPS = 30
FramePerSec = pygame.time.Clock()
# 전체 스크린의 가로, 세로 설정
screen_width = 520
screen_height = 600
# 컬러셋팅
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)
# 스크린 생성하기
background = pygame.display.set_mode((screen_width, screen_height))
background.fill(blue)
print(background)
def background_set():
# 맨 밑에 바닥깔기
for i in range(11):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(60 + 25*i,530,20,20)
pygame.draw.rect(background,pink,box,10)
# 왼쪽벽 만들어보쟈
for j in range(18):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(60,530-25*j,20,20)
pygame.draw.rect(background,pink,box,10)
# 오른쪽벽 만들어보쟈
for j in range(18):
# (100,50) 는 스크린에서의 위치
box = pygame.Rect(310,530-25*j,20,20)
pygame.draw.rect(background,pink,box,10)
block = [
# 0번 인덱스 ㅁ 모양
[
[[1,1,0,0],[1,1,0,0],[0,0,0,0],[0,0,0,0]]
],
# 1번 인덱스 ㄴ 모양
[
[[0,0,0,0],[1,0,0,0],[1,1,1,0],[0,0,0,0]],
[[1,1,0,0],[1,0,0,0],[1,0,0,0],[0,0,0,0]],
[[1,1,1,0],[0,0,1,0],[0,0,0,0],[0,0,0,0]],
[[0,0,1,0],[0,0,1,0],[0,1,1,0],[0,0,0,0]]
],
# 2번 인덱스 ㄱ 모양
[
[[0,0,0,0],[0,0,1,0],[1,1,1,0],[0,0,0,0]],
[[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]],
[[1,1,1,0],[1,0,0,0],[0,0,0,0],[0,0,0,0]],
[[1,0,0,0],[1,0,0,0],[1,1,0,0],[0,0,0,0]]
],
# 3번 인덱스 ㅓ 모양
[
[[0,0,0,0],[0,1,0,0],[1,1,1,0],[0,0,0,0]],
[[1,0,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]],
[[1,1,1,0],[0,1,0,0],[0,0,0,0],[0,0,0,0]],
[[0,0,1,0],[0,1,1,0],[0,0,1,0],[0,0,0,0]]
],
# 4번 인덱스 z 모양
[
[[0,0,0,0],[1,1,0,0],[0,1,1,0],[0,0,0,0]],
[[0,1,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]]
],
# 5번 인덱스 z y축 대칭 모양
[
[[0,0,0,0],[0,1,1,0],[1,1,0,0],[0,0,0,0]],
[[0,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,0,0]]
],
# 6번 인덱스 l 모양
[
[[1,1,1,1],[0,0,0,0],[0,0,0,0],[0,0,0,0]],
[[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]]
]
]
# 블록 한번 그려보기
for k in range(1,2):
for i in range(4):
for j in range(4):
block_flag = block[k][0][i][j]
box = pygame.Rect(150+25*i,150+25*j, 20*block_flag, 20*block_flag)
pygame.draw.rect(background,purple,box,10)
# 게임창 이름 설정
pygame.display.set_caption("PYGAME Example")
background_set()
# 아하 ! 연습할 때, 게임을 종료시키는 함수가 있어야 실행이 된다.
# 아래 코드 계속 적어줘야함.
# 게임을 종료시키는 함수
while True:
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
FramePerSec.tick(FPS)
'python으로 게임 만들기 > 테트리스' 카테고리의 다른 글
[테트리스] 블록이 원하는 범위에서 랜덤으로 떨어지도록 지정 (0) | 2024.02.25 |
---|---|
[테트리스] 전체적인 코드 수정 + 타이머 & 점수판 (0) | 2024.02.25 |
[테트리스] 배경화면에 벽 맵 추가하기 (0) | 2024.02.23 |
[테트리스] 좌표값 설정 (0) | 2024.02.23 |
[테트리스] 게임 배경화면 만들기 (0) | 2024.02.23 |