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的导弹追踪鼠标游戏设置和说明的更多相关文章

  1. python+pygame游戏开发之使用Py2exe打包游戏

    最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...

  2. Python模拟键盘输入和鼠标操作

    Python模拟键盘输入和鼠标操作 一.Python键盘输入模拟: import win32api import win32con win32api.keybd_event(17,0,0,0)  #c ...

  3. Python traceback 模块,追踪错误

    Python traceback 模块,追踪错误 import traceback try: your code except: traceback.print_exc()

  4. 【Unity】关于发射子弹、导弹追踪的逻辑

    做个笔记,之后补上. 一.发射子弹 网上搜到的基本是两种方法: 给子弹物体添加一个力 AddForce. 子弹物体挂一个运动脚本,Update中毎帧向前运动.通过调整子弹生成点的Transform来控 ...

  5. 用python+pygame写贪吃蛇小游戏

    因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库.了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏. 毕竟最开始的练手 ...

  6. Python+requests重定向和追踪

    Python+requests重定向和追踪 一.什么是重定向 重定向就是网络请求被重新定个方向转到了其它位置 二.为什么要做重定向 网页重定向的情况一般有:网站调整(如网页目录结构变化).网页地址改变 ...

  7. python,PyAutoGUI,设置鼠标键盘自动操作

    三个文件需在同一个文件夹下面,文件夹的位置无要求. 1.第一个文件,trial.py.python代码调用PyAutoGUI操作鼠标键盘,可以通过修改start_time和end_time来确定程序自 ...

  8. Making Games with Python & Pygame 中文翻译

    Making Games with Python & Pygame 用Pygame做游戏 第1章-安装python和pygame 原文作者:Al Sweigart 翻译:bigbigli/李超 ...

  9. Python pygame库的应用

    今天想用pygame库写一个击打外星人飞船的python程序 这个游戏的效果是操纵一个位于屏幕底端的飞船,通过上下左右控制飞船移动方向,按空格发射子弹.游戏中击杀一批飞船后进入下一关卡.每一关卡击打飞 ...

随机推荐

  1. Javaweb版四则运算

    显示出题界面shu01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&quo ...

  2. 解决并发问题的CAS思想及原理

      全称为:Compare and swap(比较与交换),用来解决多线程并发情况下使用锁造成性能开销的一种机制:   原理思想:CAS(V,A,B),V为内存地址,A为预期原值,B为新值.如果内存地 ...

  3. centos7在命令界面使用命令可以执行,但在jenkins中输入命令报Chrome has crashed.

    问题:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: ex ...

  4. 剖析Javascript中sort()使用方法,以及重写sort()里的排序方法,实现自定义排序

    语法:arrayObject.sort([compareFunction]):参数compareFunction可选.规定排序顺序,必须是函数. sort() 方法用于对数组的元素进行排序,并返回数组 ...

  5. springboot整合websocket实现客户端与服务端通信

    定义  WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱 ...

  6. 白面系列 redis

    redis是Key-Value数据库,和Memcached类似.value可以是多种类型,如Strings, Lists, Hashes, Sets 及 Ordered Sets等. redis一个牛 ...

  7. AcWing 1017. 怪盗基德的滑翔翼

    #include<iostream> using namespace std ; ; int f[N],g[N]; int w[N]; int main() { int t; cin> ...

  8. MySQL5.5升级至5.7

    一.下载免安装MySQL5.7包 下载页面 下载链接 二.替换mysql的安装目录 解压mysql5.7 tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.ta ...

  9. [LOJ113] 最大异或和 - 线性基

    虽然是SB模板但还真是第一次手工(然而居然又被运算符优先级调戏了) #include <bits/stdc++.h> using namespace std; #define int lo ...

  10. docker usage (2)

    1. docker command docker start postgres docker container ls --all docker image ls --all docker ps -a ...