外星人入侵(一)

外星人入侵

开发环境

pyhton3.6+pycharm+pygame模块

开始游戏项目

  • . 创建pygame窗口以及响应用户的输入
    首先创建一个空的pygame窗口,编写基本游戏结构
    创建文件alien_invasion.py
import sys
import pygame
def run_game():
    #初始化游戏并创建一个屏幕对象
    pygame.init()
    #创建游戏窗口大小
    screen=pygame.display.set_mode((600,480))
    #创建游戏标题
    pygame.display.set_caption("外星人大战")
    #开始游戏的主循环
    while True:
        #监视键盘和鼠标的事件
        #从pyganme的事件监听器中遍历,是否有退出指令,有则退出
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
        #让最近绘制的屏幕可见,否则是看不见的
        pygame.display.flip()
if __name__ == '__main__':
    run_game()
  • 设置背景色
    完整的修改后的代码如下
import sys

import pygame

def run_game():
    #初始化游戏并创建一个屏幕对象
    pygame.init()

    #创建游戏窗口大小
    screen=pygame.display.set_mode((600,480))
    #创建游戏标题
    pygame.display.set_caption("外星人大战")

    #设置背景色
    bg_color=(230,230,230)



    #开始游戏的主循环
    while True:

        #监视键盘和鼠标的事件

        #从pyganme的事件监听器中遍历,是否有退出指令,有则退出
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()

            #背景填充颜色
            screen.fill(bg_color)
            #让最近绘制的屏幕可见,否则是看不见的
            pygame.display.flip()
if __name__ == '__main__':
    run_game()


  • 设置类的创建
    settings.py

完整的代码如下
class Settings():
    """存储《外星人入侵》的所有设置的类"""
    def __init__(self):
        """初始化游戏的设置"""
        #屏幕设置
        self.screen_width=1200
        self.screen_height=800
        self.bg_color=(230,230,230)


  • 更新alien_invasion,py

完整代码如下所示
import sys

import pygame
#导入设置类
from settings import Settings

def run_game():
    #初始化游戏并创建一个屏幕对象
    pygame.init()


    #实例化settings对象
    ai=Settings()
    #创建游戏窗口大小
    screen=pygame.display.set_mode((ai.screen_width,ai.screen_height))
    #创建游戏标题
    pygame.display.set_caption("外星人大战")


    #开始游戏的主循环
    while True:

        #监视键盘和鼠标的事件

        #从pyganme的事件监听器中遍历,是否有退出指令,有则退出
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            #背景填充颜色
            screen.fill(ai.bg_color)
            #让最近绘制的屏幕可见,否则是看不见的
            pygame.display.flip()
if __name__ == '__main__':
    run_game()

图片加载

  • 添加飞船图片
    新建文件夹images,并将文件ship.bmp图片放入其中、可在下面绘制飞船运行图上裁剪下来,改名即可
    这里写图片描述

创建ship类
ship.py

import pygame

class Ship():
    def __init__(self,screen):
        """初始化飞船并设置其初始位置"""
        self.screen=screen

        #加载飞船图像
        self.image=pygame.image.load('images/ship.bmp')
        #获取飞船图像的长宽尺寸
        self.rect=self.image.get_rect()
        #获取游戏屏幕的尺寸
        self.screen_rect=screen.get_rect()

        #将每艘新飞船放在屏幕底部的中央

        #飞船的x坐标=屏幕的x中间位置坐标
        self.rect.centerx=self.screen_rect.centerx
        #飞船的y坐标=屏幕的底部Y值
        self.rect.bottom=self.screen_rect.bottom

    def blitme(self):
        """指定位置绘制飞船"""
        #blit(图像,图像绘制的位置坐标)
        self.screen.blit(self.image,self.rect)

在屏幕上绘制飞船

  • 更新alien_nvasion.py
  • 完整代码见下
import sys

import pygame
#导入设置类
from settings import Settings
from ship import Ship
def run_game():
    #初始化游戏并创建一个屏幕对象
    pygame.init()


    #实例化settings对象
    ai=Settings()
    #创建游戏窗口大小
    screen=pygame.display.set_mode((ai.screen_width,ai.screen_height))
    #创建游戏标题
    pygame.display.set_caption("外星人大战")

    #实例化飞船对象ship,传入屏幕实参
    ship=Ship(screen)

    #开始游戏的主循环
    while True:

        #监视键盘和鼠标的事件

        #从pyganme的事件监听器中遍历,是否有退出指令,有则退出
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            #背景填充颜色
            screen.fill(ai.bg_color)
            #将飞船绘制到屏幕上
            ship.blitme()

            #让最近绘制的屏幕可见,否则是看不见的
            pygame.display.flip()
if __name__ == '__main__':
    run_game()

运行,效果如下
这里写图片描述

逻辑分离

  • 避免主程序冗长

    实现逻辑分离的功能

  • 创建game_functions.py

  • 完整代码如下,实现了一部分主程序中的代码迁移
import sys
import pygame

def check_evens():
    """响应按键和鼠标事件"""
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

def update_screen(ai_settings,screen,ship):
    """每次更新屏幕上的图像,并切换到新屏幕"""
    # 背景填充颜色
    screen.fill(ai_settings.bg_color)
    # 将飞船绘制到屏幕上
    ship.blitme()

    # 让最近绘制的屏幕可见,否则是看不见的
    pygame.display.flip()
  • 逻辑分离后的主程序alien_invasion.py如下
    完整代码
import sys

import pygame
#导入设置类
from settings import Settings
from ship import Ship
import game_functions as gf

def run_game():
    #初始化游戏并创建一个屏幕对象
    pygame.init()


    #实例化settings对象
    ai=Settings()
    #创建游戏窗口大小
    screen=pygame.display.set_mode((ai.screen_width,ai.screen_height))
    #创建游戏标题
    pygame.display.set_caption("外星人大战")

    #实例化飞船对象ship,传入屏幕实参
    ship=Ship(screen)

    #开始游戏的主循环
    while True:

        #监视键盘和鼠标的事件

        gf.check_evens()
        gf.update_screen(ai,screen,ship)
if __name__ == '__main__':
    run_game()

总结

这一部分主要实现基础的游戏结构以及图片加载,最重要的是培养一个逻辑分离的思想,没什么重要的东西,都很基础,一些东西都有注释,也就没有详细写。

猜你喜欢

转载自blog.csdn.net/jia666666/article/details/81263163