Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pygame_Python-屏幕立即打开和关闭_Python_Pygame - Fatal编程技术网

Pygame_Python-屏幕立即打开和关闭

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

我试图创建一个迷宫界面,左右两侧有两个刺激物闪烁。代码运行,打开接口并立即关闭。我知道这是因为循环运行不正常。因为我是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 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()