震惊!一小伙用python这么容易就写了个飞机大战?!【含注释】

简介: 周末闲来无事,打算写写代码,但是又不知道写啥,眼睛余光无意中扫到书架上尘封已久的pygame书籍,那干脆写个游戏试一试,要写就写经典游戏吧,毕竟难度也不是很大,开搞。

这种射击游戏相信大多数人玩的很多了,其中要素也是很容易拿捏,所以我先是去网上找了所需要的图片,控制的人物,入侵者,背景图,bgm,用ps修改修改参数,然后就是学习pygame了,简单看了看书,敲了几个例子,不就是用它的库嘛,很简单。因为代码有注释很详细,就不赘述了。


游戏人物所需的基本要素定义

import pygame
import random
import math
from pygame import mixer
# init初始化
pygame.init()
mixer.init()
# 建立画布
screen = pygame.display.set_mode((800, 620))
# 背景
background = pygame.image.load('backgroud.png')
# 设置背景音乐,最好添加绝对路径
show_sound = mixer.Sound('backgroud.wav')
show_sound.play()
# 游戏标题
pygame.display.set_caption("Space Fighting")
# 加载飞船图片
icon = pygame.image.load('transport.png')
# 修改显示窗口的图标
pygame.display.set_icon(icon)
# 玩家操控的人物创建
playerimg = pygame.image.load('transport.png')
# 玩家初始位置
playerx = 370
playery = 540
# x轴改变的距离
playerx_change = 0
# 入侵者的创建
enemyimg = []
enemyx = []
enemyy = []
# 保存入侵者每次位置改变结果
enemyx_change = []
enemyy_change = []
# 入侵者数量
number_of_enemies = 6
# 随机生成入侵者在图上的位置
for i in range(number_of_enemies):
    # 加载入侵者图片
    enemyimg.append(pygame.image.load('enemy.png'))
    # x轴上的坐标
    enemyx.append(random.randint(0, 800))
    # y轴上的坐标
    enemyy.append(random.randint(50, 150))
    # 每次移动改变的距离
    enemyx_change.append(0.5)
    enemyy_change.append(10)
# 子弹创建,加载图片
bulletimg = pygame.image.load('bullet.png')
# 初始距离
bulletx = 0
bullety = 420
# 射出的速度,y轴移动的距离
bulletx_change = 0
bullety_change = 2
# 子弹的状态
bullet_state = "ready"
# 分数记录文字字体
score_value = 0
font = pygame.font.Font('freesansbold.ttf', 32)
# 分数的位置
textx = 10
texty = 10
# 游戏结束文字字体
over_font = pygame.font.Font('freesansbold.ttf', 64)

所需要的几个函数

# 展示分数
def show_score(x, y):
    score = font.render("score :" + str(score_value), True, (255, 255, 255))
    # blit,分数粘贴在背景中
    screen.blit(score, (x, y))
# 游戏结束时GAME OVER
def game_over_text():
    over_txt = over_font.render("GAME OVER", True, (255, 255, 255))  # 文字和颜色
    # blit,将over_txt图片粘在背景图上
    screen.blit(over_txt, (200, 250))  # 展示位置
# 玩家的坐标位置
def player(x, y):
    screen.blit(playerimg, (x, y))
# 入侵者的坐标位置
def enemy(x, y, i):
    screen.blit(enemyimg[i], (x, y))
# 子弹轨迹
def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.blit(bulletimg, (x + 40, y + 10))
# 子弹轨迹与入侵者的判断
def iscollision(enemyx, enemyy, bulletx, bullety):
    # 判断计算方法
    distance = math.sqrt((math.pow(enemyx - bulletx, 2)) + (math.pow(enemyy - bullety, 2)))
    # 返回的结果
    if distance < 27:
        return True
    else:
        return False

效果

相关文章
|
1月前
|
算法 定位技术 Python
震惊!Python 图结构竟然可以这样玩?DFS&BFS 遍历技巧大公开
在 Python 编程中,图是一种重要的数据结构,而深度优先搜索(DFS)和广度优先搜索(BFS)是遍历图的两种关键算法。本文将通过定义图的数据结构、实现 DFS 和 BFS 算法,并通过具体示例展示其应用,帮助读者深入理解这两种算法。DFS 适用于寻找路径和检查图连通性,而 BFS 适用于寻找最短路径。掌握这些技巧,可以更高效地解决与图相关的复杂问题。
28 2
|
3月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
45 4
|
2月前
|
Python
【python从入门到精通】-- 第二战:注释和有关量的解释
【python从入门到精通】-- 第二战:注释和有关量的解释
53 0
|
3月前
|
网络协议 安全 网络安全
震惊!Python Socket竟能如此玩转网络通信,基础到进阶全攻略!
【9月更文挑战第12天】在网络通信中,Socket编程是连接不同应用与服务的基石。本文通过问答形式,从基础到进阶全面解析Python Socket编程。涵盖Socket的重要性、创建TCP服务器与客户端、处理并发连接及进阶话题如非阻塞Socket、IO多路复用等,帮助读者深入了解并掌握网络通信的核心技术。
137 6
|
2月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
90 0
|
3月前
|
IDE 开发工具 Python
python3代码编程规范(命名、空格、注释、代码布局、编程建议等)
该文章详细介绍了Python3的编程规范,包括命名、空格使用、注释、代码布局等方面的最佳实践,帮助提升代码的可读性和一致性。
60 0
|
4月前
|
存储 Python
【python】Python飞机大战游戏开发(源码)【独一无二】
【python】Python飞机大战游戏开发(源码)【独一无二】
|
4月前
|
Python
python中注释使用连续的单行注释 #
【8月更文挑战第1天】
58 6
|
5月前
|
开发者 Python
Python中注释用途
【7月更文挑战第28天】
71 6
|
5月前
|
开发者 Python
Python 基础语法注释
【7月更文挑战第27天】
89 6