利用pygame写星球大战小游戏
前段时间学了pygame,这两天写一个星球大战小游戏,今天准备分享出来。
开发工具: python3.8、pycharm
代码注释超级详细,在这里就废话不多说了,请看代码!
# 导入相关模块及库
import pygame
import sys
import random
import math# 1.初始化界面
pygame.init()
# 设置窗口大小
size = width, height = 800, 600
screen = pygame.display.set_mode(size)
# 设置游戏名称
pygame.display.set_caption('星球大战')
# 游戏图标
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)# 3.游戏背景
bgImg = pygame.image.load('bg.png')# 4.玩家图片
playerImg = pygame.image.load('player.png')
playerX = 400 # X轴设为400
playerY = 530 # Y轴设为530
# 7.设置玩家移动速度
playerStep = 0def move_player(): # 玩家移动# 5.设置玩家移动速度global playerXplayerX += playerStep# 6.防止玩家出界if playerX > 736:playerX = 736if playerX < 0:playerX = 0# 8.敌人
# enemyImg = pygame.image.load('enemy.png')
# enemyX = random.randint(100,600) # X轴随机出现在100~600
# enemyY = random.randint(30,150) # Y轴随机出现在30~150
# enemyStep = 1 # 9.设置敌人移动速度# 11.添加多个敌人
number_of_enemies = 6 # 敌人总数class Enemy(): # 定义敌人类def __init__(self):self.img = pygame.image.load('enemy.png')self.x = random.randint(100, 500)self.y = random.randint(30, 200)self.step = random.randint(1, 4) # 敌人移动的速度# 当敌人被击中时,恢复敌人位置def reset(self):self.x = random.randint(100, 500)self.y = random.randint(30, 200)enemies = [] # 建列表保存敌人
for i in range(number_of_enemies):enemies.append(Enemy())# 18.游戏结束
is_over = False
over_font = pygame.font.Font('freesansbold.ttf',32)def game_over(): # 显示游戏结束if is_over:text = 'Game Over!'render = over_font.render(text, True, (251,1,0)) # 渲染screen.blit(render,(300,251)) # 分数显示的位置def show_enemy(): # 显示敌人# global enemyX, enemyStep, enemyYglobal is_overfor e in enemies:screen.blit(e.img, (e.x, e.y)) # 敌人出现坐标e.x += e.step # 移动if (e.x > 736 or e.x < 0):e.step *= -1e.y += 150 # 10.下沉150if e.y > 450:is_over =Trueprint('游戏结束!')enemies.clear() # 游戏结束,清除所有敌人# 16.添加分数
score = 0# 12.添加子弹
class Bullet(): # 定义子弹类def __init__(self):self.img = pygame.image.load('bullet.png')self.x = playerX + 16 # 子弹发出去和玩家的正中间的坐标一致 (64-32)/2=16self.y = playerY + 8 # 子弹发出后在玩家Y轴的基础上+8的位置出现self.step = 11 # 子弹移动的速度# 击中def hit(self):global scorefor e in enemies:if (distance(self.x, self.y, e.x, e.y) < 30): # 在30之内则击中hit_sound.play() # 被击中时播放音效bullets.remove(self) # 子弹消失e.reset() # 敌人重置score += 1print(score)bullets = [] # 建列表保存现有的子弹def show_bullets(): # 显示子弹,并移动子弹for b in bullets:screen.blit(b.img, (b.x, b.y))b.hit() # 查看敌人是否被击中b.y -= b.step # 子弹移动if b.y < 0: # 当子弹超出顶部时,子弹消失bullets.remove(b) # 删除子弹# 欧几里得距离
# 13.两点之间的距离
def distance(bx, by, ex, ey):x = bx - exy = by - eyreturn math.sqrt(x * x + y * y) # 开根号print(distance(1, 1, 4, 5))# 14.添加背景音乐
pygame.mixer.music.load('bg.wav')
pygame.mixer.music.play(-1) # 单曲循环# 15.添加击中音效
hit_sound = pygame.mixer.Sound('exp.wav')# 17.显示分数
font = pygame.font.Font('freesansbold.ttf',32)def show_score(): # 显示分数text = f'Score:{score}'score_render = font.render(text, True, (0,255,125)) # 渲染screen.blit(score_render,(11,11)) # 分数显示的位置# 2.游戏主循环
while True:screen.blit(bgImg, (0, 0)) # 3.画背景,右上角坐标是(0,0),往右是X坐标轴,往下是Y坐标轴for event in pygame.event.get(): # 事件if event.type == pygame.QUIT: # 退出pygame.quit()sys.exit()# 7.设置键盘控制飞机移动if event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT: # 向右playerStep = 5elif event.key == pygame.K_LEFT: # 向左playerStep = -5elif event.key == pygame.K_SPACE: # 按空格发射子弹print('发射子弹...')# 创建子弹b = Bullet()bullets.append(b)if event.type == pygame.KEYUP: # 向上停止不动playerStep = 0screen.blit(playerImg, (playerX, playerY)) # 4.设置玩家坐标move_player() # 玩家移动show_enemy() # 显示敌人show_bullets() # 显示子弹show_score() # 显示分数game_over() # 游戏结束pygame.display.update() # 更新
这是星球大战的简单版本,后期会陆续写新的版本并更新出来!
作者:吴常文
出处:https://blog.csdn.net/qq_41405475
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
利用pygame写星球大战小游戏相关推荐
- python版小黄脸大战(Pygame写的小游戏)
最近整理了一下我的u盘,发现了我大一python课写的期末大作业.是一个仿飞机大战的小游戏,挺有意思的.那个时候我每天晚上都在弄这个,写了两个多星期. 可执行程序下载 链接百度网盘下载链接 提取码:w ...
- 利用Pygame写游戏‘飞翔的小鸟’
上次九叔发布了一个什么是Pygame的文章,今天我们就利用Pygame来写一个小游戏 我们先来写一个开始界面吧,让它看起来形象一点,效果图如下: 想要得到这个图很简单ܻ,关键点有三个: <1&g ...
- 利用html css javascript写翻翻乐小游戏
利用html css javascript写翻翻乐小游戏 废话不多说,先看效果 代码放到文章末尾,不想看代码解释的可以直接跳过到后面直接下载 我写这个小游戏的过程 1.准备图片 我在觅元素上找了 ...
- python拼图_利用python制作拼图小游戏的全过程
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...
- 用python做一个简单的游戏,用python写一个小游戏
大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...
- python能制作游戏吗_如何用python写一个小游戏
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...
- 利用python制作拼图_利用python制作拼图小游戏的全过程
开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...
- python写游戏脚本-使用Python写一个小游戏
引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...
- python编程小游戏-使用Python写一个小游戏
引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...
- 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!
最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...
最新文章
- 北大高材生割美国韭菜被FBI通缉?本人回应予以否认
- ionic4 select 去掉确定取消按钮_word文档中的水印如何去掉,有三种方法,你最喜欢哪种?...
- 2(3).选择排序_快排(线性表)
- 如何正确使用Python临时文件
- stanford corenlp的TokensRegex
- 微软人工智能和对话平台--知识商城体验
- windows环境下ELK平台搭建
- Android 触摸手势基础 官方文档概览
- pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字
- 文艺编程 Literate Programming (原文中英文对照)
- LeetCode(821)——字符的最短距离(JavaScript)
- Linux服务器authorized_keys添加公钥后登录仍需要密码
- android jersey 上传图片,图片上传--Jersey实现RESTful接口
- linux下proc目录部分说明
- PLC控制系统设计的基本内容
- 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
- 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
- 该怎么复习安徽省考计算机专业课
- 游戏开发bug解决思路
- JavaSE方法(构造方法)与方法重载基础练习题
热门文章
- 每人都会遇到的三件事: 1.楼上传来弹珠的声,2.曾经的梦里出现过,3.马上就要睡着却突然感觉下坠...
- 哔哩哔哩我来了,see goodbye 马总!!!
- Matlab 黎卡提方程
- Android Beacon开发
- WTL自绘界面库(QsImageMgrCtrlBase)
- RK3066 实现LED闪烁的代码分析
- python爬虫GUI工具,tkinter网易云歌单歌曲下载器
- Enjoying Web Development with Tapestry下载
- 【高等数学笔记】多元向量值函数的导数与微分
- netty:Failed to initialize a channel. Closing