鱼C论坛

 找回密码
 立即注册
查看: 163|回复: 1

[已解决]为啥这个运行不起来(我是个新手,网上找的代码)

[复制链接]
发表于 2024-6-26 20:52:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pygame, sys, random, time

pygame.init()

kuai = 40
hang = 12
lie = 20

width, height = kuai * hang + 2 + 200, kuai * lie + 2

window = pygame.display.set_mode((width, height))
windowrect = window.get_rect()
pygame.display.set_caption("俄罗斯方块")

S = [
    ["1000",
     "1100",
     "0100",
     "0000"],

    ["0110",
     "1100",
     "0000",
     "0000"],
]

T = [
    ["0100",
     "1110",
     "0000",
     "0000"],

    ["0100",
     "1100",
     "0100",
     "0000"],

    ["1110",
     "0100",
     "0000",
     "0000"],

    ["1000",
     "1100",
     "1000",
     "0000"]
]

I = [
    ["1000",
     "1000",
     "1000",
     "1000"],

    ["1111",
     "0000",
     "0000",
     "0000"]
]

Z = [
    ["1100",
     "0110",
     "0000",
     "0000"],

    ["0100",
     "1100",
     "1000",
     "0000"]
]

O = [
    ["1100",
     "1100",
     "0000",
     "0000"]
]

L = [
    ["1100",
     "0100",
     "0100",
     "0000"],

    ["1110",
     "1000",
     "0000",
     "0000"],

    ["1000",
     "1000",
     "1100",
     "0000"],

    ["0010",
     "1110",
     "0000",
     "0000"]
]

J = [
    ["1100",
     "1000",
     "1000",
     "0000"],

    ["1000",
     "1110",
     "0000",
     "0000"],

    ["0100",
     "0100",
     "1100",
     "0000"],

    ["1110",
     "0010",
     "0000",
     "0000"]
]

blist = [L, S, J, T, I, O, Z]

fenshu = 0
font = pygame.font.Font("font/1.ttf", 50)

def drawkuai(x, y):
    pygame.draw.rect(window, (255, 80, 80), (x * kuai, y * kuai, kuai, kuai))

def wangge():
    x, y = 0, 0
    for i in range(lie + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (kuai * hang, y), 2)
        y += kuai
    x, y = 0, 0
    for i in range(hang + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (x, height), 2)
        x += kuai

def drawb(kuai):
    for i in range(4):
        for j in range(4):
            if kuai.fangkuai[kuai.zaoxing][i][j] == "1":
                drawkuai(kuai.x + i, kuai.y + j)

def drawzhuangtai():
    for i in range(lie):
        for j in range(hang):
            if zhuangtailist[i][j]:
                drawkuai(j, i)

class kuailei:
    def __init__(self, x, y, fangkuai, zaoxing):
        self.x = x
        self.y = y
        self.fangkuai = fangkuai
        self.zaoxing = zaoxing

def shifouTrue():
    for i in range(4):
        for j in range(4):
            if k.fangkuai[k.zaoxing][i][j] == "1":
                myx, myy = k.x + i, k.y + j
                if not (0 <= myy <= lie - 1 and 0 <= myx <= hang - 1):
                    return True
                if zhuangtailist[myy][myx]:
                    return True
    return False

k = kuailei(5, 0, r = blist[random.randint(0, len(blist) - 1)], random.randint(0, len(r) - 1))
pinlv = 0
zhuangtailist = [[0 for i in range(hang)] for j in range(lie)]
shule = False

while True:
    pygame.time.Clock().tick(60)

    if not shule:
        window.fill((0, 0, 0))
        drawzhuangtai()
        drawb(k)
        wangge()
        text = "分数: {}".format(fenshu)
        tt = font.render(text, True, (255, 255, 255))
        ttrect = tt.get_rect()
        ttrect.topright = windowrect.topright
        ttrect.x -= 15
        ttrect.y += 15
        window.blit(tt, ttrect)

        pinlv += 1
        if pinlv > 25:
            pinlv = 0
            k.y += 1
            if shifouTrue():
                k.y -= 1
                for i in range(4):
                    for j in range(4):
                        if k.fangkuai[k.zaoxing][i][j] == "1":
                            zhuangtailist[k.y + j][k.x + i] = 1
                k = kuailei(5, 0, r : = blist[random.randint(0, len(blist) - 1)], random.randint(0, len(r) - 1))
                if shifouTrue():
                    shule = True
                    continue
                rr = []
                for i in range(lie):
                    for j in range(hang):
                        if zhuangtailist[i][j] == 0:
                            break
                    else:
                        rr.append(i)
                for i in rr:
                    zhuangtailist.pop(i)
                    zhuangtailist.insert(0, [0 for i in range(hang)])
                    fenshu += 1
    else:
        shu = font.render("你输了!", True, (255, 0, 0))
        shurect = shu.get_rect()
        shurect.center = windowrect.center
        window.blit(shu, shurect)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a or event.key == pygame.K_LEFT:
                k.x -= 1
                if shifouTrue():
                    k.x += 1
            if event.key == pygame.K_d or event.key == pygame.K_RIGHT:
                k.x += 1
                if shifouTrue():
                    k.x -= 1
            if event.key == pygame.K_SPACE:
                k.zaoxing += 1
                if k.zaoxing == len(k.fangkuai):
                    k.zaoxing = 0
                if shifouTrue():
                    k.zaoxing -= 1
                    if k.zaoxing == -1:
                        k.zaoxing = len(k.fangkuai) - 1

    pygame.display.update()
这是我在网上找的俄罗斯方块,运行不起来,有没有大佬告诉我
急,在线等
最佳答案
2024-6-26 20:55:09
哈哈,这段代码看起来像是网上找来的俄罗斯方块代码,但有些地方可能是复制粘贴的时候出了一些问题。别担心,咱们一起来修一修!

首先,咱们来看看你代码里的几个明显问题:

1. **未定义的块形状(S、T、I、Z、O、L、J)**:这些块的定义有些地方是空的,应该包含具体的方块形状。
2. **缺少某些必要的符号(比如列表的方括号等)**。
3. **一些变量未初始化或未定义(比如`blist`,`zhuangtailist`等)**。

咱们一步步来修:
import pygame, sys, random, time

pygame.init()

kuai = 40
hang = 12
lie = 20

width, height = kuai * hang + 2 + 200, kuai * lie + 2

window = pygame.display.set_mode((width, height))
windowrect = window.get_rect()
pygame.display.set_caption("俄罗斯方块")

# 定义方块形状
S = [
    ['0000',
     '0110',
     '1100',
     '0000'],

    ['0100',
     '0110',
     '0010',
     '0000']
]

T = [
    ['0000',
     '1110',
     '0100',
     '0000'],

    ['0100',
     '0110',
     '0100',
     '0000'],

    ['0000',
     '0100',
     '1110',
     '0000'],

    ['0100',
     '1100',
     '0100',
     '0000']
]

I = [
    ['0010',
     '0010',
     '0010',
     '0010'],

    ['0000',
     '1111',
     '0000',
     '0000']
]

Z = [
    ['0000',
     '1100',
     '0110',
     '0000'],

    ['0100',
     '1100',
     '1000',
     '0000']
]

O = [
    ['0000',
     '0110',
     '0110',
     '0000']
]

L = [
    ['0000',
     '1110',
     '1000',
     '0000'],

    ['1100',
     '0100',
     '0100',
     '0000'],

    ['0000',
     '0010',
     '1110',
     '0000'],

    ['0100',
     '0100',
     '0110',
     '0000']
]

J = [
    ['0000',
     '1110',
     '0010',
     '0000'],

    ['0100',
     '0100',
     '1100',
     '0000'],

    ['0000',
     '1000',
     '1110',
     '0000'],

    ['1100',
     '0100',
     '0100',
     '0000']
]

# 初始化其他变量
blist = []
zhuangtailist = [[0 for _ in range(hang)] for _ in range(lie)]
fenshu = 0
font = pygame.font.Font("font/1.ttf", 50)

def drawkuai(x, y):
    pygame.draw.rect(window, (255, 80, 80), (x * kuai, y * kuai, kuai, kuai))

def wangge():
    x, y = 0, 0
    for i in range(lie + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (kuai * hang, y), 2)
        y += kuai
    x, y = 0, 0
    for i in range(hang + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (x, height), 2)
        x += kuai

def drawb(kuai):
    for i in range(4):
        for j in range(4):
            if kuai.zaoxing[i][j] == '1':
                drawkuai(kuai.x + i, kuai.y + j)

def drawzhuangtai():
    for i in range(lie):
        for j in range(hang):
            if zhuangtailist[i][j] == 1:
                drawkuai(j, i)

class kuailei:
    def __init__(self, x, y, fangkuai, zaoxing):
        self.x = x
        self.y = y
        self.fangkuai = fangkuai
        self.zaoxing = zaoxing

def shifouTrue():
    for i in range(4):
        for j in range(4):
            if k.zaoxing[i][j] == '1':
                myx, myy = k.x + i, k.y + j
                if not (0 <= myx < hang and 0 <= myy < lie and zhuangtailist[myy][myx] == 0):
                    return False
    return True

# 主循环(这只是个基本框架,具体实现还需要补充)
running = True
k = kuailei(0, 0, S, S[0])
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    window.fill((0, 0, 0))
    wangge()
    drawzhuangtai()
    drawb(k)
    pygame.display.flip()

    time.sleep(0.5)

pygame.quit()
sys.exit()

这是修正后的代码,添加了方块形状的定义和一些必要的初始化。你可以在此基础上继续完善,比如实现方块移动、碰撞检测、得分系统等。加油!玩代码就像拼乐高,一步步来,你会发现编程的乐趣。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-26 20:55:09 | 显示全部楼层    本楼为最佳答案   
哈哈,这段代码看起来像是网上找来的俄罗斯方块代码,但有些地方可能是复制粘贴的时候出了一些问题。别担心,咱们一起来修一修!

首先,咱们来看看你代码里的几个明显问题:

1. **未定义的块形状(S、T、I、Z、O、L、J)**:这些块的定义有些地方是空的,应该包含具体的方块形状。
2. **缺少某些必要的符号(比如列表的方括号等)**。
3. **一些变量未初始化或未定义(比如`blist`,`zhuangtailist`等)**。

咱们一步步来修:
import pygame, sys, random, time

pygame.init()

kuai = 40
hang = 12
lie = 20

width, height = kuai * hang + 2 + 200, kuai * lie + 2

window = pygame.display.set_mode((width, height))
windowrect = window.get_rect()
pygame.display.set_caption("俄罗斯方块")

# 定义方块形状
S = [
    ['0000',
     '0110',
     '1100',
     '0000'],

    ['0100',
     '0110',
     '0010',
     '0000']
]

T = [
    ['0000',
     '1110',
     '0100',
     '0000'],

    ['0100',
     '0110',
     '0100',
     '0000'],

    ['0000',
     '0100',
     '1110',
     '0000'],

    ['0100',
     '1100',
     '0100',
     '0000']
]

I = [
    ['0010',
     '0010',
     '0010',
     '0010'],

    ['0000',
     '1111',
     '0000',
     '0000']
]

Z = [
    ['0000',
     '1100',
     '0110',
     '0000'],

    ['0100',
     '1100',
     '1000',
     '0000']
]

O = [
    ['0000',
     '0110',
     '0110',
     '0000']
]

L = [
    ['0000',
     '1110',
     '1000',
     '0000'],

    ['1100',
     '0100',
     '0100',
     '0000'],

    ['0000',
     '0010',
     '1110',
     '0000'],

    ['0100',
     '0100',
     '0110',
     '0000']
]

J = [
    ['0000',
     '1110',
     '0010',
     '0000'],

    ['0100',
     '0100',
     '1100',
     '0000'],

    ['0000',
     '1000',
     '1110',
     '0000'],

    ['1100',
     '0100',
     '0100',
     '0000']
]

# 初始化其他变量
blist = []
zhuangtailist = [[0 for _ in range(hang)] for _ in range(lie)]
fenshu = 0
font = pygame.font.Font("font/1.ttf", 50)

def drawkuai(x, y):
    pygame.draw.rect(window, (255, 80, 80), (x * kuai, y * kuai, kuai, kuai))

def wangge():
    x, y = 0, 0
    for i in range(lie + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (kuai * hang, y), 2)
        y += kuai
    x, y = 0, 0
    for i in range(hang + 1):
        pygame.draw.line(window, (200, 200, 200), (x, y), (x, height), 2)
        x += kuai

def drawb(kuai):
    for i in range(4):
        for j in range(4):
            if kuai.zaoxing[i][j] == '1':
                drawkuai(kuai.x + i, kuai.y + j)

def drawzhuangtai():
    for i in range(lie):
        for j in range(hang):
            if zhuangtailist[i][j] == 1:
                drawkuai(j, i)

class kuailei:
    def __init__(self, x, y, fangkuai, zaoxing):
        self.x = x
        self.y = y
        self.fangkuai = fangkuai
        self.zaoxing = zaoxing

def shifouTrue():
    for i in range(4):
        for j in range(4):
            if k.zaoxing[i][j] == '1':
                myx, myy = k.x + i, k.y + j
                if not (0 <= myx < hang and 0 <= myy < lie and zhuangtailist[myy][myx] == 0):
                    return False
    return True

# 主循环(这只是个基本框架,具体实现还需要补充)
running = True
k = kuailei(0, 0, S, S[0])
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    window.fill((0, 0, 0))
    wangge()
    drawzhuangtai()
    drawb(k)
    pygame.display.flip()

    time.sleep(0.5)

pygame.quit()
sys.exit()

这是修正后的代码,添加了方块形状的定义和一些必要的初始化。你可以在此基础上继续完善,比如实现方块移动、碰撞检测、得分系统等。加油!玩代码就像拼乐高,一步步来,你会发现编程的乐趣。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 22:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表