pygame旋转角度发射射线

在这里插入图片描述
self.x = self.x + math.cos(math.radians(self.xuanzhuanjiao)) * 70
self.y = self.y - math.sin(math.radians(self.xuanzhuanjiao)) * 70
旋转角度,70是间隔 间隔太小会卡

import pygame
from pygame.locals import *
import sys
import math

pygame.init()

width, height = 900, 900
screen = pygame.display.set_mode((width, height))
c=pygame.time.Clock()
q = [
    [1, 1, 1, 1, 1, 1, 1, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 0, 0, 0, 0, 0, 0, 1],
    [1, 1, 1, 1, 1, 1, 1, 1]
     ]

px=70
py=70
du=0
left=False
right=False
down=False
up=False
img = pygame.image.load("1.png")  # 替换为您自己的图像文件路径
img=pygame.transform.scale(img,(30,30))
ci=0
sz=[]
qsz=[]
xiansz=[(0,0)]
xuanzhuanjiao=0
class zidan:
    #global xiansz
    def __init__(self):
        self.x = self
        self.y = self
        self.endx=self
        self.endy=self
        self.xiansz=self
        self.xuanzhuanjiao=self

    def up(self):
        self.x = self.x + math.cos(math.radians(self.xuanzhuanjiao)) * 70
        self.y = self.y - math.sin(math.radians(self.xuanzhuanjiao)) * 70
    def chuangjian(self):
        #self.endx = px
        #self.endy = py

        p=pygame.draw.rect(screen, (40, 140, 40), (self.x, self.y, 10,20), 0)
        #print(self.x,self.y,"d没碰")

        if(p.collidelistall(qsz)):#碰撞检测
            xiansz.clear()#先清空数组,前面有初始化
            #self.endx, self.endy = self.x, self.y
            xiansz.append((self.x,self.y))#使用对象外的数组,要是对象自己的变量,在碰撞后会覆盖碰撞位置的x,y

            #print(self.x,self.y,"duixiang",xiansz)
def player(x,y,zhuan):

    #pygame.draw.line(screen, (40, 140, 40), (x, y), (74, 713))
    #print(du)
    screen.blit(zhuan,(x,y))

def dl(x,y):
    pygame.draw.line(screen, (40, 140, 40), (x, y), (x, 700))


# def shexian(px,py,juli,xuanzhuanjiao):
#     xuan=0
#     for c in range(10):
#         c=c+c*1.7#每条射线间距离
#         print(c)
#         end_point_x = px + int(juli) * math.cos(math.radians(c))
#         end_point_y = py - int(juli) * math.sin(math.radians(c))
#         end_point = (end_point_x, end_point_y)
#
#         pygame.draw.line(screen, (255, 0, 0), (px, py), end_point, 2)

while True:
    screen.fill((255, 255, 255))
    #c.tick(70)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        keys = pygame.key.get_pressed()
        if keys[pygame.K_UP]:
            print("up")
            py=py -10
        if keys[pygame.K_LEFT]:#zuo
            px=px-10
        if keys[pygame.K_DOWN]:#xia
            print("up")
            py = py + 10
        if keys[pygame.K_RIGHT]:#you
            #xuanzhuanjiao=xuanzhuanjiao+1
            px=px+10
            #print(sz)
            #在这直接写会变成子弹,写成函数qiang(ci)就能画成一次,不会移动的墙
        if keys[pygame.K_a]:
            xuanzhuanjiao=xuanzhuanjiao+10

            right=True
        if event.type == pygame.KEYUP:
            right = False
        if keys[pygame.K_l]:
            xuanzhuanjiao=xuanzhuanjiao-10
        #if keys[pygame.K_SPACE]:


    zi = zidan()  # 一直创建,超过屏幕会回收的
    zi.x = px
    zi.y = py
    zi.xuanzhuanjiao = xuanzhuanjiao
    sz.append(zi)
    for h in range(len(q)):#画墙
        #print(q[h],"行",h)
        for g in range(len(q[h])):
            if q[h][g]==1:
                #print(q[h][g],"个",g,h)
                pz=pygame.draw.rect(screen, (140, 240, 40), (100+h*60, 100+g*60, 60, 60))
                qsz.append(pz)

    player(px,py,img)
    dl(px,py)
    #print(right)


    for e in (sz):#遍历子弹数组
        #print(i)


        e.up()




        e.chuangjian()
        if(e.x>700 or e.x<100 or e.y>700 or e.y<70):
            sz.remove(e)




        for i in (sz):#画射线

            pygame.draw.line(screen, (40, 140, 40), (px, py), (xiansz[0]))

            p=pygame.math.Vector2(px,py)#角色位置
            p1=pygame.math.Vector2(xiansz[0])#碰撞点x,y
            juli=p.distance_to(p1)#计算距离,其实有距离后不用再画射线,后面画墙,画射线是为了理解


            # for c in range(16):
            #     c = c + c * 0.1  # 每条射线间距离
            #     #print(c)
            #     end_point_x = px + int(juli) * math.cos(math.radians(c+xuanzhuanjiao))
            #     end_point_y = py - int(juli) * math.sin(math.radians(c+xuanzhuanjiao))
            #     end_point = (end_point_x, end_point_y)
            #
            #     pygame.draw.line(screen, (255, 0, 0), (px, py), end_point, 2)
            #     print(end_point, "点", xiansz,xuanzhuanjiao,juli)
            # #if (i.x > 500):
            #     #sz.remove(i)

        #在这直接写会变成子弹,写成函数qiang(ci)就能画成一次,不会移动的墙

    print(px,py)

    pygame.display.flip()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/532368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS开发实例:【分布式关系型数据库】

介绍 本示例使用[ohos.data.relationalStore]接口和[ohos.distributedDeviceManager] 接口展示了在eTS中分布式关系型数据库的使用&#xff0c;在增、删、改、查的基本操作外&#xff0c;还包括分布式数据库的数据同步同能。 效果预览 使用说明: 启动应用后点击“ ”按钮可…

使用Ollama在本地运行AI大模型gemma

1.下载&#xff1a; https://github.com/ollama/ollama/releases 2.配置环境变量 我的电脑-右键-属性-系统-高级系统设置-环境变量-【系统环境变量】新建 变量名&#xff1a;OLLAMA_MODELS &#xff08;固定变量名&#xff09; 变量值&#xff1a;E:\Ollama\Lib &#xff0…

HNHN 笔记

1 Title HNHN: Hypergraph Networks with Hyperedge Neurons(Yihe Dong、Will Sawin、Yoshua Bengio、Mila)[ICML 2020] 2 Conclusion This study proposes a novel framework, HNHN, for hypergraph representation learning. HNHN is a hypergraph convolution network wit…

开启未来之门:Victoria VR 与 OpenAI 整合,引领 Web3 AI+AR 风潮

加密市场一直是科技创新的前沿阵地。虚拟现实&#xff08;VR&#xff09;技术和人工智能&#xff08;AI&#xff09;被认为是引领未来的重要技术之一&#xff0c;Web3 自然不会缺席这场足以改变人们生活方式的变革&#xff01; 2月份&#xff0c;Apple Vision Pro 的发售迅速引…

【linux】基础IO(四)

在上一篇基础IO中我们主要讲述了文件再磁盘中的存储&#xff0c;当然我们说的也都只是预备知识&#xff0c;为这一篇的文件系统进行铺垫。 目录 搭文件系统的架子&#xff1a;填补细节&#xff1a;inode&#xff1a;datablock[]: 更上层的理解&#xff1a; 搭文件系统的架子&a…

【日期】获取当天以及未来三天的日期和周几

// 获取当天以及未来三天的日期和周几getDates() {const today new Date();const dayOfWeek ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];const todayDate today.toDa…

Redis(持久化 -- RDB AOF)

持久化 通常我们认为持久化为: 重启进程/重启主机之后, 数据仍然存在不丢失 把数据存储在硬盘上 – 持久 把数据存储在内存中 – 不持久 Redis 持久化 redis 是一个内存数据库, 也就是说本身是不持久的(但是快[效率高]), 于是 Redis 提供了持久化机制 — RDB 和 AOF 二者都是对…

探索艺术的新领域——3D线上艺术馆如何改变艺术作品的传播方式

在数字化时代的浪潮下&#xff0c;3D线上艺术馆成为艺术家们展示和传播自己作品的新平台。不仅突破了地域和物理空间的限制&#xff0c;还提供了全新的互动体验。 一、无界限的展示空间&#xff1a;艺术家的新展示平台 3D线上艺术馆通过数字化技术&#xff0c;为艺术家提供了一…

Linux函数学习 fork

1、Linux fork 函数 pid_t fork(void); pid_t &#xff1a; 对于子进程&#xff0c;返回0 pid_t &#xff1a; 对于父进程进程&#xff0c;返回子进程进程号 int pipe(int pipefd[2]); pipefd[0] 为读取管道 pipefd[1] 为写入管道 返回值&#xff1a;-1失败 0 成功 2、函…

TMS320F280049 EPWM模块--DB子模块(4)

下图是DB子模块与其他模块的关系图&#xff0c;可以看到DB主要接收AQ的输入&#xff0c;然后输出给PC。 DB内部信号如下图所示&#xff0c;主要由IN_MODE/POLSEL/OUT_MODE来控制。RED/FED/DBCTL可以由影子加载到活动寄存器。 POLSEL可以控制4种pwm输出极性--AHC/ALC/AH/AL&…

LeetCode31. 下一个排列(Java)

题目&#xff1a; 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

HEC-HMS水文模型

HEC-HMS是美国陆军工程兵团水文工程中心开发的一款水文模型。HMS能够模拟各种类型的降雨事件对流域水文&#xff0c;河道水动力以及水利设施的影响&#xff0c;在世界范围内得到了广泛的应用。它有着完善的前后处理软件&#xff0c;能有效减轻建模的负担&#xff1b;能够与HEC开…

2023NJU-ICS PA1.2表达式求值 思路详解 心得体会

前言 PA1.2的细节非常非常多&#xff0c;导致这几天花了大量的时间去调试bug&#xff0c;4.3晚上终于过了最后一关“如何测试你的代码”&#xff08;花了两整天时间才调成功&#xff09;。虽然耗时巨大&#xff0c;但确实学到了不少东西、训练了能力&#xff0c;于是抽几天时间…

07 Php学习:运算符

PHP 算术运算符 在 PHP 中&#xff0c;算术运算符用于执行基本的数学运算&#xff0c;包括加法、减法、乘法、除法、取余数&#xff0c;负数运算、取反和并置运算。以下是这些运算符的详细解释和示例&#xff1a; 加法运算符 &#xff1a;用于将两个数值相加。 $a 5; $b 3;…

MySQL innoDB存储引擎多事务场景下的事务执行情况

一、背景 在日常开发中&#xff0c;对不同事务之间的隔离情况等理解如果不够清晰&#xff0c;很容易导致代码的效果和预期不符。因而在这对一些存在疑问的场景进行模拟。 下面的例子全部基于innoDB存储引擎。 二、场景&#xff1a; 2.1、两个事务修改同一行记录 正常来说&…

基于ssm乐购游戏商城系统论文

摘 要 随着社会的发展&#xff0c;游戏品种越来越多&#xff0c;计算机的优势和普及使得乐购游戏商城系统的开发成为必需。乐购游戏商城系统主要是借助计算机&#xff0c;通过对信息进行管理。减少管理员的工作&#xff0c;同时也方便广大用户对个人所需信息的及时查询以及管理…

IO流【 文件字符输入、出流;带缓冲区的字符输入、出流;对象流】

day36 IO流 字符流继承图 字符流 继day35 应用场景&#xff1a;操作纯文本数据 注意&#xff1a;字符流 字节流编译器 编译器&#xff1a;可以识别中文字符和非中文字符&#xff0c;非中文字符获取1个字节&#xff08;一个字节一个字符&#xff09;&#xff0c;编译器会根据…

Electron打包vue+java+nginx 踩坑记录

记录下遇到的问题&#xff1a; ⚠注意&#xff1a;64位系统和32位系统的配置不太一样 1、运行npm run packager失败 原因&#xff1a;在package.json没有对应命令 解决&#xff1a;在package.json 中添加对应命令&#xff0c;其中testApp是你想要的输入的项目名称&#xff0…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型&#xff0c;我们使用通义千问 显存&#xff1a;24G 模型&#xff1a;qwen1.5-7B-Chat&#xff0c;qwen-7B-Chat 先使用 qwen-7B-Chat&#xff0c;会报错用不了&#xff1a; 看了下是不支持这中模型&#xff0c;但看列表中有一个 Qwen 字样…

Asterisk语音卡驱动DAHDI 3.2版本对于TDM410P的支持

目录 DAHDITDM410base.c什么是电话语音卡 资本掌控下的Asterisk虽然继续履行开源社区的承诺&#xff0c;但实际上小手还是会四处乱摸&#xff0c;比如对于Asterisk硬件驱动DAHDI&#xff0c;就做了些隐蔽的小动作。 DAHDI DAHDI 全称是 Digium Asterisk Hardware Device Inter…