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程序 这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹.游戏中击杀一批飞船后进入下一关卡.每一关卡击打飞 ...
随机推荐
- dubbo的服务consumer与provider使用的api版本不一致,是否有影响
dubbo的服务consumer与provider使用的api版本不一致,是否有影响 最近新接手一个项目,看到定义的dubbo接口有些很奇葩的设定. 一.消费端 与 服务端 调用的接口中的数据包装类型 ...
- Codeforces 540A - Combination Lock
Scrooge McDuck keeps his most treasured savings in a home safe with a combination lock. Each time he ...
- TCL常用命令
1.删除文件 file delete A file delete -force A 2.建立文件夹 file mkdir A file mkdir A/A 3.判断文件夹是否存在 file exist ...
- XJOI CSP-S2 2019开放模拟训练题1 赛后总结
比赛链接 友好数对 暴力枚举\([L,R]\)之间的所有数,将每个数进行"旋转",看是否符合题意. 注意"旋转"的次数,并不一定是数字位数.只要旋转回到了初始数 ...
- LED Holiday Light-5 Mm Wide Angle Cone Lights: Pros
But in rare cases, the opposite is true: the opinions of consultants are so synchronized that it is ...
- numpy学习(三)
练习篇(Part 3) 31. 略 32. Is the following expressions true? (★☆☆) np.sqrt(-1) == np.emath.sqrt(-1) prin ...
- Java-杨辉三角(YangHuiTriangle)
杨辉三角,是二项式系数在三角形中的一种几何排列. 杨辉三角概述 ☃ 每行端点与结尾的数为1 ☃ 每个数等于它上方两数之和 ☃ 每行数字左右对称,由1开始逐渐变大 ☃ 第n行的数字有n项 ☃ 前n行共[ ...
- struts2中的constant常量配置
struts2中的constant配置详解 本文主要讲解一下struts2中的constant常量配置,内容主要来自于互联网的整理.<?xml version="1.0" e ...
- 创建JDBC六个步骤
JDBC库中所包含的API通常与数据库使用于: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改数据库中的数据记录 创建JDBC应用程序 建立一个JDBC应用 ...
- 剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行
Q:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. A:BFS,偶数层reverse vector&l ...