Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!

这篇具有很好参考价值的文章主要介绍了Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

screen.blit(missile, (x1-missile.get_width(), y1-missile.get_height()/2))

dis_angle=d_angle-old_angle #dis_angle就是到下一个位置需要改变的角度

old_angle=d_angle #更新初始角度

pygame.display.update()

如果仅把导弹考虑为一个质点的话,那么以上算法就已经足矣,我没有做导弹的旋转,因为一个质点也不分头尾不需要旋转,当然这前提得是你加载的导弹图片很小的时候不旋转看起来也没什么问题。但是在pygame里面做旋转并不是一件容易的事情,我们先把图片替换成一张矩形的,再加入旋转函数看看效果如何

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

missiled = pygame.transform.rotate(missile, -(d_angle))screen.blit(missiled, (x1-missile.get_width(), y1-missile.get_height()/2))

因为图片的坐标点是它的左上角的点,所以如果我们想让图片的坐标固定在箭头尖点,那么把图片实际打印位置x减少图片长度,y减少一半宽度就行。但是实际运行效果并不好

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

大致方向相同,但是图片箭头的尖点并没有一直跟随鼠标,这是为什么呢。经过一番研究,我发现原来是这个图旋转的机制问题,我们看看旋转后的图片变成什么样了:

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

旋转后的图片变成了蓝色的那个范围,根据旋转角度的不同,所变成的图片大小也不一样,我们看旋转90的情况

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

我们发现,旋转后的图片不仅面积变大了,导弹头的位置也变了。那应该怎么解决这个问题呢?思路是,每一次旋转图片以后,求出旋转图的头位置(图中的绿色箭头点),然后把绿图的打印位置移动一下,下,x,y分别移动两个头的距离,就可以让旋转后的导弹头对准实际我们参与运算的那个导弹头的位置,移动后应该是这样的:

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

这样,两个导弹头的点就一致了。接下来我们分析求旋转后的导弹头的算法。根据旋转角度的不同,旋转角在不同象限参数不一样,所以我们分为这四种情况1,2象限

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

3,4象限,它的旋转只有正负0—180,所以3,4象限就是负角

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

显示图片的时候我们将他移动

screen.blit(missiled, (x1-width+(x1-C[0]),y1-height/2+(y1-C[1])))

这里的 (x1-width, y1-height/2) 其实才是上图中的 (x1, y1)所以最后我们加入相关算法代码,效果就比较完美了

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

大功告成,最后附上全部的算法代码

import pygame,sys

from math import *

pygame.init()

font1=pygame.font.SysFont(‘microsoftyaheimicrosoftyaheiui’,23)

textc=font1.render(‘*’,True,(250,0,0))

screen=pygame.display.set_mode((800,700),0,32)

missile=pygame.image.load(‘element/rect1.png’).convert_alpha()

height=missile.get_height()

width=missile.get_width()

pygame.mouse.set_visible(0)

x1,y1=100,600 #导弹的初始发射位置

velocity=800 #导弹速度

time=1/1000 #每个时间片的长度

clock=pygame.time.Clock()

A=()

B=()

C=()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

clock.tick(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))

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:

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!,程序员学习,python,游戏,pygame

n爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-mXW7c0r4-1710874764093)]文章来源地址https://www.toymoban.com/news/detail-844054.html

到了这里,关于Python实现吃鸡游戏子弹and导弹自动追踪!原来是这样的一个原理啊!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python|OpenCV-实现自动“追踪并检测”视频中的人脸识别(14)

    前言 本文是该专栏的第15篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在本专栏之前,笔者在文章《Python|OpenCV-实现检测人脸以及性别检测(12)》中,有详细介绍通过OpenCV实现对图像中的人物人脸进行性别以及人脸检测,对此领域感兴趣的同学,可直接点击翻阅

    2024年04月14日
    浏览(42)
  • 100行python代码实现细胞自动机(康威生命游戏)

     英国数学家约翰·何顿·康威在1970年发明了细胞自动机,它属于一种仿真程序,通过设定一些基本的规则来模拟和显示的图像的自我进化,看起来颇似生命的出生和繁衍过程,故称为“生命游戏”。 完成效果 用到的第三方库 pygame 基本规则 康威生命游戏在网格上进行,有填

    2023年04月08日
    浏览(39)
  • 【UE4 塔防游戏系列】06-炮塔发射子弹攻击敌人

    1. 新建一个Actor蓝图类,命名为“TotalBulletsCategory”,用来表示子弹蓝图总类,后面会有很多不同类型的子弹会继承该类 打开“TotalBulletsCategory”,添加粒子系统组件、盒体碰撞组件和发射物移动组件  调整发射物重力范围为0 添加一个变量,命名为“ChoosedEnemy”,用来表示子

    2024年02月17日
    浏览(48)
  • 【UE4 塔防游戏系列】07-子弹对敌人造成伤害

    目录 效果 步骤 一、让子弹拥有不同伤害 二、敌人拥有不同血量  三、修改“BP_TowerBase”逻辑 四、发射的子弹对敌人造成伤害   一、让子弹拥有不同伤害 为了让每一种子弹拥有不同的伤害值,打开“TotalBulletsCategory”(所有子弹的父类),新建一个浮点型变量,命名为“

    2024年02月16日
    浏览(43)
  • 使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录

    兄弟们天天看基础看腻了吧 今天来分享一下如何使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录。 目标:某 7 网游登录 主页:aHR0cHM6Ly93d3cuMzcuY29tLw== 接口:aHR0cHM6Ly9teS4zNy5jb20vYXBpL2xvZ2luLnBocA== 逆向参数:Query String Parameters: password: SlVEOThrcjgzNDNjaUYxOTQzNDM0eVM

    2023年04月13日
    浏览(65)
  • 【C++】做一个飞机空战小游戏(九)——发射子弹的编程技巧

     [导读]本系列博文内容链接如下: 【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C++】做一个飞

    2024年02月11日
    浏览(57)
  • Unity制作射击游戏案例01(控制角色+发射子弹+摄像机跟踪)

    //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、   2.发射子弹(空格键) //【程序逻辑2】 首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数    3.克隆子弹 4.让克隆的子弹往前跑 为子弹模板添加刚体,并且限制旋转 这个脚本需要挂在到摄像机,里面谈

    2024年02月06日
    浏览(57)
  • 【C++】做一个飞机空战小游戏(十)——子弹击落炮弹、炮弹与飞机相撞

    [导读]本系列博文内容链接如下: 【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C++】做一个飞机

    2024年02月12日
    浏览(42)
  • 【2023年电赛】运动目标控制与自动追踪系统(E 题)最简单实现

    本方案的思路是最简单的不涉及复杂算法:识别矩形框,标记矩形框,输出坐标和中心点,计算长度,控制舵机移动固定长度!仅供完成基础功能参考,不喜勿喷! # 实现运动目标控制与自动追踪系统 ## 任务概述 本文将介绍如何使用OpenMV开发板和舵机构建一个运动目标控制

    2024年02月14日
    浏览(40)
  • unity实现弹射子弹

    unity实现弹射子弹,子弹在不同敌人之间来回弹射,发射自动选择最近的敌人,然后每次随机选择附近的敌人进行弹射,可以控制弹射次数,比如3次后子弹销毁 可以通过以下步骤在Unity中实现弹射子弹的效果: 1.创建一个子弹对象和敌人对象,并在子弹对象上添加一个控制脚

    2024年02月10日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包