best_zyf 发表于 2024-6-26 20:52:58

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

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 =

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 == "1":
                drawkuai(kuai.x + i, kuai.y + j)

def drawzhuangtai():
    for i in range(lie):
      for j in range(hang):
            if zhuangtailist:
                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 == "1":
                myx, myy = k.x + i, k.y + j
                if not (0 <= myy <= lie - 1 and 0 <= myx <= hang - 1):
                  return True
                if zhuangtailist:
                  return True
    return False

k = kuailei(5, 0, r = blist, random.randint(0, len(r) - 1))
pinlv = 0
zhuangtailist = [ 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 == "1":
                            zhuangtailist = 1
                k = kuailei(5, 0, r : = blist, random.randint(0, len(r) - 1))
                if shifouTrue():
                  shule = True
                  continue
                rr = []
                for i in range(lie):
                  for j in range(hang):
                        if zhuangtailist == 0:
                            break
                  else:
                        rr.append(i)
                for i in rr:
                  zhuangtailist.pop(i)
                  zhuangtailist.insert(0, )
                  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()
这是我在网上找的俄罗斯方块,运行不起来,有没有大佬告诉我{:10_256:} {:10_256:} {:10_256:}
急,在线等{:10_250:} {:10_250:} {:10_250:}

FishC 发表于 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 = [ 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 == '1':
                drawkuai(kuai.x + i, kuai.y + j)

def drawzhuangtai():
    for i in range(lie):
      for j in range(hang):
            if zhuangtailist == 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 == '1':
                myx, myy = k.x + i, k.y + j
                if not (0 <= myx < hang and 0 <= myy < lie and zhuangtailist == 0):
                  return False
    return True

# 主循环(这只是个基本框架,具体实现还需要补充)
running = True
k = kuailei(0, 0, S, S)
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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 为啥这个运行不起来(我是个新手,网上找的代码)