python 外星人入侵游戏的开发

来源:互联网 发布:淘宝漫步者那家是正品 编辑:程序博客网 时间:2024/05/02 04:57

游戏简介:玩家控制着一艘最初出现在屏幕底部中央的飞船,玩家可以使用箭头左右移动飞船,还可以使用空格键进行射击。游戏开始时,一群外星人出现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星人都消灭干净后,将会出现新的外星人,他们一定的速度更快。只要有外星人撞到了玩家的飞船或者到达了屏幕底部,玩家就损失一艘飞船,玩家损失三艘飞船后,游戏结束。

语言:python

平台:ubuntu


1 编码前,安装pygame模块

2 开发游戏项目

2.1 首先创建一个空的pygame窗口,供后面用来绘制游戏元素(飞船和外星人),同时让这 个游戏响应用户输入,设置背景色以及加载飞船图像

2.1.1 创建pygame窗口以及响应用户输入

alien_invasion.py


# -*- coding: UTF-8 -*-

import sys

import pygame

def run_game():

"""初始化游戏并创建一个屏幕对象"""

pygame.init()

screen = pygame.display.set_mode((1200,800))

pygame.display.set_caption("Alien Invasion")

"""开始游戏的主循环"""

while True:

for event in pygame.event.get():

#if event.type == pygame.QUIT(): TypeError: 'int' object is not callable

if event.type == pygame.QUIT:

sys.exit()

"""让最近绘制的屏幕可见"""

#pygame.display.flip()


run_game()


2.1.2 设置背景色


alien_invasion.py


# -*- coding: UTF-8 -*-

import sys

import pygame

def run_game():

"""初始化游戏并创建一个屏幕对象"""

pygame.init()

screen = pygame.display.set_mode((1200,800))

pygame.display.set_caption("Alien Invasion")

#设置背景色

bg_color = (230,230,230)


"""开始游戏的主循环"""

while True:

for event in pygame.event.get():

#if event.type == pygame.QUIT(): TypeError: 'int' object is not callable

if event.type == pygame.QUIT:

sys.exit()


"""让最近绘制的屏幕可见"""

#pygame.display.flip()


run_game()

2.1.3 创建设置类,创建一个名为Settings的类,用于将所有的设置存储在同一个地方,创建Ship类,用来表示飞船的大部分行为,其中飞船的图像可从网上直接下载(最好使用bmp类型)

settings.py


class Settings():

""" 存储外星人入侵的所有设置的类"""

def __init__(self):

""" 初始化游戏的设置"""

#屏幕设置

self.screen_width = 1200

self.screen_height = 500

self.bg_color = (250,230,230)

ship.py


import pygame


class Ship():

def __init__(self,ai_settings,screen):

"""初始化飞船并设置其初始化位置"""

self.screen = screen

#加载飞船图像并获取其外接矩形

self.image = pygame.image.load("images/ship.bmp")

self.image = pygame.transform.scale(self.image, (50, 50))

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 blitme(self):

"""在指定位置绘制飞船"""

self.screen.blit(self.image,self.rect)


2.1.4 创建settings实例并使用其访问设置,同时在屏幕上绘制飞船

alien_invasion.py


# -*- coding: UTF-8 -*-


import sys


import pygame


from settings import Settings

from ship import Ship

import game_functions as gf



def run_game():

"""初始化游戏并创建一个屏幕对象"""

pygame.init()

ai_settings = Settings()

screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption("Alien Invasion")

#创建一艘飞船

ship = Ship(ai_settings,screen)

#设置背景色

bg_color = (230,230,230)

"""开始游戏的主循环"""

while True:

for event in pygame.event.get():

#if event.type == pygame.QUIT(): TypeError: 'int' object is not callable

if event.type == pygame.QUIT:

sys.exit()

#每次循环都重新绘制屏幕

screen.fill(ai_settings.bg_color)

ship.blitme()

#让最近绘制的屏幕可见

pygame.display.flip()


run_game()

效果如下图:


3 重构,创建模块game_functions,它将存储让游戏运行的函数,通过创建模块game_functions,柯避免alien_invasion.py太长,并使其逻辑更容易理解

gane_functions.py

# -*- coding: UTF-8 -*-


import sys


import pygame


def check_events(ship):

"""响应按键和鼠标事件"""

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

# -*- coding: UTF-8 -*-


import sys


import pygame


from settings import Settings

from ship import Ship

import game_functions as gf



def run_game():

"""初始化游戏并创建一个屏幕对象"""

pygame.init()

ai_settings = Settings()

screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))

pygame.display.set_caption("Alien Invasion")

#创建一艘飞船

ship = Ship(ai_settings,screen)

#设置背景色

bg_color = (230,230,230)

"""开始游戏的主循环"""

while True:

for event in pygame.event.get():

#if event.type == pygame.QUIT(): TypeError: 'int' object is not callable

if event.type == pygame.QUIT:

sys.exit()

gf.check_events(ship)

gf.update_screen(ai_settings,screen,ship)


run_game()

原创粉丝点击