Pygame迷宫游戏

3

好的,我在学校要做一个毕业项目,我决定尝试学习编程。开始时,我决定参加VEX课程,学习了一些基本的"C"语言。我想为我的实际项目制作一个游戏,所以我决定制作一个那种愚蠢的迷宫游戏,在游戏中你必须避免用鼠标触碰到墙壁。当我将鼠标悬停在准备按钮上时,它会加载实际的地图,但实际的游戏不会超出这个范围。这是我的代码,我很困惑,因为在加载迷宫后,当我触碰到墙壁或触碰到终点时,程序没有执行预期的操作。

import pygame
from pygame import *
pygame.init()

done = False

getready = image.load('ready.png')
backdrop = image.load('map.png')
goon = image.load('continue.png')
maze2 = image.load('map2.png')
loose = image.load('loose.png')
screen = display.set_mode((700, 500))
display.set_caption('Maze Game')
event.set_grab(1)

while done == False:
    screen.blit(getready, (0, 0))
    display.update()

    for e in event.get():
        if e.type == KEYUP:
            if e.key == K_ESCAPE:
                done = True

    if screen.get_at((mouse.get_pos())) == (0, 0, 0):
        while done == False:
            screen.blit(backdrop, (0, 0))
            display.update()

            if screen.get_at((mouse.get_pos())) == (0, 0, 0):
                print("You touched the wall!")
                done = True

            elif screen.get_at((mouse.get_pos())) == (0, 255, 0):

                screen.blit(goon, (0, 0))
                display.update()

                if e in event.get():
                    if e.type == KEYUP:
                        if e.key == K_y:

                            screen.blit(maze2, (0, 0))
                            display.update()

                            if e in event.get():
                                if e.type == KEYUP:
                                    if e.key == K_y:
                                        done = True

                            if screen.get_at((mouse.get_pos())) == (0, 0, 0):
                                screen.blit(victory, (0, 0))
                                display.update()
                                time.sleep(3)


            for e in event.get():
                if e.type == KEYUP:
                    if e.key == K_ESCAPE:
                        done = True

pygame.quit()

我知道这段代码可能很粗糙,但请记住我刚刚开始学习,欢迎任何有用的建议 :)

更新: 我把代码发给了我的表兄弟,他将它改成了这样:

 import pygame
 from pygame import *
 pygame.init()

 done = False
 done2 = False

 ref = image.load('ready.png')
 loose = image.load('loose.png')
 cntnu = image.load('continue.png')
 goon = 0
 screen = display.set_mode((700, 500))
 display.set_caption('Maze Game')
 event.set_grab(1)

 while done == False:
     screen.blit(ref, (0, 0))
     display.update()
     done2 = False

     for e in event.get():
         if e.type == KEYUP:
            if e.key == K_ESCAPE:
                 done = True           
         if screen.get_at((mouse.get_pos())) == (0, 0, 0):

             ref = image.load('map.png')
             done2 = True

         if screen.get_at((mouse.get_pos())) == (1, 0, 0):

             screen.blit(loose, (0, 0))
             display.update()
             done2 = True
             time.wait(2000)
             done = True

         if screen.get_at((mouse.get_pos())) == (0, 255, 0):
             screen.blit(cntnu, (0, 0))
             display.update()
             time.wait(3000)

 pygame.quit()

实际上问题并不在我的代码中,而是在我的Python文件夹里。我重新安装了Python(使用新的安装程序),现在它运行良好。感谢大家的帮助 :)


2
那么,你面临的真正问题是什么? - Raptor
这是一个视频,可以帮助您理解。 - Chris Merrell
我在 Linux 机器上尝试了你的代码,并且它可以处理我使用的示例图像。我认为,你的 get_pos() 函数和图像中的颜色可能存在问题。你有通过打印输出来检查过颜色值吗? - zormit
Zormit,你在 RGB 中使用了所有正确的颜色吗? - Chris Merrell
你可能还需要重新安装Pygame。(同时使用新的安装程序) - Chris Merrell
哦,抱歉,我误读了 Zormit,现在我已经搞定了。 - Chris Merrell
2个回答

0

从您含糊的问题中可以看出,您的程序没有提供足够的反馈来定位和修复错误,这可能是您需要解决的实际问题。

使用能够让您逐行运行代码并检查每个变量状态的工具,您可以轻松地找出程序为什么不按您预期的方式运行。我建议您参考StackOverflow上的这个讨论(以及其中的参考资料)了解不同的调试方法。

除了使用代码调试器外,打印调试信息也是一个好主意,您可以在程序执行期间以所需的特定级别获取更多有关记录器的信息,您可以从上面的链接中获取更多信息,或者您可以通过谷歌搜索 -- 我相信一旦您知道要寻找什么,就会找到大量的教程。


好的,我想我表述得太模糊了。问题是,在第一次循环之后,当我把鼠标放在黑点上时,程序会像我想要的那样拉出迷宫。在此之后,如果我碰到墙壁,应该显示游戏结束画面,但实际上没有。所有的代码都基于我的鼠标触摸颜色。例如,当我触摸绿色时,它应该移动到下一个迷宫。当我触摸黑色时,它应该拉起游戏结束画面。但是,在第一次触摸黑色以将光标放在正确位置之后,它会拉起地图,并且此后不会感知任何东西。这就是我的问题。 - Chris Merrell
嗨,Chris,我并不是有意冒犯你——如果听起来像那样,我很抱歉。由于某些原因,我的笔记本电脑上无法安装pygame,所以我会在另一台计算机上再试一次。 - Marat Talipov
哦,我并没有生气,我只是想澄清一下 :) - Chris Merrell

0
更新: 我解决了这个问题。原来我的代码一直都没问题,问题实际上出在我的Python库上。我重新安装了一切,现在它可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接