《python从入门到实践》pygame安装,制作小游戏

[ 准备条件: ubuntu 14桌面版, 系统自带python2.7 和python3.5 ]

第一步:安装pygame模块

                        A, 为python2.7安装pygame:   sudo apt-get install python-pygame

                        B, 为python3.5安装pygame:   

1, 先安装依赖库  ==>

 sudo apt-get install python3-dev mercurial  libsdl-image1.2-dev libsdl2-dev libsdl-ttf2.0-dev  libfreetype6-dev

[ps:   安装增强辅助功能(声音,统计图等)可选===》sudo apt-get install libsdl-mixer1.2-dev

libportmidi-dev libswscale-dev libsmpeg-dev libavformat-dev libavcodec-dev python-numpy ]

2, 手动下载pygame包然后编译安装,使用hg 命令下载文件:(下载到某目录,比如主目录)

cd

hg clone https://bitbucket.org/pygame/pygame 

cd pygame

python3  setup.py build                  #编译

sudo python3   setup.py install  #安装

验证是否安装成功:

python3

>>>import pygame 

不报错就说明 ok  !

[ps:   若系统又安装了其他版的python3.x,  则需要cd pygame里面,

把编译和安装的用的python版本换成相应的python3.x ]

第二步:使用pygame模块,创建小游戏

1,绘制窗口--不能关闭版 (创建文件:screen.py)

def start_game():
    pygame.init()#创建屏幕
    pygame.display.set_caption("标题")
    screen=pygame.display.set_mode((200,100))#设置窗口宽高
    screen.fill((255,0,0))#窗口红色背景

    while True: 
        pygame.display.flip()#出现一次

#调用静态方法
start_game()

          绘制窗口---可以关闭版(修改文件:screen.py)

import sys
import pygame
def run_game():
    pygame.init()#创建屏幕
    screen=pygame.display.set_mode((300,100))
    screen.fill(  (0,255,0)  )#背景色:绿色
    pygame.display.set_caption("标题")

    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()#关闭窗口
        pygame.display.flip()#屏幕显示一次

run_game()#调用方法
2,在窗口上画一个飞船(ship.py  ,  screen.py )

          ship.py  文件

import pygame
class Ship():
    def __init__(self,screen):
        self.screen=screen

        #加载飞船图片,获取外接矩形
        self.image=pygame.image.load(
            "/home/u16/workspace/aliens_fight/aliens/images/my.jpg")
        self.rect=self.image.get_rect()
        self.screen_rect=screen.get_rect()

        #将飞船放在底部中间
        self.rect.centerx=self.screen_rect.centerx
        self.rect.bottom=self.screen_rect.bottom

    def blitPicture(self):#画图
        self.screen.blit(self.image,self.rect)

         screen.py  文件

import pygame
import sys
from ship import Ship

def start_game():
    pygame.init() #创建屏幕
    pygame.display.set_caption("标题")
    screen=pygame.display.set_mode((300,200))#创建窗口对象:宽高大小
    screen.fill((255,0,0))#红色背景
    
    ship=Ship(screen)#创建飞船-----
    
    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
                
        pygame.display.flip()#屏幕显示一次
        ship.blitPicture()#画飞船

#调用静态方法
start_game()

3,使得飞船能左右移动(不超出窗口边缘: 键盘监听左右键,控制坐标范围 )

            改进ship.py文件, 加入move()方法: 控制飞机图片的移动

import pygame
class Ship():
    def __init__(self,screen,ai_settings):
        self.screen=screen
        self.ai_settings=ai_settings

        #加载飞船图片,获取外接矩形
        self.image=pygame.image.load(
            "/home/u16/workspace/aliens_fight/aliens/images/my.jpg")
        self.rect=self.image.get_rect()
        self.screen_rect=screen.get_rect()

        #将飞船放在底部中间
        self.rect.centerx=self.screen_rect.centerx
        self.rect.bottom=self.screen_rect.bottom
        
        '''控制飞船持续左右移动'''
        self.move_right=False;
        self.move_left=False;
        self.location=float(self.rect.centerx)
        
    '''控制飞船范围:  and 移动超界,不动'''
    def move(self):
        if self.move_right and self.rect.right<self.screen_rect.right:
            #self.rect.centerx +=1
            '''速度调整, 小数点'''
            self.location +=self.ai_settings.speed
        elif self.move_left and self.rect.left>0:
            #self.rect.centerx -=1
            self.location -=self.ai_settings.speed
        #接受移动结果
        self.rect.centerx=self.location

    def blitPicture(self):#画图
        self.screen.blit(self.image,self.rect)

        分离出配置文件为: settings.py 

class Settings():
    #保存设置的数据
    def __init__(self):
        self.screen_width=800
        self.screen_height=500
        self.bg_color=(0,255,255)
        '''设置飞船速度'''
        self.speed=1.5

         分离出事件监听的代码为: game_functions.py

import sys
import pygame

#点击退出
def check_events(ship): 
    for e in pygame.event.get():
        if e.type==pygame.QUIT:
            sys.exit()
            
            '''飞船可持续移动---左右移'''
        elif e.type==pygame.KEYDOWN:
          check_key_down(e,ship)
                
        elif e.type==pygame.KEYUP:
           check_key_up(e,ship)
           
#事件对应的---触发,响应方法
def check_key_down(e,ship):
     if e.key==pygame.K_RIGHT:#右移
        ship.move_right=True
     elif e.key==pygame.K_LEFT:#左移
        ship.move_left=True
        
def check_key_up(e,ship):
     if e.key==pygame.K_RIGHT:
        ship.move_right=False
     elif e.key==pygame.K_LEFT:
        ship.move_left=False
    
#更新窗口
def update_screen(ai_settings,screen,ship):
    screen.fill(ai_settings.bg_color)#背景色
    ship.blitPicture()#画飞船
    #使得绘图可见
    pygame.display.flip()

          修改screen.py 文件

import pygame
from settings import Settings
from ship import Ship
import game_functions as gf #封装 监听代码到game_functions.py文件

def run_game():
    #创建屏幕
    pygame.init()
    #创建Settings对象
    ai_settings =Settings()
    screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("Alien Invasion")

    #创建飞船-----
    ship=Ship(screen,ai_settings) #设置飞船速度'''

    #游戏的主循环
    while True:
        gf.check_events(ship)#监听按键
        ship.move()#改进ship 类, 使得可按某键,持续移动
        gf.update_screen(ai_settings,screen,ship)#更新屏幕

run_game()#调用方法
    运行screen.py 文件, 即可看到一个有飞机图片的窗口,可以控制飞机左右移动

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/79772536