因此,这是我的第一个问题,但我有点迷失了我的代码,所以我想知道是否有人可以告诉我,为什么它崩溃。我对python相当陌生(虽然我用其他语言编写了很多代码)。所以我的游戏基本上是猫和老鼠的游戏,白色是猫,黑色是老鼠.你明白了。唯一的问题是,当我打开它时,我看到blit文本大约一秒,然后它崩溃了,我试着查看了很多代码,但是都没有用,所以如果有人帮我查看它,我会非常感激的。(我可能漏掉了一些愚蠢的东西,比如错误的缩进)。
import pygame
import random
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
Green= (0,225,0)
pygame.init()
windowSurface=pygame.display.set_mode((1000,1000))
pygame.display.set_caption("1st PyGame")
clock = pygame.time.Clock();
counter, text = 60, '60'.rjust(3)
pygame.time.set_timer(pygame.USEREVENT, 1000)
font = pygame.font.SysFont('Consolas', 30)
exit = False
xcord=250
ycord=250
xchange=0
ychange=0
xCord=750
yCord=750
xChange=0
yChange=0
while not exit:
windowSurface.fill((255,0,0))
text='Cat And Mouse !!!White=Cat(arrow-keys) Black=Mouse(wasd)!!! White Wins By Catching Black But If Black Lasts A Minute Then Black Wins!!!'
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 500))
pygame.display.flip()
time.sleep(15)
text='Get Ready Game Starts In 15 Seconds'
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 500))
clock.tick(60)
time.sleep(15)
start_ticks=pygame.time.get_ticks()
seconds=(pygame.time.get_ticks()-start_ticks)/1000
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit=True
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
xChange-=10
yChange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_RIGHT:
xChange+=10
yChange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_RIGHT:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_UP:
xChange+=0
yChange-=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_UP:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_DOWN:
xChange+=0
yChange+=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_DOWN:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_a:
xchange-=10
ychange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_a:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_d:
xchange+=10
ychange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_d:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_w:
xchange+=0
ychange-=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_w:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_s:
xchange+=0
ychange+=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_s:
xchange=0
ychange=0
crashxCord1=xCord+10
crashxCord2=xCord-10
crashyCord1=yCord+10
crashyCord2=yCord-10
for e in pygame.event.get():
if e.type==pygame.USEREVENT:
counter-=1
text=str(counter).rjust(3) if counter > 0 else 'Black Wins'
if e.type==pygame.QUIT: break
else:
if text=='Black Wins':
windowSurface.fill(0,0,0)
screen.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
time.sleep(10)
exit=True
else:
screen.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
if crashxCord1<=xcord and crashxCord2>=xcord and crashyCord1<=ycord and crashyCord2>=ycord:
text='White Wins'
windowSurface.fill(255,255,255)
screen.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
time.sleep(10)
exit=True
pygame.display.update()
xcord+=xchange
ycord+=ychange
xCord+=xChange
yCord+=yChange
windowSurface.fill(red)
pygame.draw.rect(windowSurface, black, ([xcord,ycord,20,20]))
pygame.draw.rect(windowSurface, white, ([xCord,yCord,20,20]))
clock.tick(60)
pygame.display.update()发布于 2017-11-25 04:39:18
你犯了一个很小但却是致命的错误。您忘记导入时间模块了!
import time将这一行直接放在import pygame之后,这将解决您的第一个问题。
下一个问题是,您在每个帧中导致了一个time.sleep。当你打开一个游戏窗口时,你永远不想要一个time.sleep调用。如果在这段时间内,用户与窗口进行任何交互,程序将变得没有响应,并崩溃。我创建了一个小函数,并将其替换为延迟,这样用户就可以在暂停时与屏幕交互。
这是许多小事情之一,将导致一个新的游戏开发人员撕掉你的头发!
我建议把这本书读一读:http://www.apress.com/gp/book/9781590598726
它解释了所有的游戏惯例和标准。这是我以前开始玩游戏开发的书。
你的碰撞检测很难击中。这只猫一定是在老鼠的顶端才能赢。如果这是您想要的,这是您的工作代码。如果你只想触碰一下,说句话,我就教你怎么做。
以下是代码:
import pygame
import random
import time
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
Green= (0,225,0)
pygame.init()
windowSurface=pygame.display.set_mode((1000,1000))
pygame.display.set_caption("1st PyGame")
clock = pygame.time.Clock();
counter, text = 60, '60'.rjust(3)
pygame.time.set_timer(pygame.USEREVENT, 1000)
font = pygame.font.SysFont('Consolas', 30)
exit = False
xcord=250
ycord=250
xchange=0
ychange=0
xCord=750
yCord=750
xChange=0
yChange=0
def create_delay(delay):
start = time.time()
while time.time() - start < delay:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
windowSurface.fill((255,0,0))
text='Cat And Mouse !!!White=Cat(arrow-keys) Black=Mouse(wasd)!!! White Wins By Catching Black But If Black Lasts A Minute Then Black Wins!!!'
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 500))
pygame.display.flip()
create_delay(1)
text='Get Ready Game Starts In 15 Seconds'
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 500))
clock.tick(60)
create_delay(1)
while not exit:
start_ticks=pygame.time.get_ticks()
seconds=(pygame.time.get_ticks()-start_ticks)/1000
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit=True
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
xChange-=10
yChange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_RIGHT:
xChange+=10
yChange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_RIGHT:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_UP:
xChange+=0
yChange-=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_UP:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_DOWN:
xChange+=0
yChange+=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_DOWN:
xChange=0
yChange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_a:
xchange-=10
ychange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_a:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_d:
xchange+=10
ychange+=0
elif event.type==pygame.KEYUP:
if event.key==pygame.K_d:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_w:
xchange+=0
ychange-=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_w:
xchange=0
ychange=0
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_s:
xchange+=0
ychange+=10
elif event.type==pygame.KEYUP:
if event.key==pygame.K_s:
xchange=0
ychange=0
crashxCord1=xCord+10
crashxCord2=xCord-10
crashyCord1=yCord+10
crashyCord2=yCord-10
for e in pygame.event.get():
if e.type==pygame.USEREVENT:
counter-=1
text=str(counter).rjust(3) if counter > 0 else 'Black Wins'
if e.type==pygame.QUIT: break
else:
if text=='Black Wins':
windowSurface.fill(0,0,0)
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
time.sleep(10)
exit=True
else:
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
if crashxCord1<=xcord and crashxCord2>=xcord and crashyCord1<=ycord and crashyCord2>=ycord:
text='White Wins'
windowSurface.fill(255,255,255)
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
time.sleep(10)
exit=True
pygame.display.update()
xcord+=xchange
ycord+=ychange
xCord+=xChange
yCord+=yChange
windowSurface.fill(red)
pygame.draw.rect(windowSurface, black, ([xcord,ycord,20,20]))
pygame.draw.rect(windowSurface, white, ([xCord,yCord,20,20]))
clock.tick(60)
pygame.display.update()好的,先试试吧!希望这能帮上忙,祝你玩游戏好运!
编辑
为了让用户在两个矩形触摸时获胜,我对鼠标的每个角落使用了对撞点函数。此函数检测指定的点是否位于矩形对象内。
在移动每个矩形之后,这个部分就会出现:
windowSurface.fill(red)
cat = pygame.draw.rect(windowSurface, black, ([xcord,ycord,20,20]))
mouse = pygame.draw.rect(windowSurface, white, ([xCord,yCord,20,20]))
if cat.collidepoint(xCord, yCord) or cat.collidepoint(xCord + 20, yCord) or cat.collidepoint(xCord, yCord + 20) or cat.collidepoint(xCord+20, yCord+20):
text='White Wins'
windowSurface.fill((255,255,255))
windowSurface.blit(font.render(text, True, (0, 255, 0)), (500, 100))
pygame.display.flip()
clock.tick(60)
create_delay(10)
exit=True
continue
clock.tick(60)如果你需要额外的帮助,请不要犹豫。
https://stackoverflow.com/questions/47482331
复制相似问题