python+pygame的导弹追踪鼠标游戏设置和说明
1.效果图

2.注意事项,代码里有说明
3.完整的代码
#导出模块
import pygame,sys
from math import *
#设置RESIZABLE前,必须导出下面的模块,否则报错
#同事放大窗口就会发现,窗口的背景默认黑色,但游戏的屏幕大小设定是固定的,如果设置不同颜色就会发现
from pygame.locals import * #初始化
pygame.init()
#标题设置
pygame.display.set_caption("导弹追踪鼠标游戏") #如果不设置就是默认pygame window
#screen=pygame.display.set_mode((800,700),0,32) #屏幕大小等设置
#RESIZABLE,屏幕大小可调节,我比较喜欢这个,一般都加入set_mode中
screen=pygame.display.set_mode((800,700),RESIZABLE,0,32) #鼠标头的设置,大小、样式、颜色、可见
font1=pygame.font.SysFont('microsoftyaheimicrosoftyaheiui',23)
textc=font1.render('*',True,(250,0,0)) #鼠标为红色的*
#在游戏区的屏幕里,0代表原始鼠标箭头不可见False;1代表可见,为True
pygame.mouse.set_visible(0) #图片导弹引入和大小取值
#导弹图片不能太大,自己可以随意设定一张图片,放在指定的目录下
missile=pygame.image.load('missile1.png').convert_alpha()
height=missile.get_height()
width=missile.get_width() #定义导弹的相关参数
x1,y1=100,600 #导弹的初始发射位置
velocity=800 #导弹速度
time=1/1000 #每个时间片的长度 # 创建时钟对象 (可以控制游戏循环频率)
clock=pygame.time.Clock() #定义三个空的元组,用来放坐标x和y
A=()
B=()
C=() while True: #游戏的pygame的while循环
#退出设定,一般在pygame中固定在while的第一步
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit() clock.tick(300) #每秒循环300次
x,y=pygame.mouse.get_pos() #获取鼠标位置,鼠标就是需要打击的目标 #----以下是本游戏的关键,在以后类似的设置中可作为固定模块使用,可以收藏----
distance=sqrt(pow(x1-x,2)+pow(y1-y,2)) #两点距离公式
section=velocity*time #每个时间片需要移动的距离
#公式
sina=(y1-y)/distance
cosa=(x-x1)/distance
angle=atan2(y-y1,x-x1) #两点间线段的弧度值
fangle=degrees(angle) #弧度转角度 x1,y1=(x1+section*cosa,y1-section*sina) missiled=pygame.transform.rotate(missile,-(fangle))
#下面4个if为转角转弯设置
if 0<=-fangle<=90:
A=(width*cosa+x1-width,y1-height/2)
B=(A[0]+height*sina,A[1]+height*cosa) if 90<-fangle<=180:
A = (x1 - width, y1 - height/2+height*(-cosa))
B = (x1 - width+height*sina, y1 - height/2) if -90<=-fangle<0:
A = (x1 - width+missiled.get_width(), y1 - height/2+missiled.get_height()-height*cosa)
B = (A[0]+height*sina, y1 - height/2+missiled.get_height()) if -180<-fangle<-90:
A = (x1-width-height*sina, y1 - height/2+missiled.get_height())
B = (x1 - width,A[1]+height*cosa )
#----以上是关键---- #获取动态坐标
C = ((A[0] + B[0]) / 2, (A[1] + B[1]) / 2) #屏幕的fill只能放在blit的前面
screen.fill((0,25,120)) #游戏所在的活动的屏幕bg背景填充深蓝色
#注意上面设置RESIZABLE提到的区别的黑色(0,0,0) #修改bug,增加1,目的就是将mx和my由float转换成int,因为在元组中需要int格式的数据
mx=int(float(x1-width+(x1-C[0])))
my=int(float(y1-height/2+(y1-C[1])))
#图片显示及位置mx和my,(mx,my)这是一个元组
#screen.blit(missiled, (x1-width+(x1-C[0]),y1-height/2+(y1-C[1]))) #报错bug screen.blit(missiled, (mx,my)) #修改bug,增加2
#鼠标显示及位置
screen.blit(textc, (x,y)) #鼠标用一个红色*代替 #游戏显示不断更新
pygame.display.update()
python+pygame的导弹追踪鼠标游戏设置和说明的更多相关文章
- python+pygame游戏开发之使用Py2exe打包游戏
最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...
- Python模拟键盘输入和鼠标操作
Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0) #c ...
- Python traceback 模块,追踪错误
Python traceback 模块,追踪错误 import traceback try: your code except: traceback.print_exc()
- 【Unity】关于发射子弹、导弹追踪的逻辑
做个笔记,之后补上. 一.发射子弹 网上搜到的基本是两种方法: 给子弹物体添加一个力 AddForce. 子弹物体挂一个运动脚本,Update中毎帧向前运动.通过调整子弹生成点的Transform来控 ...
- 用python+pygame写贪吃蛇小游戏
因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库.了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏. 毕竟最开始的练手 ...
- Python+requests重定向和追踪
Python+requests重定向和追踪 一.什么是重定向 重定向就是网络请求被重新定个方向转到了其它位置 二.为什么要做重定向 网页重定向的情况一般有:网站调整(如网页目录结构变化).网页地址改变 ...
- python,PyAutoGUI,设置鼠标键盘自动操作
三个文件需在同一个文件夹下面,文件夹的位置无要求. 1.第一个文件,trial.py.python代码调用PyAutoGUI操作鼠标键盘,可以通过修改start_time和end_time来确定程序自 ...
- Making Games with Python & Pygame 中文翻译
Making Games with Python & Pygame 用Pygame做游戏 第1章-安装python和pygame 原文作者:Al Sweigart 翻译:bigbigli/李超 ...
- Python pygame库的应用
今天想用pygame库写一个击打外星人飞船的python程序 这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹.游戏中击杀一批飞船后进入下一关卡.每一关卡击打飞 ...
随机推荐
- deepin开机自动启动服务备忘
systemctl enable mysql.service(设置开机自启) sudo systemctl start nginx.service sudo systemctl restart ngi ...
- java单词统计
要求1:输出某个英文文本文件中26字母出现的频率,由高到低排序,并显示字母出现的百分比,精确到小数点后两位. 思路:分别设存放字母和字母出现次数的数组,遍历文件内容,将字母及出现频率按由高到低的顺序输 ...
- [CF1304F] Animal Observation - dp,单调队列
设 \(f[i][j]\) 为第 \(i\) 天在第 \(j\) 个位置放置的最大值,设 \(s[i][j]\) 是第 \(i\) 行的前缀和,则 \[ \begin{align} f[i][j] & ...
- 文本中自动出现的 ​
文本中自动出现的 ​ 所借鉴原页面地址:https://blog.csdn.net/judyc/article/details/53097142 因判断容器内字符长度来做其它处理 ...
- HTML表格显示的笔记
有时需要显示的复杂表头 如图所示 <table id="" cellpadding="0" cellspacing="0" bord ...
- JS高级---沙箱
沙箱 沙箱: 环境, 黑盒, 在一个虚拟的环境中模拟真实世界, 做实验, 实验结果和真实世界的结果是一样, 但是不会影响真实世界 全局变量 var num=10; console.log(nu ...
- ASP.NET Identity系列教程-1目录
https://www.cnblogs.com/hao-1234-1234/p/8857437.html ASP.NET Identity系列教程 13 Getting Started with Id ...
- day01_2spring3
Bean基于XML和基于注解的装配 一.Bean基于XML的装配 1.生命周期接着day01_1来讲(了解) Bean生命周期的如图所示:用红色框起来的都是我们要研究的! 如图Bean is Read ...
- 用Object.prototype.toString.call(obj)检测对象类型原因分析
用Object.prototype.toString.call(obj)检测对象类型原因分析 更新时间:2018年10月11日 08:46:33 投稿:laozhang 我要评论 在本 ...
- Oracle tnsnames.ora
安装过ORACLE的都知道,oracle安装时需要进行配置,这个配置可以在客户端的企业管理器一步一步进行,或者直接拷贝一个tnsnames.ora文件到安装目录下(c:\app\Administrat ...