python/pygame 挑战魂斗罗 笔记(二)

一、建立地面碰撞体:

现在主角Bill能够站立在游戏地图的地面,是因为我们初始化的时候把Bill的位置固定了self.rect.y = 250。而不是真正的站在地图的地面上。

背景地图是一个完整的地图,没有地面、台阶的概念,就无法通过碰撞检测来实现玩家角色在各台阶地面上的移动跳跃,可以考虑在PS中把地面、台阶给提取出来,让角色可以通过碰撞检测来实现,但这需要重新PS中修改地图,并在代码中加载好多个图片。

这里采用的是在所有地面、台阶的位置画一条线,暂时就叫地面碰撞体吧。然后实现主角Bill和这些地面碰撞体发生碰撞,从而让主角Bill能够站在这个碰撞体上面。

1、先写出地面碰撞体的类:

在ContraMap.py中增加CollideGround类:

class CollideGround(pygame.sprite.Sprite):def __init__(self, length, x, y):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((length * Constant.MAP_SCALE, 3))self.image.fill((255, 0, 0))self.rect = self.image.get_rect()self.rect.x = x * Constant.MAP_SCALE - Constant.WIDTH * 2self.rect.y = y * Constant.MAP_SCALE

这个类很简单,就是一个3像素高的红色矩形。因为地图放大了3倍,同时我们在主角出现,也就是地图走到- Constant.WIDTH * 2的时候再把碰撞体画出来,把这些因素考虑进去,可以使在PS中测量碰撞体长度、坐标位置更方便一点。

2、测量并定义地面碰撞体:

在Config.py中增加一些存放碰撞体的组,测量可以在PS或其它画图软件中进行:

    collider = pygame.sprite.Group()collider83 = pygame.sprite.Group()collider115 = pygame.sprite.Group()collider146 = pygame.sprite.Group()collider163 = pygame.sprite.Group()collider178 = pygame.sprite.Group()collider211 = pygame.sprite.Group()collider231 = pygame.sprite.Group()

这里先测量并定义出前面的部分,其实有collider一个组就行,这里按照y坐标的位置分了很多组只是为了测量、加载的时候更清晰一点,不容易乱,最后统一加入collider组。

Variable.collider115.add(CollideGround(736, 832, 115)
)Variable.collider146.add(CollideGround(97, 959, 146),CollideGround(66, 1215, 146)
)Variable.collider163.add(CollideGround(95, 1440, 163)
)Variable.collider178.add(CollideGround(32, 1055, 178),CollideGround(32, 1151, 178)
)Variable.collider211.add(CollideGround(63, 1088, 211),CollideGround(63, 1407, 211)
)Variable.collider.add(Variable.collider83, Variable.collider115, Variable.collider146, Variable.collider163,Variable.collider178, Variable.collider211, Variable.collider231)
3、修改StateMap类的update方法,在Varibale.step==2时,加入all_sprites组进行绘制。
    def update(self):if self.order == 2:print('纵向地图')else:if Variable.step == 0 and self.rect.x >= -Constant.WIDTH:self.rect.x -= 10if Variable.step == 1 and self.rect.x > -Constant.WIDTH * 2:self.rect.x -= 10if self.rect.x == -Constant.WIDTH * 2:Variable.step = 2Variable.all_sprites.add(Variable.collider)

这样就得到了这张带红色地面线的图片。 

二、主角Bill移动+跳跃:

1、给主角Bill定义移动、跳跃、下落三种状态。

初始状态为下落,也就是主角从画面外降落,碰撞到地面碰撞体后把碰撞体的top值赋值给Bill的bottom,实现停止下落。

            self.falling = Trueself.jumping = Falseself.moving = False
2、常量中增加x、y两个方向的移动速度,以及模拟重力。
    SPEED_X = 3SPEED_Y = -10GRAVITY = 0.5
 3、先定义移动、跳跃、下落、动作图片序列四个方法:

移动需要考虑三种情况:

第一是开始直到人物走到屏幕中间,这部分是主角Bill正常移动;

第二是Bill移动到游戏窗口中间时,Bill需要一直停留在中间,而Bill的向前移动实际是地图向后移动,这里设立了一个x = self.rect.centerx - Constant.WIDTH / 2,也就是Bill移动超过游戏窗口中间的距离,然后让all_sprites中的所有精灵,包括Bill都向后移动这个距离。反过来也一样。

第三是地图移动到边界时就不能继续移动了,这时需要Bill继续移动,并保证不能走出游戏窗口。这里为了控制地图,需要获取地图的rect属性。网上搜了很多一直没找到怎么从all_sprites精灵组中获取指定精灵的方法,搞了好久,后来终于想到给地图单独一个组Varible.map_storage,通过遍历这个组来获取地图以及地图的rect属性。

    def move(self):if self.direction == 'right' and self.rect.right <= Constant.WIDTH - 80 * Constant.MAP_SCALE:self.rect.x += Constant.SPEED_Xif self.rect.centerx >= Constant.WIDTH / 2:x = self.rect.centerx - Constant.WIDTH / 2for j in Variable.map_storage:if j.rect.right >= Constant.WIDTH:for i in Variable.all_sprites:i.rect.x -= xelif self.direction == 'left' and self.rect.left >= 40 * Constant.MAP_SCALE:self.rect.x -= Constant.SPEED_Xif self.rect.centerx <= Constant.WIDTH / 2:x = Constant.WIDTH / 2 - self.rect.centerxfor j in Variable.map_storage:if j.rect.left <= -Constant.WIDTH * 2:for i in Variable.all_sprites:i.rect.x += x

图片序列:就是正常设定时间钟,然后image_order在0-5中间循环。

跳跃:先设定SPEED_Y为-10,GRAVITY为0.5,这样向上移动SPPED_Y的值逐渐减小,直到SPPED_Y==0,调整jumping和falling状态,并将SPEED_Y恢复为-10,完成一次跳跃。

下落:简单的写了一个10倍Constant.GRAVITY 下落。

    def order_loop(self):self.now_time = pygame.time.get_ticks()if self.now_time - self.last_time >= 100:self.image_order += 1if self.image_order > 5:self.image_order = 0self.last_time = self.now_timedef jump(self):Constant.SPEED_Y += Constant.GRAVITYself.rect.y += Constant.SPEED_Yif Constant.SPEED_Y == 0:self.jumping = Falseself.falling = TrueConstant.SPEED_Y = -10def fall(self):self.rect.y += Constant.GRAVITY * 10
4、修改update方法,实现跳下功能:

前后移动以及跳跃都可以根据设定的按键来修改状态以及图片类型。

重点是向下跳跃,向下跳跃实现的思路,是将Bill的状态设定为一直处于下落状态(跳跃时除外),让他与地面碰撞体一直碰撞,并将碰撞体的top值赋值给self.floor变量,然后向下跳的时候(s和j键同时按下),将该碰撞体从collider中删除并用sprite_storage组暂时寄存,实现Bill往下落:

            if key_pressed[pygame.K_s] and key_pressed[pygame.K_j]:self.image_type = 'oblique_down'Variable.collider.remove(l[0])Variable.sprite_storage.add(l[0])

等到Bill的rect.top值大于self.floor时,也就是完全超过哪条地面线的位置,再把该碰撞体加载回来,否则就会出现跳下一半就检测到碰撞,被拉回原来地面的情况。加回碰撞体后,就可以实现跳回来的动作。

        if self.rect.top >= self.floor:for i in Variable.sprite_storage:Variable.collider.add(i)Variable.sprite_storage.remove(i)

其它的部分,就是按照按键以及按键组合,调整各自的状态参数就可以了。

把按键监测写到碰撞后的for循环里面,是想控制主角Bill必须是与碰撞体接触后才能进行移动及跳跃等操作,否则在刚开始下落的时候就可以移动了,也会出现半空中继续跳跃的情况。 

    def update(self):self.image = self.image_dict[self.image_type][self.image_order]if self.direction == 'left':self.image = pygame.transform.flip(self.image, True, False)if self.rect.top >= self.floor:for i in Variable.sprite_storage:Variable.collider.add(i)Variable.sprite_storage.remove(i)key_pressed = pygame.key.get_pressed()if self.falling:self.fall()if self.jumping:self.jump()if self.moving:self.move()self.order_loop()collider_ground = pygame.sprite.groupcollide(Variable.player_sprites, Variable.collider, False, False)for p, l in collider_ground.items():self.floor = l[0].rect.topp.rect.bottom = self.floorif key_pressed[pygame.K_d]:self.direction = 'right'self.moving = Trueif key_pressed[pygame.K_w]:self.image_type = 'oblique_up'elif key_pressed[pygame.K_s]:self.image_type = 'oblique_down'elif key_pressed[pygame.K_j]:self.image_type = 'jump'self.jumping = Trueself.falling = Falseelse:self.image_type = 'run'elif key_pressed[pygame.K_a]:self.direction = 'left'self.moving = Trueif key_pressed[pygame.K_w]:self.image_type = 'oblique_up'elif key_pressed[pygame.K_s]:self.image_type = 'oblique_down'elif key_pressed[pygame.K_j]:self.image_type = 'jump'self.jumping = Trueself.falling = Falseelse:self.image_type = 'run'elif key_pressed[pygame.K_w]:self.image_type = 'up'self.moving = Falseelif key_pressed[pygame.K_s]:self.image_type = 'down'self.moving = Falseelse:self.image_type = 'stand'self.moving = Falseif key_pressed[pygame.K_s] and key_pressed[pygame.K_j]:self.image_type = 'oblique_down'Variable.collider.remove(l[0])Variable.sprite_storage.add(l[0])

这一部分功能的实现费了挺长时间,前前后后改了很多次才终于完成,虽然总觉得跳的有点别扭,但总算是实现了跳下跳回的功能,就这样吧。

三、现阶段各文件完整代码:

1、Contra.py
# Contra.py
import sys
import pygameimport ContraBill
import ContraMap
from Config import Constant, Variabledef control():for event in pygame.event.get():if event.type == pygame.QUIT:Variable.game_start = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:Variable.step = 1class Main:def __init__(self):pygame.init()self.game_window = pygame.display.set_mode((Constant.WIDTH, Constant.HEIGHT))self.clock = pygame.time.Clock()def game_loop(self):while Variable.game_start:control()if Variable.stage == 1:ContraMap.new_stage()ContraBill.new_player()if Variable.stage == 2:passif Variable.stage == 3:passVariable.all_sprites.draw(self.game_window)Variable.all_sprites.update()self.clock.tick(Constant.FPS)pygame.display.set_caption(f'魂斗罗  1.0    {self.clock.get_fps():.2f}')pygame.display.update()pygame.quit()sys.exit()if __name__ == '__main__':main = Main()main.game_loop()
2、ContraMap.py

这里把第一关的全部地面碰撞体都测量并加载出来。

# ContraMap.py
import os
import pygamefrom Config import Constant, Variableclass StageMap(pygame.sprite.Sprite):def __init__(self, order):pygame.sprite.Sprite.__init__(self)self.image_list = []self.order = orderfor i in range(1, 9):image = pygame.image.load(os.path.join('image', 'map', 'stage' + str(i) + '.png'))rect = image.get_rect()image = pygame.transform.scale(image, (rect.width * Constant.MAP_SCALE, rect.height * Constant.MAP_SCALE))self.image_list.append(image)self.image = self.image_list[self.order]self.rect = self.image.get_rect()self.rect.x = 0self.rect.y = 0self.speed = 0def update(self):if self.order == 2:print('纵向地图')else:if Variable.step == 0 and self.rect.x >= -Constant.WIDTH:self.rect.x -= 10if Variable.step == 1 and self.rect.x > -Constant.WIDTH * 2:self.rect.x -= 10if self.rect.x == -Constant.WIDTH * 2:Variable.step = 2Variable.all_sprites.add(Variable.collider)def new_stage():if Variable.map_switch:stage_map = StageMap(Variable.stage - 1)Variable.all_sprites.add(stage_map)Variable.map_storage.add(stage_map)Variable.map_switch = Falseclass CollideGround(pygame.sprite.Sprite):def __init__(self, length, x, y):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((length * Constant.MAP_SCALE, 3))self.image.fill((255, 0, 0))self.rect = self.image.get_rect()self.rect.x = x * Constant.MAP_SCALE - Constant.WIDTH * 2self.rect.y = y * Constant.MAP_SCALEVariable.collider83.add(CollideGround(511, 2176, 83),CollideGround(161, 2847, 83),CollideGround(64, 3296, 83)
)Variable.collider115.add(CollideGround(736, 832, 115),CollideGround(128, 1568, 115),CollideGround(160, 1695, 115),CollideGround(128, 1856, 115),CollideGround(256, 1984, 115),CollideGround(224, 2656, 115),CollideGround(65, 3040, 115),CollideGround(64, 3264, 115),CollideGround(64, 3392, 115),CollideGround(128, 3808, 115)
)Variable.collider146.add(CollideGround(97, 959, 146),CollideGround(66, 1215, 146),CollideGround(225, 2400, 146),CollideGround(96, 2976, 146),CollideGround(64, 3136, 146),CollideGround(160, 3424, 146),CollideGround(64, 3744, 146),CollideGround(32, 3936, 146)
)Variable.collider163.add(CollideGround(95, 1440, 163),CollideGround(64, 2304, 163),CollideGround(32, 2912, 163),CollideGround(32, 2328, 163),CollideGround(32, 3328, 163),CollideGround(97, 3840, 163)
)Variable.collider178.add(CollideGround(32, 1055, 178),CollideGround(32, 1151, 178),CollideGround(65, 2720, 178),CollideGround(64, 2816, 178),CollideGround(96, 3168, 178),CollideGround(63, 3648, 178),CollideGround(32, 3969, 178)
)Variable.collider211.add(CollideGround(63, 1088, 211),CollideGround(63, 1407, 211),CollideGround(97, 2208, 211),CollideGround(192, 2528, 211),CollideGround(33, 3135, 211),CollideGround(33, 3295, 211),CollideGround(97, 3520, 211),CollideGround(242, 3807, 211)
)Variable.collider.add(Variable.collider83, Variable.collider115, Variable.collider146, Variable.collider163,Variable.collider178, Variable.collider211, Variable.collider231)
3、ContraBill.py
# ContraBill.py
import os
import pygamefrom Config import Constant, Variableclass Bill(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.image_dict = {'be_hit': [],'down': [],'jump': [],'oblique_down': [],'oblique_up': [],'run': [],'shoot': [],'stand': [],'up': []}for i in range(6):for key in self.image_dict:image = pygame.image.load(os.path.join('image', 'bill', str(key), str(key) + str(i + 1) + '.png'))rect = image.get_rect()image_scale = pygame.transform.scale(image, (rect.width * Constant.PLAYER_SCALE, rect.height * Constant.PLAYER_SCALE))self.image_dict[key].append(image_scale)self.image_order = 0self.image_type = 'stand'self.image = self.image_dict[self.image_type][self.image_order]self.rect = self.image.get_rect()self.rect.x = 100self.rect.y = 100self.direction = 'right'self.now_time = 0self.last_time = 0self.falling = Trueself.jumping = Falseself.moving = Falseself.floor = 0def update(self):self.image = self.image_dict[self.image_type][self.image_order]if self.direction == 'left':self.image = pygame.transform.flip(self.image, True, False)if self.rect.top >= self.floor:for i in Variable.sprite_storage:Variable.collider.add(i)Variable.sprite_storage.remove(i)key_pressed = pygame.key.get_pressed()if self.falling:self.fall()if self.jumping:self.jump()if self.moving:self.move()self.order_loop()collider_ground = pygame.sprite.groupcollide(Variable.player_sprites, Variable.collider, False, False)for p, l in collider_ground.items():self.floor = l[0].rect.topp.rect.bottom = self.floorif key_pressed[pygame.K_d]:self.direction = 'right'self.moving = Trueif key_pressed[pygame.K_w]:self.image_type = 'oblique_up'elif key_pressed[pygame.K_s]:self.image_type = 'oblique_down'elif key_pressed[pygame.K_j]:self.image_type = 'jump'self.jumping = Trueself.falling = Falseelse:self.image_type = 'run'elif key_pressed[pygame.K_a]:self.direction = 'left'self.moving = Trueif key_pressed[pygame.K_w]:self.image_type = 'oblique_up'elif key_pressed[pygame.K_s]:self.image_type = 'oblique_down'elif key_pressed[pygame.K_j]:self.image_type = 'jump'self.jumping = Trueself.falling = Falseelse:self.image_type = 'run'elif key_pressed[pygame.K_w]:self.image_type = 'up'self.moving = Falseelif key_pressed[pygame.K_s]:self.image_type = 'down'self.moving = Falseelse:self.image_type = 'stand'self.moving = Falseif key_pressed[pygame.K_s] and key_pressed[pygame.K_j]:self.image_type = 'oblique_down'Variable.collider.remove(l[0])Variable.sprite_storage.add(l[0])def order_loop(self):self.now_time = pygame.time.get_ticks()if self.now_time - self.last_time >= 100:self.image_order += 1if self.image_order > 5:self.image_order = 0self.last_time = self.now_timedef move(self):if self.direction == 'right' and self.rect.right <= Constant.WIDTH - 80 * Constant.MAP_SCALE:self.rect.x += Constant.SPEED_Xif self.rect.centerx >= Constant.WIDTH / 2:x = self.rect.centerx - Constant.WIDTH / 2for j in Variable.map_storage:if j.rect.right >= Constant.WIDTH:for i in Variable.all_sprites:i.rect.x -= xelif self.direction == 'left' and self.rect.left >= 40 * Constant.MAP_SCALE:self.rect.x -= Constant.SPEED_Xif self.rect.centerx <= Constant.WIDTH / 2:x = Constant.WIDTH / 2 - self.rect.centerxfor j in Variable.map_storage:if j.rect.left <= -Constant.WIDTH * 2:for i in Variable.all_sprites:i.rect.x += xdef jump(self):Constant.SPEED_Y += Constant.GRAVITYself.rect.y += Constant.SPEED_Yif Constant.SPEED_Y == 0:self.jumping = Falseself.falling = TrueConstant.SPEED_Y = -10def fall(self):self.rect.y += Constant.GRAVITY * 10def new_player():if Variable.step == 2 and Variable.player_switch:bill = Bill()Variable.all_sprites.add(bill)Variable.player_sprites.add(bill)Variable.player_switch = False
4、Config.py
# Config.py
import pygameclass Constant:WIDTH = 1200HEIGHT = 720FPS = 60MAP_SCALE = 3PLAYER_SCALE = 2.5SPEED_X = 3SPEED_Y = -10GRAVITY = 0.5class Variable:all_sprites = pygame.sprite.Group()player_sprites = pygame.sprite.Group()collider = pygame.sprite.Group()collider83 = pygame.sprite.Group()collider115 = pygame.sprite.Group()collider146 = pygame.sprite.Group()collider163 = pygame.sprite.Group()collider178 = pygame.sprite.Group()collider211 = pygame.sprite.Group()collider231 = pygame.sprite.Group()sprite_storage = pygame.sprite.Group()map_storage = pygame.sprite.Group()game_start = Truemap_switch = Trueplayer_switch = Truestage = 1step = 0

以上代码完成,我们的主角Bill终于可以连跑带跳游览整个地图,并终于站在了第一关的关头。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上位机图像处理和嵌入式模块部署(树莓派4b实现固件主流程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 软件开发一般有软件需求、架构设计和详细设计、软件测试这四个部分。软件需求和软件测试都比较好理解&#xff0c;前者是说要实现哪些功能&#xf…

20240415,构造函数和析构函数,拷贝构造函数调用时机规则

目录 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 2.2 函数分类及调用 2.3 拷贝构造函数调用时机 2.4 构造函数调用规则 二&#xff0c;对象的初始化和清理 2.1 构造函数和析构函数 解决初始化和清理问题&#xff0c;编译器自动调用&#xff0c;如果不提…

C语言中的数据结构--双向链表

前言 上一节我们已经学习完了单链表&#xff08;单向不带头不循环链表&#xff09;的所有内容&#xff0c;我们在链表的分类里面知道了&#xff0c;链表分为单向的和双向的&#xff0c;那么本节我们就来进行双向链表&#xff08;带头双向循环链表&#xff09;的学习&#xff0c…

【CAD建模号】学习笔记(三):图形绘制区1

图形绘制区介绍 CAD建模号的图形绘制区可以绘制我们所需要的各种3D模型&#xff0c;绘制的图形即为模型对象&#xff0c;包括线、面、体等。 1. 二维图形绘制组 二维图形是建模的基础&#xff0c;大多数复杂的模型都是基于二维图形制作出来的&#xff0c;掌握二维图形的绘制等…

(六)Pandas文本数据 学习简要笔记 #Python #CDA学习打卡

一. 文本数据简介 1&#xff09;定义 指不能参与算术运算的任何字符&#xff0c;也称为字符型数据。如英文字母、汉字、不作为数值使用的数字(以单引号开头)和其他可输入的字符。 文本数据虽不能参加算术运算&#xff0c;但其具有纬度高、量大且语义复杂等特点&#xff0c;因…

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

标定的是相机到雷达的,R3live下面配置的雷达到相机的,所以要把得到外参旋转矩阵求逆,再填入,平移矩阵则取负 港科大livox_camera_calib虽然操作方便&#xff0c;但是使用mid360雷达会有视角问题&#xff08;投影三维点到相机&#xff09;&#xff0c;尝试了很多场景&#xff0c…

node-mysql数据库的下载与安装

01 mysql数据库的安装 网址&#xff1a;mysql.com/downloads/ 打开之后往下翻 点击 MySQL Community (GPL) Downloads 》 点击 MySRL Community Server 再点击 No thanks,just stant my download. 02 安装mysql 03 安装完成之后检查mysql服务是否开启 services.msc 04 启动…

排序算法之基数排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性基数排序O(n*k)O(n*k)O(n*k)O(nk)Out-place稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1b…

实验室三大常用仪器3---交流毫伏表的使用方法(笔记)

目录 函数信号发生器、示波器、交流毫伏表如果连接 交流毫伏表的使用方法 测量值的读数问题 实验室三大常用仪器1---示波器的基本使用方法&#xff08;笔记&#xff09;-CSDN博客 实验室三大常用仪器2---函数信号发生器的基本使用方法&#xff08;笔记&#xff09;-CSDN博客…

对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控+AMG(AWS云 grafana)

问题 需要在针对已有的EKS k8s集群启用Prometheus指标监控。而且&#xff0c;这里使用AMP即AWS云的Prometheus托管服务。好像这个服务&#xff0c;只有AWS国际云才有&#xff0c;AWS中国云没得这个托管服务。下面&#xff0c;我们就来尝试在已有的EKS集群上面启用AMP监控。 步…

torch.gather用法详解

torch.gather是PyTorch中的一个函数&#xff0c;用于从源张量中按照指定的索引张量来收集数据。 基本语法如下&#xff0c; torch.gather(input, dim, index, *, sparse_gradFalse, outNone) → Tensor input&#xff1a;输入源张量dim&#xff1a;要收集数据的维度index&am…

2.4G射频收发芯片 KT8P01,非常适合超低功耗(ULP)的无线应用

KT8P01是一颗低成本、高性能的智能2.4 GHz射频收发芯片&#xff0c;内置单片机。KT8P01经过优化&#xff0c;提供了单芯片解决方案&#xff0c;适用于超低功耗&#xff08;ULP&#xff09;的无线应用。处理能力、存储器、低功率振荡器、实时计数器以及一系列省电模式的组合为RF…

SQL连接查询

连接查询&#xff1a; 同时涉及多个表的查询称为连接查询。 SQL中连接查询的主要类型 (1) 交叉连接&#xff08;广义笛卡尔积&#xff09; (2) 等值连接 (3) 自身连接 (4) 内连接 (5) 外连接 1.交叉连接 使用笛卡尔积运算的连接方式 笛卡尔积运算&#xff1a;设A&#xff…

基于Python的LSTM网络实现单特征预测回归任务(PyTorch版)

目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类&#xff0c;将LSTM的各个超参数声明为变量&#xff0c;便于后续使用 4、创建时间序列数据 5、划分数据集 6、将数据转化为PyTorch张量 7、将数据加载成迭代器 …

【栈】Leetcode 84. 柱状图中最大的矩形【困难】

柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&#…

[阅读笔记1][GPT-3]Language Models are Few-Shot Learners

首先讲一下GPT3这篇论文&#xff0c;文章标题是语言模型是小样本学习者&#xff0c;openai于2020年发表的。 这篇是在GPT2的基础上写的&#xff0c;由于GPT2还存在一些局限&#xff0c;这篇对之前的GPT2进行了一些完善。GPT2提出了多任务学习&#xff0c;也就是可以零样本地用在…

第九、十章 异常、模块、包以及数据可视化

第九章 异常、模块、包 异常 捕获异常 捕获常规异常 # 捕获常规异常 try:f open("D:/abc.txt", "r", encoding "UTF-8") except:print("出现异常了&#xff0c;因为文件不存在&#xff0c;我将open的模式&#xff0c;改为w模式去打开&qu…

SpringBoot 配置 jedis 来连接redis

Maven依赖 首先配置 maven依赖&#xff0c;这个依赖&#xff0c;要结合自己的springboot 的版本去选&#xff0c; 如果想要看自己的springboot 版本 在 启动类中去 加入&#xff0c;这两行代码 String version SpringBootVersion.getVersion(); log.info("***SpringBo…

LeetCode:203.移除链表元素

&#x1f3dd;1.问题描述&#xff1a; &#x1f3dd;2.实现代码&#xff1a; typedef struct ListNode ListNode; struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL)return head;ListNode *NewHead,*NewTail;ListNode *pcurhead;NewHeadNewTail…

【C++】C++11右值引用

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.什么是左值&&…