main.py
import random
from pygame.locals import *
import sys
from shapes7 import *
import threading
import time
pygame.init()
lock = threading.Lock()
mutex = threading.Lock()
global tsid, speed, pps, pvs, tsnb
# 设置屏幕大小
screen = pygame.display.set_mode((600, 600))
# 颜色信息
# forum_gold = 255, 227, 132
light_yellow = 255, 222, 179
deep_dark = 41, 36, 33
# white = 255, 255, 255
# blue = 0, 0, 255
# 创建随机数
tsid = random.randint(0, 4)
# 设置字体
myFont = pygame.font.Font(None, 25)
textImage1 = myFont.render("K_LEFT to move left", False, deep_dark)
textImage2 = myFont.render("K_RIGHT to move right", False, deep_dark)
textImage3 = myFont.render("K_UP to switch the shape", False, deep_dark)
textImage4 = myFont.render("K_SPACE to restart", False, deep_dark)
# 设置公共参数
width = 6 # 图形宽度
speed = 30 # 下沉速度
pps = 0 # 竖直坐标补偿
pvs = 0 # 水平补偿坐标
color = deep_dark # 图形颜色
tsnb = 0 # T-shape号码
def keyboard_listener():
global tsnb, tsid, pvs, pps
while True:
# 定义键盘事件 K_UP, K_DOWN, K_LEFT, K_RIGHT, K_SPACE, QUIT
for event in pygame.event.get():
# if event.type in (QUIT, KEYDOWN) or event.type == KEYDOWN and event.key == K_SPACE:
if event.type == QUIT:
pygame.quit(), sys.exit()
# elif event.type == KEYDOWN and event.key == pygame.K_1 and action_flag == 0:
# sys.exit()
elif event.type == KEYDOWN and event.key == pygame.K_UP:
# lock.acquire()
if tsid in (0, 3, 4):
if tsnb >= 3:
tsnb = 0
else:
tsnb += 1
elif tsid in (2, 5, 6):
if tsnb >= 1:
tsnb = 0
else:
tsnb += 1
# lock.release()
elif event.type == KEYDOWN and event.key == pygame.K_SPACE:
lock.acquire()
pvs = pps = tsnb = 0
tsid = random.randint(0, 4)
lock.release()
elif event.type == KEYDOWN and event.key == pygame.K_LEFT:
# lock.acquire()
pvs -= 30
# lock.release()
elif event.type == KEYDOWN and event.key == pygame.K_RIGHT:
# lock.acquire()
pvs += 30
# lock.release()
def main():
# clock = pygame.time.Clock()
global pps, pvs, tsnb, tsid, speed
while True:
time.sleep(0.4)
screen.fill(light_yellow)
# screen.blit(textImage, (200, 200))
# 下沉规则
if pps < 540 - speed and ((tsid == 0 and tsnb != 0) or (tsid == 2 and tsnb == 1) or (tsid in (3, 4) and tsnb == 1)):
lock.acquire()
pps += speed
lock.release()
elif pps < 570 - speed and (tsid == tsnb == 0 or tsid == 1 or (tsid in (3, 4) and tsnb != 1)):#(0, 1, 3, 4)
lock.acquire()
pps += speed
lock.release()
elif pps < 600 -speed and tsid == 2 and tsnb == 0:
lock.acquire()
pps +=speed
lock.release()
# 绘制图形
if tsid == 0:
lock.acquire()
shape_t(screen, color, width, pps, tsnb, pvs)
lock.release()
elif tsid == 1:
lock.acquire()
shape_o(screen, color, width, pps, pvs)
lock.release()
elif tsid == 2:
lock.acquire()
shape_i(screen, color, width, pps, tsnb, pvs)
lock.release()
elif tsid == 3:
lock.acquire()
shape_l(screen, color, width, pps, tsnb, pvs)
lock.release()
elif tsid == 4:
lock.acquire()
shape_j(screen, color, width, pps, tsnb, pvs)
lock.release()
# elif tsid == 5:
# shape_z(screen, color, width, pps, tsnb, pvs)
# elif tsid == 6:
# shape_s(screen, color, width, pps, tsnb, pvs)
# 绘制文字
screen.blit(textImage1, (0, 0))
screen.blit(textImage2, (0, 30))
screen.blit(textImage3, (0, 60))
screen.blit(textImage4, (0, 90))
pygame.display.update()
time.sleep(0.4)
# 创建游戏循环线程、键盘监听线程
game_thread = threading.Thread(target=main)
keyboard_thread = threading.Thread(target=keyboard_listener)
keyboard_thread.start()
game_thread.start()
shapes7.py
import pygame
# 第一个形状
def shape_t(screen, color, width, pps, tsnb, pvs):
# 线的参数
up_p1 = 285+pvs, 0.0+pps
up_p2 = 315+pvs, 0.0+pps
lt_p2 = 255+pvs, 60.0+pps
lt_p1 = 255+pvs, 30.0+pps
rt_p1 = 345+pvs, 30.0+pps
rt_p2 = 345+pvs, 60.0+pps
dn_p1 = 285+pvs, 90.0+pps
dn_p2 = 315+pvs, 90.0+pps
md_p1 = 285+pvs, 30.0+pps
md_p2 = 315+pvs, 30.0+pps
md_p3 = 285+pvs, 60.0+pps
md_p4 = 315+pvs, 60.0+pps
if tsnb == 0:
pygame.draw.line(screen, color, up_p1, md_p3, width)
pygame.draw.line(screen, color, up_p2, md_p4, width)
pygame.draw.line(screen, color, up_p1, up_p2, width)
pygame.draw.line(screen, color, lt_p1, rt_p1, width)
pygame.draw.line(screen, color, lt_p2, rt_p2, width)
pygame.draw.line(screen, color, lt_p1, lt_p2, width)
pygame.draw.line(screen, color, rt_p1, rt_p2, width)
elif tsnb == 1:
pygame.draw.line(screen, color, up_p1, dn_p1, width)
pygame.draw.line(screen, color, up_p2, dn_p2, width)
pygame.draw.line(screen, color, up_p1, up_p2, width)
pygame.draw.line(screen, color, md_p1, rt_p1, width)
pygame.draw.line(screen, color, md_p3, rt_p2, width)
pygame.draw.line(screen, color, dn_p1, dn_p2, width)
pygame.draw.line(screen, color, rt_p1, rt_p2, width)
elif tsnb == 2:
pygame.draw.line(screen, color, dn_p1, md_p1, width)
pygame.draw.line(screen, color, dn_p2, md_p2, width)
pygame.draw.line(screen, color, dn_p1, dn_p2, width)
pygame.draw.line(screen, color, lt_p1, rt_p1, width)
pygame.draw.line(screen, color, lt_p2, rt_p2, width)
pygame.draw.line(screen, color, lt_p1, lt_p2, width)
pygame.draw.line(screen, color, rt_p1, rt_p2, width)
elif tsnb == 3:
pygame.draw.line(screen, color, up_p1, dn_p1, width)
pygame.draw.line(screen, color, up_p2, dn_p2, width)
pygame.draw.line(screen, color, up_p1, up_p2, width)
pygame.draw.line(screen, color, md_p2, lt_p1, width)
pygame.draw.line(screen, color, md_p4, lt_p2, width)
pygame.draw.line(screen, color, dn_p1, dn_p2, width)
pygame.draw.line(screen, color, lt_p1, lt_p2, width)
def shape_o(screen, color, width, pps, pvs):
p1 = 270+pvs, 0+pps
p2 = 300+pvs, 0+pps
p3 = 330+pvs, 0+pps
p4 = 270+pvs, 30+pps
p6 = 330+pvs, 30+pps
p7 = 270+pvs, 60+pps
p8 = 300+pvs, 60+pps
p9 = 330+pvs, 60+pps
pygame.draw.line(screen, color, p1, p3, width)
pygame.draw.line(screen, color, p4, p6, width)
pygame.draw.line(screen, color, p7, p9, width)
pygame.draw.line(screen, color, p1, p7, width)
pygame.draw.line(screen, color, p2, p8, width)
pygame.draw.line(screen, color, p3, p9, width)
def shape_i(screen, color, width, pps, tsnb, pvs):
p1 = 240 + pvs, 0 + pps
p2 = 270 + pvs, 0 + pps
p3 = 300 + pvs, 0 + pps
p4 = 330 + pvs, 0 + pps
p5 = 360 + pvs, 0 + pps
p6 = 240 + pvs, 30 + pps
p7 = 270 + pvs, 30 + pps
p8 = 300 + pvs, 30 + pps
p9 = 330 + pvs, 30 + pps
p10 = 360 + pvs, 30 + pps
p11 = 270 + pvs, -30 + pps
p12 = 300 + pvs, -30 + pps
p13 = 270 + pvs, 60 + pps
p14 = 300 + pvs, 60 + pps
p15 = 270 + pvs, 90 + pps
p16 = 300 + pvs, 90 + pps
if tsnb == 0:
pygame.draw.line(screen, color, p1, p6, width)
pygame.draw.line(screen, color, p2, p7, width)
pygame.draw.line(screen, color, p3, p8, width)
pygame.draw.line(screen, color, p4, p9, width)
pygame.draw.line(screen, color, p5, p10, width)
pygame.draw.line(screen, color, p1, p5, width)
pygame.draw.line(screen, color, p6, p10, width)
elif tsnb == 1:
pygame.draw.line(screen, color, p2, p3, width)
pygame.draw.line(screen, color, p7, p8, width)
pygame.draw.line(screen, color, p11, p12, width)
pygame.draw.line(screen, color, p13, p14, width)
pygame.draw.line(screen, color, p15, p16, width)
pygame.draw.line(screen, color, p11, p15, width)
pygame.draw.line(screen, color, p12, p16, width)
def shape_l(screen, color, width, pps, tsnb, pvs):
up_p1 = 270 + pvs, -30 + pps
up_p2 = 300 + pvs, -30 + pps
up_p3 = 270 + pvs, 0 + pps
up_p4 = 300 + pvs, 0 + pps
lt_p1 = 240 + pvs, 30 + pps
lt_p2 = 240 + pvs, 60 + pps
lt_p3 = 270 + pvs, 30 + pps
lt_p4 = 270 + pvs, 60 + pps
rt_p1 = 360 + pvs, 0 + pps
rt_p2 = 360 + pvs, 30 + pps
rt_p3 = 330 + pvs, 0 + pps
rt_p4 = 330 + pvs, 30 + pps
dn_p1 = 300 + pvs, 90 + pps
dn_p2 = 330 + pvs, 90 + pps
dn_p3 = 300 + pvs, 60 + pps
dn_p4 = 330 + pvs, 60 + pps
if tsnb == 0:
pygame.draw.line(screen, color, up_p3, rt_p1, width)
pygame.draw.line(screen, color, lt_p3, rt_p2, width)
pygame.draw.line(screen, color, up_p3, lt_p4, width)
pygame.draw.line(screen, color, up_p4, dn_p3, width)
pygame.draw.line(screen, color, lt_p4, dn_p3, width)
pygame.draw.line(screen, color, rt_p1, rt_p2, width)
pygame.draw.line(screen, color, rt_p3, rt_p4, width)
elif tsnb == 1:
pygame.draw.line(screen, color, up_p3, rt_p3, width)
pygame.draw.line(screen, color, lt_p3, rt_p4, width)
pygame.draw.line(screen, color, up_p4, dn_p1, width)
pygame.draw.line(screen, color, rt_p3, dn_p2, width)
pygame.draw.line(screen, color, up_p3, lt_p3, width)
pygame.draw.line(screen, color, dn_p1, dn_p2, width)
pygame.draw.line(screen, color, dn_p3, dn_p4, width)
elif tsnb == 2:
pygame.draw.line(screen, color, lt_p1, rt_p4, width)
pygame.draw.line(screen, color, lt_p2, dn_p4, width)
pygame.draw.line(screen, color, up_p4, dn_p3, width)
pygame.draw.line(screen, color, rt_p3, dn_p4, width)
pygame.draw.line(screen, color, up_p4, rt_p3, width)
pygame.draw.line(screen, color, lt_p1, lt_p2, width)
pygame.draw.line(screen, color, lt_p3, lt_p4, width)
elif tsnb == 3:
pygame.draw.line(screen, color, up_p1, lt_p4, width)
pygame.draw.line(screen, color, up_p2, dn_p3, width)
pygame.draw.line(screen, color, lt_p3, rt_p4, width)
pygame.draw.line(screen, color, lt_p4, dn_p4, width)
pygame.draw.line(screen, color, up_p1, up_p2, width)
pygame.draw.line(screen, color, up_p3, up_p4, width)
pygame.draw.line(screen, color, rt_p4, dn_p4, width)
def shape_j(screen, color, width, pps, tsnb, pvs):
up_p1 = 300 + pvs, -30 + pps
up_p2 = 330 + pvs, -30 + pps
up_p3 = 300 + pvs, 0 + pps
up_p4 = 330 + pvs, 0 + pps
lt_p1 = 240 + pvs, 0 + pps
lt_p2 = 240 + pvs, 30 + pps
lt_p3 = 270 + pvs, 0 + pps
lt_p4 = 270 + pvs, 30 + pps
rt_p1 = 360 + pvs, 30 + pps
rt_p2 = 360 + pvs, 60 + pps
rt_p3 = 330 + pvs, 30 + pps
rt_p4 = 330 + pvs, 60 + pps
dn_p1 = 270 + pvs, 90 + pps
dn_p2 = 300 + pvs, 90 + pps
dn_p3 = 270 + pvs, 60 + pps
dn_p4 = 300 + pvs, 60 + pps
if tsnb == 0:
pygame.draw.line(screen, color, up_p4, lt_p1, width)
pygame.draw.line(screen, color, lt_p2, rt_p3, width)
pygame.draw.line(screen, color, up_p4, rt_p4, width)
pygame.draw.line(screen, color, up_p3, dn_p4, width)
pygame.draw.line(screen, color, rt_p4, dn_p4, width)
pygame.draw.line(screen, color, lt_p1, lt_p2, width)
pygame.draw.line(screen, color, lt_p3, lt_p4, width)
elif tsnb == 1:
pygame.draw.line(screen, color, lt_p4, rt_p3, width)
pygame.draw.line(screen, color, lt_p3, up_p4, width)
pygame.draw.line(screen, color, lt_p3, dn_p1, width)
pygame.draw.line(screen, color, up_p3, dn_p2, width)
pygame.draw.line(screen, color, up_p4, rt_p3, width)
pygame.draw.line(screen, color, dn_p1, dn_p2, width)
pygame.draw.line(screen, color, dn_p3, dn_p4, width)
elif tsnb == 2:
pygame.draw.line(screen, color, rt_p1, lt_p4, width)
pygame.draw.line(screen, color, rt_p2, dn_p3, width)
pygame.draw.line(screen, color, lt_p3, dn_p3, width)
pygame.draw.line(screen, color, up_p3, dn_p4, width)
pygame.draw.line(screen, color, up_p3, lt_p3, width)
pygame.draw.line(screen, color, rt_p1, rt_p2, width)
pygame.draw.line(screen, color, rt_p3, rt_p4, width)
elif tsnb == 3:
pygame.draw.line(screen, color, up_p1, dn_p4, width)
pygame.draw.line(screen, color, up_p2, rt_p4, width)
pygame.draw.line(screen, color, rt_p3, lt_p4, width)
pygame.draw.line(screen, color, rt_p4, dn_p3, width)
pygame.draw.line(screen, color, up_p1, up_p2, width)
pygame.draw.line(screen, color, up_p3, up_p4, width)
pygame.draw.line(screen, color, lt_p4, dn_p3, width)
# def shape_z(screen, color, width, pps, tsnb, pvs):
# def shape_s(screen, color, width, pps, tsnb, pvs):