pygame module - 半成品俄罗斯方块

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):

猜你喜欢

转载自blog.csdn.net/Alexandra_Zero/article/details/132907773