【发布时间】:2014-03-16 01:37:37
【问题描述】:
这快把我逼疯了,我正在开发一个电路仿真程序,每次我提出有关它的问题时它都会关闭。
我非常需要帮助,但我的问题在任何人帮助我回答之前就解决了。
不管怎样,问题出在这里: 其实我也不知道是什么问题,这段代码有问题,我也不知道是什么问题?一切看起来都很好,我找不到任何错误,但它就是无法正常工作。
在这个程序中,有电线和电源,当我将电源放在电线旁边时,我希望它有电,并且所有连接的电线也有电,但是这个程序表现出非常奇怪的行为除了我认为它会做的事情之外,做所有事情。我希望电线在有电源连接时点亮,并在没有电源时禁用。当我放置电源时它们会亮起,但当我放置更多电线时,它们都会被禁用,我似乎无法弄清楚为什么。
(深红色=通电黑色=未通电) 这是当我在电源旁边放置一根电线时:
然后我添加更多:
代码如下:
import pygame
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,480))
blocks=[]
class PowerSource(object):
def __init__(self,pos):
self.posx=pos[0]
self.posy=pos[1]
self.rect=pygame.Rect(self.posx,self.posy,32,32)
self.powered=True
def update(self):
pygame.draw.rect(screen, (255,0,0), self.rect, 0)
def repos(self):
pass
class Circuit(object):
def __init__(self,pos):
self.powered=False
self.posx=pos[0]
self.posy=pos[1]
self.rect=pygame.Rect(self.posx,self.posy,32,32)
self.topped=False
self.lefted=False
self.righted=False
self.bottomed=False
def update(self):
self.powered=False
if any(b.rect.collidepoint(self.rect.left,self.rect.top-5) for b in [b for b in blocks if b is not self]):
if b.powered==True:
self.powered=True
if any(b.rect.collidepoint(self.rect.left,self.rect.top+38) for b in [b for b in blocks if b is not self]):
if b.powered==True:
self.powered=True
if any(b.rect.collidepoint(self.rect.left-5,self.rect.top) for b in [b for b in blocks if b is not self]):
if b.powered==True:
self.powered=True
if any(b.rect.collidepoint(self.rect.right+5,self.rect.top) for b in [b for b in blocks if b is not self]):
if b.powered==True:
self.powered=True
if not self.powered:
pygame.draw.rect(screen, (0,0,0), self.rect, 0)
else:
pygame.draw.rect(screen, (200,0,0), self.rect, 0)
while True:
place=1
screen.fill((255,255,255))
mse=pygame.mouse.get_pos()
mse=((mse[0]/32)*32,(mse[1]/32)*32)
pressed=pygame.mouse.get_pressed()
if pressed==(1,0,0):
pressed='L'
elif pressed==(0,0,1):
pressed='R'
for b in blocks:
b.update()
pygame.draw.rect(screen, (255,0,0), (mse[0],mse[1],32,32), 2)
for e in pygame.event.get():
if e.type==QUIT:
exit()
key=pygame.key.get_pressed()
if key[K_SPACE]:
for b in blocks:
if b.rect.collidepoint(mse):
place=0
if place==1:
blocks.append(PowerSource(mse))
if pressed=='L':
for b in blocks:
if b.rect.collidepoint(mse):
place=0
if place==1:
blocks.append(Circuit(mse))
elif pressed=='R':
for b in blocks:
if b.rect.collidepoint(mse):
blocks.remove(b)
pygame.display.flip()
请帮帮我!我很伤心。
【问题讨论】:
-
尽量具体。您收到的确切错误消息是什么?
-
“除了我认为它会做的事情之外,做所有事情”是极其无信息的。我们无事可做。
-
您生气/不高兴的事实与此无关。您的问题将一直关闭,直到您愿意根据the guidelines 发布它。
-
发布一个非常简单的示例,清楚地展示了问题......以及问题的确切含义
-
for b in [b for b in blocks if b is not self]可以缩短为for b in blocks if b is not self。