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程序 这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹.游戏中击杀一批飞船后进入下一关卡.每一关卡击打飞 ...
随机推荐
- 反射_python
一.反射(通过字符串的形式去操作对象中的成员) 1.getattr:获取对象中的字段和方法 2.hasattr:判断对象里面是否有字段或方法 3.setattr:设置对象里面的字段或方法 4.dela ...
- [SHOI2001] 小狗散步 - 二分图匹配
考虑到每次与主人相遇之前最多只去一个景点,很容易转化为匹配问题 由于数据很小,我们不妨枚举每个相遇点间隙和每个景点,判断是否来得及,如果来得及就连边 沙雕题搞了二十来分钟,我是憨憨 #include ...
- TCL 包
包用于创建代码的可重用单元. 程序包提供特定功能的文件集合. 1.创建代码 2.创建包index 打开tclsh,切换到HelloWorld目录,并使用pkg_mkindex 命令创建索引文件. %c ...
- 巨杉学习笔记 | SequoiaDB MySQL导入导出工具使用实战
本文来自社区用户投稿,感谢这位小伙伴的技术分享 巨杉数据库架构简介 巨杉数据库作为分布式数据库是计算和存储分离架构,由数据库实例层和存储引擎层组成的.存储引擎层负责数据库核心功能比如数据读写存储以及分 ...
- SD卡报错“error -110 whilst initialising SD card”
目前开发遇到了某些SD卡和TI的SOC芯片的驱动不协调的地方,具体表现为: uboot 阶段初始化mmc dev 1 没有任何串口信息输出,无法读写mmc Kernel阶段报错”SD卡初始化失败 er ...
- 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码) 前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经 ...
- os和sys模块_python
一.os模块 1.os模块的功能 提供对系统调用的借口,常用于系统文件目录打交道. 2.常用的方法 二.sys模块 1.模块功能 与python解释器交互 2.常用方法 print(sys.path) ...
- 素问 - 使用 PE、PB 做估值
摘自<小韭的学习圈> Q 哪些行业用PE看合适,哪些用PB看合适啊?其中的大致逻辑是什么? A PE = 股价 / 每股收益 使用PE的逻辑是,我们认为一个股票有价值,是因为公司未来能赚钱 ...
- Oracle Linux安装
注:Oracle11gR2 X64安装 一.环境准备 安装包: 2.CentOS-7-x86_64-DVD-1511.iso 3.linux.x64_11gR2_database_1of2.zip l ...
- dojo - 相关教程
https://blog.csdn.net/dojotoolkit/article/details/6688058