pygame:简易游戏(飞机大战)

import math
import random
import pygame
import sys
# pygame初始化
pygame.init()
# 得分初始化
score = 0
# 创建surface主窗体
screen = pygame.display.set_mode((1061, 658))
pygame.display.set_caption('planeGame 1.0 author:Keven Duan') # 给主窗体命名
# 添加背景音乐
pygame.mixer.music.load('bg.mp3')
pygame.mixer.music.play(-1)
baopo = pygame.mixer.Sound("baopo.mp3")
# 导入素材图片
icon = pygame.image.load('planeicon.png')
bg = pygame.image.load("background.png")
plane = pygame.image.load("plane.png")
gameover_img = pygame.image.load('gameover.png')
new_gameover = pygame.transform.scale(gameover_img, (500, 500)) # 调整图片大小
pygame.display.set_icon(icon) # 设置图标
# 坐标的设置
#plane
planeX = 435
planeY = 450
planeStep = 0 # 飞机移动的参数
# 创建ufo类
class UFO():
def __init__(self):
self.img = pygame.image.load("ufo.png")
self.x = random.randint(0, 800)
self.y = random.randint(0, 200)
self.step = 0.1*random.randint(5, 20)
def reset(self): # 重新加载坐标点
self.x = random.randint(0, 800)
self.y = random.randint(0, 200)
# 创建子弹类
class Bulltet():
def __init__(self):
self.img = pygame.image.load("bullet.png")
self.x = planeX + 65
self.y = planeY - 10
self.step = 1
def hit(self):
for u in ufo_list:
if distance(u.x, u.y, self.x, self.y) < 30:
global score
score += 1
baopo.play()
bulltets.remove(self)
u.reset()
bulltets = []
# 创建UFO对象
ufo_list=[]
def create_ufo():
ufo_num = 8
for i in range(ufo_num):
ufo_list.append(UFO())
create_ufo()
# 两点之间距离
def distance(ux ,uy, bx, by):
a = bx - ux
b = by - uy
return math.sqrt(a * a + b * b)
# 子弹的移动
def show_belltet():
for b in bulltets:
screen.blit(b.img, (b.x, b.y))
b.y -= b.step
b.hit() # 每次显示判断是否击中
if b.y < 0:
bulltets.remove(b)
# 飞机的移动与添加
def plane_move():
global planeX
# 控制飞机横坐标
planeX -= planeStep
# 防止飞机出界
if planeX > 880:
planeX = 880
gameover()
if planeX < 0:
planeX = 0
gameover()
screen.blit(plane, (planeX, planeY)) # 添加飞机
# ufo移动与添加
def ufo_move():
global ufo_list
for e in ufo_list:
screen.blit(e.img, (e.x, e.y)) # 添加ufo
e.x += e.step
# ufo 循环运动
if e.x < 0:
e.step *= -1
e.y += 30
elif e.x > 880:
e.step *= -1
e.y += 30
elif e.y > planeY:
gameover()
ufo_list = []
create_ufo()
# 游戏失败画面
def gameover():
"""
游戏结束界面
:param planeX: 飞机的横坐标
:return: None
"""
global score, ufo_list
screen.blit(new_gameover, (290, 100))
score = 0
# 循环游戏体
while True:
screen.blit(bg, (0, 0)) #添加背景图
# 创建文字对象
ft = pygame.font.SysFont(['方正粗黑宋简体', 'microsoftsansserif'], 40)
text = ft.render(f"score:{score}", True, (0, 255, 0))
screen.blit(text, (10, 10))
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
planeStep = 3
elif event.key == pygame.K_RIGHT:
planeStep = -3
elif event.key == pygame.K_SPACE:
# 添加子弹到列表
bulltets.append(Bulltet())
if score == 100:
score = 1000
ufo_move() # ufo的添加与移动
plane_move() # 飞机的添加与移动
show_belltet() # 显示子弹
# 刷新界面
pygame.display.update()
pygame:简易游戏(飞机大战)的更多相关文章
- 关于Unity的入门游戏飞机大战的开发(下)
开发思路: 1: 修改测试模式,去掉开始按钮方便开发,加入敌机的资源2: 创建敌机 添加刚体,碰撞器组件,添加帧动画播放组件;3: 创建敌机出现的队形;4: 根据队形随机 生成我们的敌机,调整敌机的速 ...
- 关于Unity的入门游戏飞机大战的开发(上)
每个组件都是一个类的实例,要获得某个组件,要先创建一个同类型的组件类实例,然后把实例传引用过去,就可以对想要的组件实例进行操作. 做游戏一般创建一个逻辑节点,里面只管逻辑,再创建一个动画节点,里面有好 ...
- 11.pygame飞机大战游戏整体代码
主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...
- Python小游戏之 - 飞机大战美女 !
用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...
- 基于pygame实现飞机大战【面向过程】
一.简介 pygame 顶级pygame包 pygame.init - 初始化所有导入的pygame模块 pygame.quit - uninitialize所有pygame模块 pygame.err ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- python版飞机大战代码简易版
# -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * from pygame.font import ...
- Python小游戏之 - 飞机大战 !
用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...
- 微信demo小游戏:飞机大战从无到有
微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...
- 23飞机大战__pygame 快速入门
1. 使用 pygame 创建图形窗口 小节目标 游戏的初始化和退出 理解游戏中的坐标系 创建游戏主窗口 简单的游戏循环 可以将图片素材 绘制 到 游戏的窗口 上, 开发游戏之前需要先知道 如何建 ...
随机推荐
- 07.异常、多线程、Lambda 表达式
一.异常 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 异常体系 根类 java.lang.Throwable 两个直接子类 java.lang.Error 严重错误Er ...
- CGAL5.0.2 CMake过程记录
Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...
- 转载:VMware Esxi开通SSH功能
转载:https://www.cnblogs.com/dsl146/p/13739953.html ESXi 5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统.平时可以通过VM ...
- 安卓自动化查看包名和activity名的方法
1,cmd下,adb shell "dumpsys window | grep mCurrentFocus" 2,CMD中输入adb logcat ActivityManager: ...
- linux查看mac地址
1. ip addr show (ip address show .ip addr ) 查看本机ip和额外的一些信息 2.ifconfig -a 其中 HWaddr 就是mac地址 3.cat /s ...
- 关于不同平台、环境下64位int型的输入输出方式(转)
C语言 64位int 定义方式: Linux: long long Windows:__int64 C语言 64位int 输出方式: Linux: "%lld" ...
- 摘记:找到程式中 不會被執行到的 code
定义 https://en.wikipedia.org/wiki/Unreachable_codeRemove unreachable code refactoringhttps://docs.mic ...
- mfc edit只允许输入数字
1.给EDIT控件添加 EN_CHANGE 事件 2.事件中的代码如下: 1 CString strEditVidoe; 2 GetDlgItem( iId )->GetWindowText( ...
- IDEA学生认证的步骤详解
步骤详解 在上次使用学生认证的方法对jetbrains认证成功之后,咱们在IDEA这里认证一下吧! 一.点击help这里的register 如图所示: 进入这样一个界面: 然后点击左下角的的Log I ...
- Python Web开发初试,基于Flask
目录 关于web框架 Python flask使用 关于web框架 仅仅对于应用层的coder而言,web框架的使用其实就是写路由,分发路由,写输出.当然如果要安全,要测试,要写优秀的接口,那需要继续 ...