当前位置:   article > 正文

python3 用pygame 简单建一个飞船模型_ship.bmp

ship.bmp

本文所用到的ship.bmp和alien.bmp的下载   链接: https://pan.baidu.com/s/1Dn5yaQGZLIsN0BohM8PzoA  密码: 38ie

第一部分:认识pygame的简单的一些函数,利用命令简单地构造画面

我用我个人的理解逐渐剖析如何在python3中建一个窗口,里面放置一个飞船。

首先我们先来分析一些事情:

 事情1:用python3,创建游戏窗口需要以下代码:

       导入pygame,就是执行import pygame

       导入sys,就是执行import sys,这个主要是一会调用sys.exit()结束游戏用的

       首先是执行pygame.init()    这个语句会初始化pygame,使得pygame可用,里面初始化了很多组建,大约9个以内,具体什么也忘记了

       其次是设置窗口大小,执行pygame.display.set_mode((1000,800)),这个执行完毕后,以后入职建立无限循环,那么就可以把它画进去。

       然后值设置窗口说明,执行pygame.display.set_caption("some caption like.....")

       如果要设置窗口的背景颜色,那么还需要定义一个颜色,例如(255,0,255)

      接下来建立一个无限循环,就可以画出刚才定义好的窗口,代码如下:

  1. import sys
  2. import pygame
  3. pygame.init()
  4. screen = pygame.display.set_mode((1000,900))
  5. pygame.display.set_caption("alien invasion")
  6. color = (0,255,255)
  7. while True:
  8. for event in pygame.event.get():
  9. if event.type == pygame.QUIT:
  10. sys.exit()
  11. screen.fill(color)
  12. pygame.display.flip()

事情2:

画一个飞船,并且显示在事情1定义的screen中:

  1. import sys
  2. import pygame
  3. pygame.init()
  4. screen = pygame.display.set_mode((1000,900))
  5. #create ship
  6. screen_rect = screen.get_rect()
  7. ship_image = pygame.image.load('image/ship.bmp')
  8. ship_rect = ship_image.get_rect()
  9. ship_rect.centerx = screen_rect.centerx
  10. ship_rect.bottom = screen_rect.bottom
  11. pygame.display.set_caption("alien invasion")
  12. color = (0,255,255)
  13. while True:
  14. for event in pygame.event.get():
  15. if event.type == pygame.QUIT:
  16. sys.exit()
  17. #这里一定注意,先执行填充颜色,再执行填充位图,很好理解,否则飞船会被颜色覆盖
  18. #先执行screen.fill(color)
  19. screen.fill(color)
  20. #后执行填充位图screen.blit(....)
  21. screen.blit(ship_image,ship_rect)
  22. pygame.display.flip()

执行结果:

其实,代码可以简写为如下形式:

  1. import sys
  2. import pygame
  3. pygame.init()
  4. screen = pygame.display.set_mode((1000,900))
  5. #create ship
  6. screen_rect = screen.get_rect()
  7. ship_image = pygame.image.load('image/ship.bmp')
  8. ship_rect = ship_image.get_rect()
  9. #以下两句是改变飞船位置的,如果不改变位置,则使用默认位置,也就是左上角
  10. #ship_rect.centerx = screen_rect.centerx
  11. #ship_rect.bottom = screen_rect.bottom
  12. pygame.display.set_caption("alien invasion")
  13. color = (0,255,255)
  14. while True:
  15. for event in pygame.event.get():
  16. if event.type == pygame.QUIT:
  17. sys.exit()
  18. screen.fill(color)
  19. screen.blit(ship_image,ship_rect)
  20. pygame.display.flip()

执行结果如下:

 

更简单的情况,画一个飞船,直接传给screen去显示:

  1. import sys
  2. import pygame
  3. pygame.init()
  4. screen = pygame.display.set_mode((1000,800))
  5. ship = pygame.image.load('ship.bmp')
  6. ship_rect = ship.get_rect()
  7. pygame.display.set_caption("alien invasion")
  8. while True:
  9. screen.fill((255,4,245))
  10. screen.blit(ship,ship_rect)
  11. pygame.display.flip()

个人看法:在一个screen内建ship,其实只要建screen和ship,并且直接把ship的图像和位置传给screen即可。screen.blit(图片,图片位置)

 

接下来,心血来潮,再在screen底部中央画一个alien.bmp,先把alien.bmp放置在python3代码文件同一个文件夹下,然后编写如下代码:

  1. import sys
  2. import pygame
  3. pygame.init()
  4. screen = pygame.display.set_mode((1000,800))
  5. pygame.display.set_caption("alien invasion")
  6. photo = pygame.image.load('alien.bmp')
  7. photo_rect = photo.get_rect()
  8. screen_rect = screen.get_rect()
  9. #set the ship on the center of the screen
  10. photo_rect.centerx = screen_rect.centerx
  11. photo_rect.bottom = screen_rect.bottom
  12. while True:
  13. for event in pygame.event.get():
  14. if event.type == pygame.QUIT:
  15. sys.exit()
  16. #screen.blit(photo,photo_rect)
  17. screen.fill((255,34,54))
  18. screen.blit(photo,photo_rect)
  19. pygame.display.flip()

执行结果:

第二部分:进阶

接下来,我们熟悉pygame的简单构造过程后,把上述代码放在类和函数中实现,实现模块化编程,如下:

ship.py文件:

  1. #ship.py
  2. import pygame
  3. class Ship():
  4. """创建ship"""
  5. def __init__(self,screen):
  6. self.screen = screen
  7. self.screen_rect = screen.get_rect()
  8. self.image = pygame.image.load('image/ship.bmp')
  9. self.image_rect = self.image.get_rect()
  10. self.image_rect.centerx = self.screen_rect.centerx
  11. self.image_rect.bottom = self.screen_rect.bottom
  12. def blitme(self):
  13. """在screen中画创建出的ship"""
  14. self.screen.blit(self.image,self.image_rect)
  15. ~

 下面是文件3.py

  1. #文件3.py
  2. import sys
  3. import pygame
  4. from ship import Ship
  5. def run_game():
  6. """创建动画"""
  7. pygame.init()
  8. screen = pygame.display.set_mode((1000,800))
  9. pygame.display.set_caption("ship is come here")
  10. #create a example
  11. ship = Ship(screen)
  12. color = (255,255,255)
  13. while True:
  14. for event in pygame.event.get():
  15. if event.type == pygame.QUIT:
  16. sys.exit()
  17. screen.fill(color)
  18. #screen.blit(ship.image,ship.image_rect)
  19. ship.blitme()
  20. pygame.display.flip()
  21. run_game()

然后把ship.bmp,放在当前文件夹的image文件夹下 ,准备运行

在ubuntu中执行命令(在windows中执行命令是python 3.py)

python3 3.py

运行结果:

接下来,继续优化程序,把颜色,caption,screen的宽度和高度等信息单独放在一个设置文件中,那么现在我们一共有3个程序文件了,还有一个图片文件,所以要运行程序共需要4个程序,

文件ship.py

  1. #文件ship.py
  2. import pygame
  3. class Ship():
  4. """创建ship"""
  5. def __init__(self,screen):
  6. self.screen = screen
  7. self.screen_rect = screen.get_rect()
  8. self.image = pygame.image.load('image/ship.bmp')
  9. self.image_rect = self.image.get_rect()
  10. self.image_rect.centerx = self.screen_rect.centerx
  11. self.image_rect.bottom = self.screen_rect.bottom
  12. def blitme(self):
  13. """在screen中画ship"""
  14. self.screen.blit(self.image,self.image_rect)

文件settings.py

  1. class Settings():
  2. def __init__(self):
  3. self.color = (255,255,255)
  4. self.set_width = 1000
  5. self.set_height = 800
  6. self.caption = "alien ship"

文件ship_game.py

  1. #文件ship_game.py
  2. #它的功能是:构造动画的主程序
  3. import sys
  4. import pygame
  5. from settings import Settings
  6. from ship import Ship
  7. def run_game():
  8. pygame.init()
  9. myset = Settings()
  10. screen = pygame.display.set_mode((myset.set_width,myset.set_height))
  11. pygame.display.set_caption(myset.caption)
  12. #create a example
  13. ship = Ship(screen)
  14. while True:
  15. for event in pygame.event.get():
  16. if event.type == pygame.QUIT:
  17. sys.exit()
  18. screen.fill(myset.color)
  19. #screen.blit(ship.image,ship.image_rect)
  20. ship.blitme()
  21. pygame.display.flip()
  22. run_game()

文件ship.bmp放在当前文件夹image下,

接下来运行文件,ubuntu中是:

python3 ship_game.py

windows中是(注意windows中如果相对路径找不到ship.bmp文件,那就使用绝对路径):

python ship_game.py

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/101444
推荐阅读
相关标签
  

闽ICP备14008679号