我需要帮助我正在制作的程序。这是康威生命游戏的一个版本。 这个游戏现在由3个文件组成:main.py,cellBoard.py,cell.py
main.py注意实例单元格并使其更新数据,给它鼠标输入,并告诉它自己绘制(pygame表面的一个实例被赋予它,它将它处理到的单元格是实际绘制自己的东西)
cellboard.py根据大小和屏幕大小创建一个单元格列表,以便正确填充它。这是一个2D列表。当它创建单元格时,它设置它们的状态(当前是活动的)并处理它们原始表面实例的实例的实例。
cell.py包含了一个单元格可以做的所有事情:死,活,被切换,被绘制。
事实上,当我需要绘制整个棋盘时,我只需要调用cellBoard自己的draw(),它应该注意调用每个单元格的绘制。确实如此。 执行到达应该绘制单元格的点(用打印检查)并执行像素填充功能(使用for循环覆盖区域)。但实际上没有任何东西被吸引到屏幕上,或者至少看不到任何东西。
我不知道造成这种情况的原因。我多次检查代码,我甚至从头开始重写整个程序,使其更加整洁(我现在遇到了同样的问题)
造成这种情况的原因是什么?我的想法是,不知何故表面Cell得到的实例不再好了,因为发生了一些事情(它在到达每个单元格之前经过了单元板,这可能是问题吗?)
这是源代码(所有3个文件,它们都非常短且准确,因此它们应该易于阅读)http://dl.dropbox.com/u/2951174/src.zip
提前感谢任何想要帮助的人。我需要非常快速地完成这个项目,所以非常感谢你的帮助。
答案 0 :(得分:5)
快速建议的第一步:
如果他们不必下载zip文件,人们更有可能帮助你,下次只发布你怀疑不能工作的代码部分。
无论如何,问题似乎出现在你的主循环中:
#Keyboard events
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
running = 0
#Mouse events
#todo
#Grid update <------- here you update the grid and the cells are being drawn
cb.draw()
#Graphical output <------------ here you're filling the WHOLE screen with white
screen.fill(THECOLORS["white"])
pygame.display.flip()
您需要将screen.fill
电话移至cb.draw
以上,这样您就不会在细胞上画画。
同样在cell.py
你的绘图代码是A)破坏而B)坏。
不是自己设置每个像素,这很慢并且在当前状态下不能正确地绘制单元格,你也可以绘制矩形:
pygame.draw.rect(self.surface, (100, 10, 10), (self.pos[0], self.pos[1], self.size, self.size))