鱼C论坛

 找回密码
 立即注册
查看: 756|回复: 6

[已解决]关于for循环运行逻辑的疑问

[复制链接]
发表于 2019-8-1 15:33:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zxr951211 于 2019-8-1 15:34 编辑
  1. import pygame

  2. pygame.init()

  3. # 创建游戏窗口 480 * 700
  4. """
  5. set_mode(resolution = (0, 0), flag = 0, depth = 0) -> Surface
  6. resolution 指定屏幕的 宽 和 高
  7. flags 指定屏幕的附加选项,如是否全屏等
  8. depth 表示颜色的位数,默认自动匹配
  9. """
  10. screen = pygame.display.set_mode((480, 700))

  11. # 绘制背景图像
  12. # 1> 加载图像数据
  13. # load(file_path)
  14. bg = pygame.image.load("./images/background.png")

  15. # 2> blit绘制图像
  16. # blit(图像,位置)
  17. screen.blit(bg, (0, 0))

  18. # 3> update 更新屏幕显示
  19. pygame.display.update()

  20. # 绘制英雄图像
  21. # 1> 加载图像数据
  22. hero = pygame.image.load("./images/me1.png")

  23. # 2> blit绘制图像
  24. screen.blit(hero, (150, 300))

  25. # 3> update 更新屏幕显示
  26. pygame.display.update()

  27. # 创建时钟对象
  28. clock = pygame.time.Clock()

  29. # 1.定义rect记录飞机的初始位置
  30. hero_rect = pygame.Rect(150, 300, 102, 126)
  31. # 游戏循环:意味着游戏的正式开始
  32. while True:

  33.     # 可以指定循环体内部的代码执行的频率
  34.     clock.tick(60)

  35.     # 监听事件
  36.     for event in pygame.event.get():

  37.         # 判断事件类型是否是退出事件
  38.         if event.type == pygame.QUIT:
  39.             print("游戏退出。。。")

  40.             # quit卸载所有模块
  41.             pygame.quit()

  42.             # exit()直接终止当前正在执行的程序
  43.             exit()

  44.     # 2.修改飞机的位置
  45.     hero_rect.y -= 1

  46.     # 判断飞机的位置
  47.     # if hero_rect.y <= -126:
  48.     if hero_rect.bottom <= 0:
  49.         hero_rect.y = 700

  50.     # 3.调用blit方法绘制图像
  51.     screen.blit(bg, (0, 0))
  52.     screen.blit(hero, hero_rect)

  53.     # 4.调用update方法更新显示
  54.     pygame.display.update()

  55. pygame.quit()
复制代码


最近在学习“飞机大战”,对这段代码while循环里面代码的逻辑比较困惑。
while循环里有个for循环在对用户输入进行监听,但是为什么for循环下方的代码依然能够执行?
按理讲不是应该从for循环出来以后才能继续执行下面的代码吗?
麻烦各位大佬解惑
最佳答案
2019-8-1 15:48:30
for 循环对下方的代码没有影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-1 15:48:30 | 显示全部楼层    本楼为最佳答案   
for 循环对下方的代码没有影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-1 21:40:26 | 显示全部楼层
zltzlt 发表于 2019-8-1 15:48
for 循环对下方的代码没有影响。

我也是这么猜测的,但是之前查资料的时候没有找到详细的那种比较正式的解释,你那里要是有能不能麻烦提供一下?书上或者哪里的解释。
而且我试了这么一个代码,类比的话最后一句hello world不是应该夹杂在abc中间输出?
  1. abc = ['a', 'b', 'c']

  2. for each in abc:
  3.     print(each)

  4. print("hello world")
复制代码

所以就比较困惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-1 21:47:21 | 显示全部楼层
zxr951211 发表于 2019-8-1 21:40
我也是这么猜测的,但是之前查资料的时候没有找到详细的那种比较正式的解释,你那里要是有能不能麻烦提供 ...

代码正常的执行顺序是从上到下,for 循环中的 print 语句和下面的 print 语句是两个独立的个体,他们之间没有任何关联,所以先打印 abc 再打印 hello world
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-1 21:56:34 | 显示全部楼层
zltzlt 发表于 2019-8-1 21:47
代码正常的执行顺序是从上到下,for 循环中的 print 语句和下面的 print 语句是两个独立的个体,他们之间 ...

我大概有点懂了,麻烦你帮我看一下我的理解对不对:
因为代码都在while循环当中,有的时候是没有捕获到监听的,所以顺序向下执行,所以实际上这段代码里面for循环和它下方的代码依然是顺序执行,但是在没有捕获到QUIT的情况下,等于说当前while里面的for已经执行完成了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-1 21:57:59 | 显示全部楼层
zxr951211 发表于 2019-8-1 21:56
我大概有点懂了,麻烦你帮我看一下我的理解对不对:
因为代码都在while循环当中,有的时候是没有捕获到 ...

你理解对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-1 23:18:18 | 显示全部楼层

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 09:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表