Pygame_Python-屏幕立即打开和关闭
我试图创建一个迷宫界面,左右两侧有两个刺激物闪烁。代码运行,打开接口并立即关闭。我知道这是因为循环运行不正常。因为我是Python的初学者,所以我无法真正找到bug所在的位置 有人能帮我解决这个错误吗Pygame_Python-屏幕立即打开和关闭,python,pygame,Python,Pygame,我试图创建一个迷宫界面,左右两侧有两个刺激物闪烁。代码运行,打开接口并立即关闭。我知道这是因为循环运行不正常。因为我是Python的初学者,所以我无法真正找到bug所在的位置 有人能帮我解决这个错误吗 import sys; sys.path.append('..') import pygame from flicky import FlickyManager import open_bci_v3 as bci import os import logging import time from
import sys; sys.path.append('..')
import pygame
from flicky import FlickyManager
import open_bci_v3 as bci
import os
import logging
import time
from pygame.locals import *
import numpy
from collections import *
import math
import pandas as pd
import brain
pygame.init()
display_width = 800
display_height = 800
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Cursor Control by SSVEP')
done = False
clock=pygame.time.Clock()
flickymanager = FlickyManager(screen)
# 7.5 Hz
flickymanager.add('left',8.33)
# 12. 5 Hz
flickymanager.add('right',5)
exit = False
playerImg = pygame.image.load('player.bmp')
def player(x,y):
gameDisplay.blit(playerImg, (x,y))
x = 250
y = 90
x_change = 0
def maze():
M = 10
N = 9
maze = [ 1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,1,0,1,
1,0,1,1,1,1,0,1,0,1,
1,0,1,0,0,0,0,1,0,1,
1,0,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1 ]
bx = 0
by = 0
for i in range(0, M * N):
if maze[ bx + (by * M) ] == 1:
gameDisplay.blit(blockImg,( 200 + bx * 40 , 40 + by * 40 ))
bx = bx + 1
if bx == M:
bx = 0
by = by + 1
while not exit and while done == False:
for event in pygame.event.get():
if (event.type == pygame.KEYUP) or (event.type == pygame.KEYDOWN):
if (event.key == pygame.K_ESCAPE):
done = True
if event.type == pygame.QUIT:
exit = True
done = True
screen.fill((0,0,0))
clock.tick(60) # 16 ms between frames ~ 60FPS
flickymanager.process()
flickymanager.draw()
pygame.display.flip()
if brain.headto() == 'right':
x_change = 20
elif brain.headto() == 'left':
x_change = -20
elif brain.headto() == 'stay':
x_change = 0
x += x_change
player(x,y)
maze()
pygame.display.update()
pygame.quit()
这是我在主代码中调用的另一个名为flicky.py的模块的片段:
class FlickyManager:
def __init__(self,screen):
self.flickies = []
self.screen = screen
def addFlicky(self,f):
self.flickies.append(f)
def add(self,location,frames):
w, h = self.screen.get_size()
if location == 'left':
x = 0; y = h / 2 - A/2;
elif location == 'right':
x = w - A; y = h / 2 - A/2;
elif location == 'top':
y = 0; x = w / 2 - A/2;
elif location == 'bottom':
y = h-A; x = w / 2 - A/2;
else:
raise ValueError("location %s unknown" % location)
f = Flicky(x,y,frames)
self.flickies.append(f)
def process(self):
for f in self.flickies:
f.process()
def draw(self):
for f in self.flickies:
f.draw(self.screen)
这定义了大脑模块:
def headto( ):
board.start_streaming(getsample, 1.5)
average7_5 = numpy.mean(e7_5Output)
average12_5 = numpy.mean(e12_5Output)
print average7_5
print average12_5
average = (average7_5 + average12_5)/2
print average
if 10000 < average < 30000:
return "right"
elif 30000 <= average < 60000:
return "left"
else:
return "stay"
这是迷宫布局的第二个包
import sys; sys.path.append('..')
import pygame
import open_bci_v3 as bci
import os
import logging
import time
from pygame.locals import *
import numpy
from collections import *
import math
import pandas as pd
import brain
pygame.init()
display_width = 800
display_height = 800
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Maze Game by SSVEP')
white = (255,255,255)
exit = False
playerImg = pygame.image.load('player.bmp')
blockImg = pygame.image.load('block.bmp')
def player(x,y):
gameDisplay.blit(playerImg, (x,y))
x = 250
y = 90
x_change = 0
def maze():
M = 10
N = 9
maze = [ 1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,1,0,1,
1,0,1,1,1,1,0,1,0,1,
1,0,1,0,0,0,0,1,0,1,
1,0,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1 ]
bx = 0
by = 0
for i in range(0, M * N):
if maze[ bx + (by * M) ] == 1:
gameDisplay.blit(blockImg,( 200 + bx * 40 , 40 + by * 40 ))
bx = bx + 1
if bx == M:
bx = 0
by = by + 1
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit = True
if brain.headto() == 'right':
x_change = 20
elif brain.headto() == 'left':
x_change = -20
elif brain.headto() == 'stay':
x_change = 0
x += x_change
gameDisplay.fill(white)
player(x,y)
maze()
pygame.display.update()
pygame.quit()
quit()
有谁能帮我找出如何将这两种方法结合在一起?对我来说,只有两块板的屏幕才会出现。我无法显示迷宫屏幕。任何帮助都会很好。提前谢谢 行中存在语法错误:
未退出且完成时==False:
可能是:
未退出且未完成时:
当绘制线screen.fill((0,0,0))
时,它引用的是不存在的screen
,我想您应该使用gameDisplay
brain
也从未定义,因此在调用brain.headto()
时将抛出错误
blockImg
似乎也从未定义过
这些问题导致程序在启动后立即崩溃。
要查看导致程序崩溃的任何错误,请通过IDLE或IDE运行代码,而不是运行.py文件,因为这通常会提供有关崩溃的反馈
此外,建议使用除
exit
之外的另一个变量名,因为这在python中可能有特殊含义。请检查此示例是否按预期工作。我无法用大脑
模块测试它,而只是用箭头键
import pygame as pg
import brain
from flicky import FlickyManager
def maze():
M = 10
N = 9
maze = [
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,1,0,1,
1,0,1,1,1,1,0,1,0,1,
1,0,1,0,0,0,0,1,0,1,
1,0,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
]
bx = 0
by = 0
for i in range(0, M * N):
if maze[ bx + (by * M) ] == 1:
screen.blit(blockImg,( 200 + bx * 40 , 40 + by * 40 ))
bx = bx + 1
if bx == M:
bx = 0
by = by + 1
pg.init()
screen = pg.display.set_mode((800, 800))
clock = pg.time.Clock()
white = (255, 255, 255)
playerImg = pg.image.load('player.bmp').convert()
blockImg = pg.image.load('block.bmp').convert()
flickymanager = FlickyManager(screen)
flickymanager.add('left',8.33) # 7.5 Hz
flickymanager.add('right',5) # 12. 5 Hz
x = 250
y = 90
x_change = 0
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
if brain.headto() == 'right':
x_change = 20
elif brain.headto() == 'left':
x_change = -20
elif brain.headto() == 'stay':
x_change = 0
x += x_change
flickymanager.process()
# Draw everything.
screen.fill(white)
maze()
screen.blit(playerImg, (x, y))
flickymanager.draw()
pg.display.update()
clock.tick(30)
pg.quit()
代码结尾的语句snippit关闭应用程序。它是要缩进的吗?是的。我对它进行了注释并进行了检查,这没有任何区别。@skrx我已将缩进更正,我不确定代码中的错误在哪里,因为它只是运行代码,pygame窗口闪烁并关闭。这就是为什么我把整个代码放在这里。首先,试着考虑让代码面向对象。因此,请使用类,在这些类中,您仅使用def处理特定作业。这样,您的代码将更加清晰易读,您可以更容易地找到任何bug。第二,你为什么总是一遍又一遍地画地图?这似乎有点太多了,为什么不画一次,并在需要时用更新函数画出播放器呢。代码示例仍然不完整,无法验证。你必须告诉我们什么是
flicky
和brain
。我刚刚尝试将您的代码减少到最小,并修复了查尔顿·莱恩提到的内容,现在程序似乎工作正常(flicky和brain的内容已被注释掉)。感谢您的帮助。我已经修复了语法错误并定义了blockImg
。在主要部分中,我还定义了定义屏幕的模块flicky.py。现在再次运行代码,我得到以下错误:Traceback(最近一次调用上次):文件“Ali_modified.py”,第25行,在flickymanager=flickymanager(screen)name错误:未定义名称“screen”
非常感谢修改代码和共享。我在连接OpenBCI板的情况下运行了它,发现以下错误:板实例化回溯(最近一次调用):文件“newcursor.py”,第40行,playerImg=pygame.image.load('player.bmp')name错误:名称“pygame”未定义关闭序列…
您能告诉我为什么会发生这种情况吗?噢,我刚刚将示例中的pygame
重命名为pg
(import pygame as pg
),但随后我复制并粘贴了旧的pygame.image。将行加载到示例中,但忘记了重命名它们。只需将pygame
重命名为pg
,或者将所有内容更改回pygame
。顺便说一句,您通常应该转换图像playerImg=pygame.image.load('player.bmp').convert()
或.convert\u alpha()
,因为这样可以提高blit性能。感谢您的帮助:)它成功了。屏幕如我所料弹出。但是单独运行stimulation.py时,棋盘会在定义的频率下闪烁,而现在它不会闪烁。我试图用脑波左右移动迷宫中的方块(集中到棋盘格闪烁的频率,我得到相同的脑波)。此外,添加convert()会产生unicode错误<代码>文件“/Users/divz/Documents/Alice_ky_Trail1/open_bci_v3.py”,第91行,在uuu init_uuuuuuself.print_incoming_text()文件“/Users/divz/Documents/Alice_ky_Trail1/open_bci_v3.py”中,第322;行,在打印_incoming_text c=self.ser.read()中。解码('utf-8')文件“/Users/divz/anaconda/lib/py/python2.7/encodings/utf_8.py”,第16行,在解码返回编解码器中。utf_8_解码(输入,错误,真)UnicodeDecodeError:“utf8”编解码器无法解码位置0处的字节0x99:无效的开始字节
,这很奇怪。此错误真的是由.convert()
或其他原因引起的吗?
import pygame as pg
import brain
from flicky import FlickyManager
def maze():
M = 10
N = 9
maze = [
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,1,0,1,
1,0,1,1,1,1,0,1,0,1,
1,0,1,0,0,0,0,1,0,1,
1,0,1,1,1,1,1,1,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
]
bx = 0
by = 0
for i in range(0, M * N):
if maze[ bx + (by * M) ] == 1:
screen.blit(blockImg,( 200 + bx * 40 , 40 + by * 40 ))
bx = bx + 1
if bx == M:
bx = 0
by = by + 1
pg.init()
screen = pg.display.set_mode((800, 800))
clock = pg.time.Clock()
white = (255, 255, 255)
playerImg = pg.image.load('player.bmp').convert()
blockImg = pg.image.load('block.bmp').convert()
flickymanager = FlickyManager(screen)
flickymanager.add('left',8.33) # 7.5 Hz
flickymanager.add('right',5) # 12. 5 Hz
x = 250
y = 90
x_change = 0
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
if brain.headto() == 'right':
x_change = 20
elif brain.headto() == 'left':
x_change = -20
elif brain.headto() == 'stay':
x_change = 0
x += x_change
flickymanager.process()
# Draw everything.
screen.fill(white)
maze()
screen.blit(playerImg, (x, y))
flickymanager.draw()
pg.display.update()
clock.tick(30)
pg.quit()