用python写(飞机大战小游戏)
w'cwc下面我们进入详细教程:
一、首先我们先建一个文件夹 planewars(名字随便取):
然后用我们python中的pycharm打开这个文件,我们飞机大战的项目就在这进行
二、我们要写这个小游戏要用到pygame模
补充: Pygame是一个利用SDL库的写就的游戏库,Pygame就是Python中使用它的一个库。
1.安装pygame模块
其安装命令如下:pip install pygame
我们直接在pycharm中打开 命令行(终端) 下载(我已下载)
也可以用(cmd)来下载
完成后尝试使用pygame模块
1、⦁ 首先新建一个py文件pygame体验.py
⦁ 然后编辑如下代码
import pygame
pygame.init() # 初始化
print("游戏代码....")
pygame.quit() # 卸载模块,释放资源
如下: 可以点击我标记的那个网址看下pygame
三、补充知识(使用rect 描述飞机大战英雄机的位置)
1、Rect是用于存储矩形坐标的pygame对象,rect对象有一些虚拟属性,比如top,left,bottom,right这些是用来固定矩形的位置的,还有size,width,height,这些是描述矩形大小,宽高分别是多大。
center为矩形的中心点,其实就是关于横纵坐标的二元组,因此又有centerx,centery两个属性。此外,还有x,y。
Rect构造方法:
rect = pygame.Rect( left , top, width, height )
2、下面创建plane_rect.py文件演示
import pygame
pygame.init()
hero_rect = pygame.Rect(100, 200, 125, 300)
# 100: 表示距离x轴原点的位置
# 200: 表示距离y轴原点的位置
# 125:矩形的宽度
# 300:矩形的长度
print("英雄机矩形的x={},y={}".format(hero_rect.x, hero_rect.y))
print("英雄机矩形的宽width = {},高height = {}".format(hero_rect.width, hero_rect.height))
print("英雄机矩形的中心 centerx={}".format(hero_rect.centerx))
print("英雄机的低部 bottom={}".format(hero_rect.bottom))
print("英雄机的左部 left = {}".format(hero_rect.left))
print("英雄机的右部right = {}".format(hero_rect.right))
print("英雄机大小".format(hero_rect.size))
pygame.quit()
3、下面就来实现创建游戏窗口和游戏循环
import pygame
pygame.init()
# 1.创建游戏窗口
pygame.display.set_mode((480,650)) # 元组中480表示宽度, 650表示高度# 游戏循环
while True:pass
pygame.quit()
我们写的游戏就在模板中添加代码
运行结果:
4、我们要用到的图片(你可以直接网上找)
(将你用的图片放在 img 里 )
四、下面是我们飞机大战的源码(有注释自己看)
import random
import pygame
import time
class HeroBullet():"""英雄精灵子弹的类"""def __init__(self, x, y, screen):""":param x: x坐标:param y: y 坐标:param screen: 窗口对象"""self.x = xself.y = yself.screen = screenself.pic = pygame.image.load("img/bullet.png")#图片是英雄机的子弹图片def draw(self):"""用来画子弹"""self.screen.blit(self.pic, (self.x, self.y))self.move()def move(self):self.y -= 5class EnemyBullet():"""敌机精灵子弹类"""def __init__(self, x, y, screen):self.x = xself.y = yself.screen = screenself.pic = pygame.image.load("img/bullet1.png")#图片是敌机的子弹图片def draw(self):"""用来画子弹"""self.screen.blit(self.pic, (self.x, self.y))self.move()def move(self):self.y += 5pygame.init() # 游戏初始化
# 使用变量screen 接收返回值,代表整个窗口对象
screen = pygame.display.set_mode((480, 650)) # 元组中320表示宽度, 568表示高度
# 修改游戏名称
pygame.display.set_caption("飞机大战")
# 修改游戏图标
icon = pygame.image.load("img/icon72x72.png")#英雄机的图片
pygame.display.set_icon(icon)
# 加载背景图片
bg_img = pygame.image.load("img/background.png")#游戏背景图
# 加载英雄飞机
hero_img1 = pygame.image.load("img/hero1.png")#英雄机尾气加速的图片
hero_img2 = pygame.image.load("img/hero2.png")#英雄机尾气的图片
# 加载英雄爆炸图片
hero_bomb_list = ["img/hero_blowup_n1.png", "img/hero_blowup_n2.png", "img/hero_blowup_n3.png","img/hero_blowup_n4.png"]#英雄机逐渐被击毁的四张图片
# 加载敌机精灵
enemy_img = pygame.image.load("img/enemy1.png")#敌机图片
# 加载敌机爆炸图片
enemy_bomb_list = ["img/enemy1_down1.png", "img/enemy1_down2.png", "img/enemy1_down3.png","img/enemy1_down4.png"]#敌机逐渐被击毁的四张图片heroIndexShift = 0
# 定义英雄飞机的rect
hero_rect = pygame.rect.Rect(190, 526, 100, 124)
# 定义敌机精灵的rect
enemy_rect = pygame.rect.Rect(206, 0, 50, 56) # x= 480//2-69//2
# 敌机精灵的x,y轴坐标
enemyPlaneX = enemy_rect.x
enemyPlaneY = enemy_rect.y
direct = '左' # 定义敌机初始移动方向
# 创建游戏时钟
clock = pygame.time.Clock()
# 英雄精灵的x,y轴坐标
heroPlaneX = hero_rect.x
heroPlaneY = hero_rect.y
pygame.key.set_repeat(20, 30) # 重复按键操作
# 存放英雄机子弹的列表
HeroBiulist = []
# 存放敌机子弹列表
EnemyBiulist = []
enemy_is_bomb = False # 敌机爆炸条件
enemy_bomb_index = 0 # 敌机爆炸图片索引
hero_is_bomb = False # 英雄机爆炸条件
hero_bomb_index = 0 # 英雄机爆炸图片索引
while True: # 游戏循环 ->意味着游戏正式开始clock.tick(60) # 60表示每秒钟刷新60次# 将背景图片加载到窗口中,(0,0)表示背景图片放到原点位置screen.blit(bg_img, (0, 0))# 修改英雄飞机的y轴值hero_rect.y -= 1# 让英雄精灵飞机从底部飞进if hero_rect.bottom <= 0:hero_rect.y = 650# 将英雄的飞机绘制到窗口上if heroIndexShift == 0:screen.blit(hero_img1, (heroPlaneX, heroPlaneY))heroIndexShift += 1else:screen.blit(hero_img2, (heroPlaneX, heroPlaneY))heroIndexShift = 0# 获取所有的事件event_list = pygame.event.get()# 捕获窗口退出事件for event in event_list:if event.type == pygame.QUIT: # 加上这个模块就不卡了print("游戏结束了.......")pygame.quit() # 卸载模块exit(0) # 终止Python程序, exit(0)表示正常退出 exit(1)表示异常退出# 控制英雄精灵移动if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT: # 向左移动heroPlaneX = heroPlaneX - 5 if heroPlaneX >= 5 else 0elif event.key == pygame.K_RIGHT: # 向右移动heroPlaneX = heroPlaneX + 5 if heroPlaneX <= 375 else 380elif event.key == pygame.K_DOWN: # 向下移动heroPlaneY = heroPlaneY + 5 if heroPlaneY <= 521 else 526elif event.key == pygame.K_UP: # 向上移动heroPlaneY = heroPlaneY - 5 if heroPlaneY >= 5 else 0elif event.key == pygame.K_SPACE: # 英雄机控制发射子弹hero_bullet = HeroBullet(heroPlaneX + 50 - 11, heroPlaneY - 22, screen)HeroBiulist.append(hero_bullet)# # 绘制敌机精灵# screen.blit(enemy_img, (enemyPlaneX, enemyPlaneY))# 控制敌机精灵移动if direct == "左":enemyPlaneX -= 5if enemyPlaneX <= 0:direct = "右"elif direct == "右":enemyPlaneX += 5if enemyPlaneX >= 480 - 69:direct = "左"# 画出英雄战机的子弹每一个子弹for bullet in HeroBiulist:bullet.draw() # 绘制子弹# 让子弹到最上边的时候消失HeroBiulist.remove(bullet) if bullet.y < 0 else ""hero_bullet_rect = pygame.rect.Rect(bullet.x, bullet.y, 10, 10) # 定义英雄子弹的rectflag = hero_bullet_rect.colliderect(enemy_rect) # 检测敌机和子弹的矩形是否相交if flag:print("敌机爆炸了......")enemy_is_bomb = True # 爆炸条件为真HeroBiulist.remove(bullet)# 绘制敌机爆炸的图片if enemy_is_bomb == False:# 如果没有检测到爆炸,就绘制没有爆炸敌机的图片screen.blit(enemy_img, (enemyPlaneX, enemyPlaneY))else: # 绘制敌机爆炸if enemy_bomb_index == len(enemy_bomb_list): # 当敌机爆炸图片的下表和图片总数相同时,说明爆炸图片已经绘制结束time.sleep(0.2)exit(0) # 结束程序enemy_bomb_img = pygame.image.load(enemy_bomb_list[enemy_bomb_index]) # 加载敌机爆炸图片screen.blit(enemy_bomb_img, (enemyPlaneX, enemyPlaneY)) # 绘制敌机爆炸图片enemy_bomb_index += 1time.sleep(0.2)# 画出敌机子弹# 产是生随机数x = random.randint(0, 100)if x == 5 or x == 78:# 实例化一个子弹enemy_bullet = EnemyBullet(enemyPlaneX + 69 // 2 - 9 // 2, enemyPlaneY + 89, screen)# 产生的每一个子弹放到一个列表里EnemyBiulist.append(enemy_bullet)for bullet in EnemyBiulist:bullet.draw() # 绘制子弹EnemyBiulist.remove(bullet) if bullet.y > 650 - 89 - 21 // 2 else "" # 让子弹到最下面的时候消失enemy_bullet_rect = pygame.rect.Rect(bullet.x, bullet.y, 9, 21) # 定义敌机子弹rectflag = enemy_bullet_rect.colliderect(hero_rect) # 英雄机爆炸的条件if flag:print("英雄爆炸了.....")hero_is_bomb = True # 爆炸条件为真EnemyBiulist.remove(bullet)# 当战机爆炸的时候,移除子弹if hero_is_bomb == False:# 将英雄的飞机绘制到窗口上if heroIndexShift == 0:screen.blit(hero_img1, (heroPlaneX, heroPlaneY))heroIndexShift += 1else:screen.blit(hero_img2, (heroPlaneX, heroPlaneY))heroIndexShift = 0else:if hero_bomb_index == len(hero_bomb_list):# 当爆炸图片加载结束后time.sleep(0.3)exit()# 加载英雄机爆炸图片hero_bomb_img = pygame.image.load(hero_bomb_list[hero_bomb_index])# 绘制英雄机爆炸的图片screen.blit(hero_bomb_img,(heroPlaneX,heroPlaneY))hero_bomb_index += 1time.sleep(0.2)pygame.display.update()
运行结果:
就到这吧!
用python写(飞机大战小游戏)相关推荐
- 【python】飞机大战小游戏练习
飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...
- Python实现飞机大战小游戏,详解每一行代码【不收藏都对不起我】
一.模块 1. 利用 pip 安装 pygame 模块 Windows系统下的安装参考如下文章: https://blog.csdn.net/qq_38721302/article/details/8 ...
- Python实现飞机大战小游戏,详解每一行代码!
一.模块 1. 利用 pip 安装 pygame 模块 Windows系统下的安装参考如下文章: https://blog.csdn.net/qq_38721302/article/details/8 ...
- pygame为游戏添加背景_用 Python 制作飞机大战小游戏
这这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思路是通过方向键来控制飞机的左右移动射击飞船.先来看下最后的效果为了新手也能完成,本文记录了编写的全部流程,也就是每次修改的代码 ...
- 基于python的毕业论文-基于python的飞机大战小游戏毕业论文设计和代码
python 飞机大战 论文 计说明: 完成敌机发射子弹功能(注意:子弹不是连发.移动速度不要太快) 实现敌机子弹和玩家飞机的碰撞检测实现敌机子弹和玩家飞机的碰撞检测 为消失的飞机添加爆炸效果为消失的 ...
- 基于python的游戏设计与实现-基于python的飞机大战小游戏毕业论文设计和代码
python 飞机大战 论文 计说明: 完成敌机发射子弹功能(注意:子弹不是连发.移动速度不要太快) 实现敌机子弹和玩家飞机的碰撞检测实现敌机子弹和玩家飞机的碰撞检测 为消失的飞机添加爆炸效果为消失的 ...
- C语言写飞机大战小游戏(有音乐背景和图片)
大家好 , 我是逼哥 , 记得每天好好学习 , 天天向上 , 尤其是大学生 . 不要荒废学业. 首先说明 , 我使用的开发环境是 vs2017 , 有些函数方法可能不通用 ,大家可以百度下其他方法 ...
- python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...
怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...
- c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf
500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...
- python小游戏——飞机大战小游戏(附源码)
写在前面的一些P话: 大家之前用python编写过飞机大战的部分代码, 只能够展示英雄飞机,背景,敌机和发射子弹, 今天把背景音乐,击毁敌机,爆炸特效,得分等等相关功能一并加入进来, 代码有点长,三百 ...
最新文章
- iMeta | 宏基因组生物信息期刊-创刊背景和简介
- mini-caffe
- linux导出路径path,Linux kernel 绝对路径之d_path篇【转】
- Vs定义超大数组时,stack OverFlow的解决方法
- python集合加个逗号_8.Python集合与字符串
- 转载:【opencv入门教程之一】:配置
- HDU Problem - 1455 Sticks
- 多态_月隐学python第18课
- 线性基——数集压缩自动机
- Redraiment猜想----米勒拉宾+分块打表
- 生物信息学主要研究方向
- 2022年中青杯B题数学建模文档及程序-三孩生育数学建模
- CentOS7:Ruby安装
- QAC静态测试配置及使用教程
- linux文件扫描并打印,Linux办公一条龙—Linux中扫描、打印的实现
- c语言两个字母如何比较,c如何比较两个字符 C语言中怎么判断两个字符相同
- 关于U盘存储大量小容量文件速度慢的解释(摘抄)
- 小谈 - web模仿手机打电话与正则表达式
- AutoCAD 2010中文版从入门与精通视频教程
- 双线双路网络路由设置
热门文章
- OpenCL 平台模型 - 执行模型 - 内存模型 - 编程模型
- idea crlf是什么意思
- 计算机教学反思杂文,学无止境_教学反思_教学随笔
- 小米笔记本适合计算机专业吗,小米电脑笔记本好吗应该选哪个,小米入手使用感受...
- python 傅立叶函数_python-如何从图像中去除高频内容以进行傅立叶逆变换
- 水面无人艇局部危险避障算法研究 第1章	绪论
- 电子和计算机工程密歇根大学,美国密歇根大学迪尔本校区电子与计算机工程系主任 Yi Lu Murphey教授来我校进行学术交流并作学术报告...
- 二维火:智能餐饮云端互联是如何实现的?
- 3 - 分布式系统的流量防卫兵:Sentinel
- 转:人的认识如何自我超越