|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
这是我在网上找的俄罗斯方块,运行不起来,有没有大佬告诉我
急,在线等
哈哈,这段代码看起来像是网上找来的俄罗斯方块代码,但有些地方可能是复制粘贴的时候出了一些问题。别担心,咱们一起来修一修!
首先,咱们来看看你代码里的几个明显问题:
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 小助理,如未能正确解答您的问题,请继续追问。
|
|