小白修仙录 实战篇

本文详细介绍使用Python和Pygame库开发《外星人入侵》游戏的全过程,从创建窗口到实现复杂的游戏逻辑,如飞船控制、子弹射击、外星人移动及碰撞检测等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.外星人入侵

1.代码链接

<<alien_invasion>>

2.开始游戏项目

1).创建pygame窗口

import pygame 引入pygame模块
pygame.init() 初始化,检查模块运行是否存在问题,是pygame运行前的检查,返回一个元组,前面的数是成功的模块,后面是出现问题的模块。
pygame.display.set_mode((w,h)) 创造一个宽为w,高为h的分辨率的窗口
pygame.display.set_caption(“Alien Invasion”) 为窗口赋予一个名字
pygame.display.flip() 更新界面
pygame.event.get() 获取事件的队列

2).设置背景色

bg_color = (230,230,230) 背景颜色是一个三元组

3).创建设置类

把所有需要设置的参数合成一个设置类,作为一个模块,可以模块化,便于修改和更新,不用到处找

4).创建一个ship类

将飞船的图像显示在屏幕上
class Ship(): 创建一个ship类
def init(self,screen) 后者指定,图像绘制在哪个屏幕上
pygame.image.load(‘images/ship.bmp’) 加载图像,返回一个表示飞船的surfac
get_rect() 获取相应surface的属性rect,像处理矩形一样处理图像,可以设置图像的方位

5).重构:模块game_function

def check_events(): 将管理事件的代码移入check_event中
def update_screen 更新屏幕,这里不用import ship,因为传入的是一个对象,方法是属于对象的,因此不用import

6).驾驶飞船,左右移动

pygame.event.get() 获取事件
event.type == pygame.KEYDOWN 按键是作为KEYDOWN事件,用来离散移动
ship.moving_right 添加标志量,可以在while循环中,可KEYUP一起完成持续移动
** ship.center ** 用来存ship的坐标的小数表示,用来优化ship的位置
ship.rect.right < ship.screen_rect.right 用来限制飞船的移动范围

7).射击

setting.bullet 设置里面添加子弹的属性
创建bullet类
pygame.sprite.Group 用编组存储子弹
用空格键设置按键
bullets.remove(bullet) 删除出了屏幕的子弹
==函数必须先定义再调用,但是函数中调用函数可以不遵守这个规则

3.添加外星人

1).创建外星人

class Alien(): 设置外星人类
在设置里面添加外星人的信息

2).创建外星人编组

aliens = Group() 创建一个空的编组
aliens.draw(screen) 对空编组调用draw函数,自动绘制编组的每个元素

3).让外星人移动

在setting里面记录移动速度,在外星人类中创建移动方法,在game_function里面应用移动方法

4).设置外星人向下移动的速度和移动的方向参数

gf中的alien_update,作为主方法,实现alien的一切改变,然后再在里面定义别的方法实现别的方法

5).射杀外星人

检测子弹和外星人之间的碰撞
sprite.groupcollid(bullets,aliens,True,True) 将每颗子弹的rect和每个外星人的rect进行比较,并且返回一个字典,其中包含发生了碰撞的子弹和外星人。True为删除对应的对象

6).检测飞船碰撞

pygame.sprite.spritecollideany(ship,aliens) 检测精灵和编组的碰撞
class GameStats(): 创建一个统计信息的新类
from time import sleep 用来暂停一段时间
def check_aliens_bottom(ai_settings,stats,screen,ship,aliens,bullets):
响应外星人到达屏幕底端

7).飞船用完游戏结束

给飞船添加属性,就是留下的命的条数,当命用完了,就游戏停止

4.记分

1).添加play按钮

import pygame.font 将文本渲染到屏幕上
self.screen.fill(self.button_color,self.rect) 用来填充一个图像
self.screen.blit(self.msg_image,self.msg_image_rect) 用来绘制文本图像

2).开始游戏

play_button.rect.collidepoint(x,y) 检查一个点是否在矩形内
pygame.mouse.get_pos() 得到鼠标点击的位置

3).将play按钮切换到非活动状态

如果state.game_active为false才运行

4).隐藏光标

pygame.mouse.set_visible(False) 隐藏光标

5).记录分数

在game_stats中记录这些统计信息
遍历collisions,得到每次循环击中的外星人个数
在设置里面修改每个等级的外星人点数
round(x,n) n用来调整四舍五入的位数-1,即四舍五入小数点左侧第几位

"{:,}".format(x) 千分位分割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值