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

本文所用到的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)

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

import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((1000,900))
pygame.display.set_caption("alien invasion")
color = (0,255,255)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.fill(color)
    pygame.display.flip()
    

事情2:

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

import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((1000,900))

#create ship 

screen_rect = screen.get_rect()
ship_image = pygame.image.load('image/ship.bmp')
ship_rect = ship_image.get_rect()
ship_rect.centerx = screen_rect.centerx
ship_rect.bottom =  screen_rect.bottom

pygame.display.set_caption("alien invasion")
color = (0,255,255)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    #这里一定注意,先执行填充颜色,再执行填充位图,很好理解,否则飞船会被颜色覆盖
    
    #先执行screen.fill(color)
    screen.fill(color)
    #后执行填充位图screen.blit(....)
    screen.blit(ship_image,ship_rect)
    pygame.display.flip()

执行结果:

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

import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((1000,900))

#create ship 

screen_rect = screen.get_rect()
ship_image = pygame.image.load('image/ship.bmp')
ship_rect = ship_image.get_rect()
#以下两句是改变飞船位置的,如果不改变位置,则使用默认位置,也就是左上角
#ship_rect.centerx = screen_rect.centerx
#ship_rect.bottom =  screen_rect.bottom

pygame.display.set_caption("alien invasion")
color = (0,255,255)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    screen.fill(color)
    screen.blit(ship_image,ship_rect)
    pygame.display.flip()

执行结果如下:

 

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

import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((1000,800))
ship = pygame.image.load('ship.bmp')
ship_rect = ship.get_rect()
pygame.display.set_caption("alien invasion")

while True:
    
    screen.fill((255,4,245))
    screen.blit(ship,ship_rect)
    pygame.display.flip()
    

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

 

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

import sys
import pygame
pygame.init()
screen = pygame.display.set_mode((1000,800))
pygame.display.set_caption("alien invasion")
photo = pygame.image.load('alien.bmp')
photo_rect = photo.get_rect()
screen_rect = screen.get_rect()

#set the ship on the center of the screen
photo_rect.centerx = screen_rect.centerx
photo_rect.bottom  = screen_rect.bottom
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    #screen.blit(photo,photo_rect)
    screen.fill((255,34,54))
    screen.blit(photo,photo_rect)
    pygame.display.flip()

执行结果:

第二部分:进阶

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

ship.py文件:

#ship.py
import pygame
class Ship():
"""创建ship"""
    def __init__(self,screen):
        self.screen = screen
        self.screen_rect = screen.get_rect()
        
        self.image = pygame.image.load('image/ship.bmp')
        self.image_rect = self.image.get_rect()
    
        self.image_rect.centerx = self.screen_rect.centerx
        self.image_rect.bottom = self.screen_rect.bottom

    def blitme(self):
         """在screen中画创建出的ship"""
        self.screen.blit(self.image,self.image_rect)


~                                                               

 下面是文件3.py

#文件3.py
import sys
import pygame
from ship import Ship
def run_game():
"""创建动画"""
    pygame.init()
    screen = pygame.display.set_mode((1000,800))
    pygame.display.set_caption("ship is come here")
    #create a example
    ship = Ship(screen)
    color = (255,255,255)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.fill(color)
        #screen.blit(ship.image,ship.image_rect)
        ship.blitme()
        pygame.display.flip()
run_game()

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

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

python3 3.py

运行结果:

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

文件ship.py

#文件ship.py
import pygame
class Ship():
    """创建ship"""
    def __init__(self,screen):
        self.screen = screen
        self.screen_rect = screen.get_rect()

        self.image = pygame.image.load('image/ship.bmp')
        self.image_rect = self.image.get_rect()

        self.image_rect.centerx = self.screen_rect.centerx
        self.image_rect.bottom = self.screen_rect.bottom

    def blitme(self):
       """在screen中画ship"""
        self.screen.blit(self.image,self.image_rect)

文件settings.py

class Settings():
    def __init__(self):
        self.color = (255,255,255)
        self.set_width = 1000
        self.set_height = 800
        self.caption = "alien ship"

文件ship_game.py

#文件ship_game.py
#它的功能是:构造动画的主程序
import sys
import pygame
from settings import Settings
from ship import Ship
def run_game():
    pygame.init()
    myset = Settings()
    screen = pygame.display.set_mode((myset.set_width,myset.set_height))
    pygame.display.set_caption(myset.caption)
    #create a example
    ship = Ship(screen)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.fill(myset.color)
        #screen.blit(ship.image,ship.image_rect)
        ship.blitme()
        pygame.display.flip()
run_game()

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

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

python3 ship_game.py

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

python ship_game.py

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发狂的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值