天天看点

Python学习笔记 Day 14 项目 -外星人入侵 - 2Day 14 项目 -外星人入侵 - 2

Day 14 项目 -外星人入侵 - 2

  • 首先是归纳Day13学习到的有关pygame的知识,用流程图方式,绘图软件:https://www.draw.io/
    Python学习笔记 Day 14 项目 -外星人入侵 - 2Day 14 项目 -外星人入侵 - 2
Python学习笔记 Day 14 项目 -外星人入侵 - 2Day 14 项目 -外星人入侵 - 2
  • 初始化窗口,包括获取句柄,获取窗口矩形
screen = pygame.display.set_mode(width, height)
	pygame.display.set_caption("Alien Invasion")

	self.image = pygame.image.load('images/ship.bmp')
	self.rect = self.image.get_rect()
	self.screen_rect = screen.get_rect()
           
  • pygame的Sprit类
    from pygame.sprite import Sprite	
    	from pygame.sprite import Group
               
    • pygame.Sprit类,即‘精灵’,可将游戏中的相关元素编组,进而同时操作编组中的所有元素,类似于创建一个列表。
    • 精灵,可以理解为会动的图片;
    • 精灵的Group()函数,当有若干精灵时,可通过Group()函数创建一个列表。每次对组内的精灵进行绘制时,直接调用Group.update()即可,而不必考虑组内每个精灵的状态。
    • 举例来说,定义一个外星人,是继承Sprite的类,创建了若干外星人后,在屏幕上一起显示,每个外星人的在屏幕上的位置都是随机的,并且要检测边界、检测冲突等等,如果不用Group,需要对每个外星人都做单独的计算更新等等:
    for alien in aliens:
            alien.update()
            screen.blit(alien.image, alien.rect)
               
    如果使用Group,在创建外星人的时候将这些外星人加入群组即可,以后每次只需要更新一次群组即可实现对所有外星人的更新,并且提供内置的冲突检测等功能。
    for alien_number in range(number_aliens_x):
    		#创建一个外星人并将其加入当前行
    		alien = Alien(ai_settings, screen)
    	aliens.add(alien)
    	#直接调用群组的update
    	aliens.update()
               
  • 响应用户输入(左右箭头移动飞船)