星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫

系列文章目录

星际争霸之小霸王之小蜜蜂(十五)--剧将终场

星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪

星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

星际争霸之小霸王之小蜜蜂(十二)--猫有九条命

  星际争霸之小霸王之小蜜蜂(十一)--杀杀杀

 星际争霸之小霸王之小蜜蜂(十)--鼠道

星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫

  星际争霸之小霸王之小蜜蜂(七)--消失的子弹

星际争霸之小霸王之小蜜蜂(六)--让子弹飞

  星际争霸之小霸王之小蜜蜂(五)--为小蜜蜂降速

 星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来


目录

系列文章目录

文章目录

前言

一、解放小花猫

 二、修改子弹样式

 三、修改小老鼠的运动轨迹

总结


前言

前面已经完成了游戏一代,也就是1.0版本,现在我们对游戏升级,先搞个1.1版本出来。


一、解放小花猫

小花猫现在只能在屏幕的最下面左右移动,我们希望它能够移动到屏幕上的任何位置。参考写左右移动的代码,我们只需要加监听按键盘上下键的监听,然后在响应事件后,将小花猫的y轴坐标进行加减操作就可以了。

 首先我们编写小花猫的移动代码

class Ship():def __init__(self,screen,new_settings):self.screen = screenself.image = pygame.image.load('cat.png')self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()self.rect.centerx = self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.new_settings = new_settingsself.moving_right = Falseself.moving_left = Falseself.moving_up = Falseself.moving_down = Falseself.center = float(self.rect.centerx)self.centery = float(self.rect.centery)def update(self):if self.moving_right and self.rect.right < self.screen_rect.right:self.center += self.new_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.new_settings.ship_speed_factorif self.moving_up :self.centery -= self.new_settings.ship_speed_factorif self.moving_down :self.centery += self.new_settings.ship_speed_factorself.rect.centerx = self.centerself.rect.centery = self.centery

 可以看出我们添加了表示小花猫上下移动的 self.moving_up和self.moving_down属性,用浮点类型的self.centery来记录小花猫的Y轴坐标,最后通过判断属性为FALSE还是TRUE,来控制小花猫的上下移动。

 下一步,我们就要增加监听的代码了

def check_keydown_events(event,new_setting,screen,ship,bullets):if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_SPACE:fire_bullet(new_setting, screen, ship, bullets)elif event.key == pygame.K_q:sys.exit()elif event.key == pygame.K_UP:print('111')ship.moving_up = Trueelif event.key == pygame.K_DOWN:ship.moving_down = Truedef check_keyup_events(event,ship):if event.key == pygame.K_RIGHT:ship.moving_right = Falseif event.key == pygame.K_LEFT:ship.moving_left = Falseif event.key == pygame.K_UP:ship.moving_up = Falseif event.key == pygame.K_DOWN:ship.moving_down = False

我们分别在按下方向键和抬起方向键中加入判断,对moving_up和moving_down进行控制。

至此,我们已经能实现小花猫的上下移动。

 

 我们发现小花猫能正常移动,但是还是要加个限制,不能让其跑到屏幕外面了,y坐标和x坐标不一样,最上面是0,然后向下越大,也就是说,只要大于0,我可以一直向上,只要小于屏幕底部坐标,我可以一直向下。

if self.moving_up and self.rect.y > 0:self.centery -= self.new_settings.ship_speed_factorif self.moving_down and self.rect.bottom < self.screen_rect.bottom:self.centery += self.new_settings.ship_speed_factor

 二、修改子弹样式

 早就对子弹的样子不满意了,本来是想改成爪印的,但是图片实在是不好找,而且缩小以后基本就看不出来是啥了,所以我把改成弓箭,至少比画的像素条要好一点。

 我们只需要按照编写小花猫和小老鼠的代码修改一下子弹的代码就行,还是比较简单的,原代码中不需要的部分我把注释掉,这样方便比较。

import pygame
from pygame.sprite import Spriteclass Bullet(Sprite):def __init__(self,new_setting,screen,ship):super(Bullet,self).__init__()self.screen = screenself.image = pygame.image.load('zidan2.png')# self.rect = pygame.Rect(0,0,new_setting.bullet_width,new_setting.bullet_hight)self.rect = self.image.get_rect()self.rect.centerx = ship.rect.centerxself.rect.top = ship.rect.topself.y = float(self.rect.y)# self.color =  new_setting.bullet_colorself.speed_factor = new_setting.bullet_speed_factordef update(self):self.y -=self.speed_factorself.rect.y =self.ydef draw_bullet(self):# pygame.draw.rect(self.screen,self.color,self.rect)self.screen.blit(self.image, self.rect)

 我们来看一下效果。

 

 是不是很给力。

 三、修改小老鼠的运动轨迹

 感觉这是比较难修改的部分,我希望的是老鼠是随机不停的产生,然后一直向下,这样对我们现有的代码改动会比较大,但是可玩性会增大很多。

随机产生很好办,我们设置每一秒产生随机一到三只老鼠,老鼠的X轴坐标随机,Y轴坐标等于0,然后运动就是一直向下。这样我们也不存在每次把老鼠清零,再重新生成的问题。

首先我们修改生成老鼠的代码:

def create_fleet(new_setting,screen,aliens,stats):# for row_number in range(3):#     for alien_number in range(6):#         alien = Alien(new_setting,screen)#         alien.x = alien.rect.width+2*alien.rect.width*alien_number#         alien.rect.x = alien.x#         alien.rect.y = alien.rect.height+2*alien.rect.height*row_number#         aliens.add(alien)# while stats.game_active:nums = set()for row_number in range(random.randint(1,3)):num = random.randint(20, 780)if num not in nums and all(abs(num - x) > 20 for x in nums):nums.add(num)for row_number in nums:alien = Alien(new_setting,screen)alien.x = row_numberalien.rect.x = alien.xalien.rect.y = 0aliens.add(alien)

 这样我们每次能生成1到3只老鼠,且两只老鼠不会重叠在一起。

 我们还要改写老鼠的运动部分,老鼠不用左右移动了,所以我们可以把左右部分去掉,只写向下的部分。

 def update(self):self.y += self.new_setting.fleet_drop_speedself.rect.y = self.y

 我们来看下修改后的效果

 

 

 


总结

游戏性和画面效果都提升很多

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Lucene学习总结之Lucene的索引文件格式

当我们真正进入到Lucene源代码之中的时候&#xff0c;我们会发现: Lucene的索引过程&#xff0c;就是按照全文检索的基本过程&#xff0c;将倒排表写成此文件格式的过程。Lucene的搜索过程&#xff0c;就是按照此文件格式将索引进去的信息读出来&#xff0c;然后计算每篇文档打…

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化&#xff1a; 2、load方法更改和变化&#xff1a; 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时&#xff0c;提供基础占位&…

Android LitePal byte[]类型字段不被创建

我创建了以下实体类&#xff0c;主要是用户分享的内容、分享的照片、分享的标题&#xff0c;然后百度了一下LitePal可以识别byte[]&#xff0c;因为需要文件的上传与读取&#xff1a; public class Context extends LitePalSupport {private Integer ContextId;private String…

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起&#xff0c;看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重&#xff0c;并生成与人对齐的模型。请记住&#xff0c;您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先&#xff0c;您将从提示数据集…

用向量数据库Milvus Cloud 搭建AI聊天机器人

加入大语言模型(LLM) 接着,需要在聊天机器人中加入 LLM。这样,用户就可以和聊天机器人开展对话了。本示例中,我们将使用 OpenAI ChatGPT 背后的模型服务:GPT-3.5。 聊天记录 为了使 LLM 回答更准确,我们需要存储用户和机器人的聊天记录,并在查询时调用这些记录,可以用…

软件设计模式系列之二十五——访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;是一种强大的行为型设计模式&#xff0c;它允许你在不改变被访问对象的类的前提下&#xff0c;定义新的操作和行为。本文将详细介绍访问者模式&#xff0c;包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…

软件工程从理论到实践客观题汇总(头歌第九章至第十七章)

九、软件体系结构设计 1、软件体系结构设计概述 2、软件体系结构模型的表示方法 3、软件体系结构设计过程 4、设计初步的软件体系结构 5、重用已有软件资源 6、精化软件体系结构 7、设计软件部署模型 8、文档化和评审软件体系结构设计 十、软件用户界面设计 1、用户界面设计概…

Ae 效果:CC Page Turn

扭曲/CC Page Turn Distort/CC Page Turn CC Page Turn &#xff08;CC 翻页&#xff09;主要用于模拟书页翻动的效果。通过使用该效果&#xff0c;用户可以创建出像书页或杂志页面翻动的视觉效果&#xff0c;增强影片的交互性和视觉吸引力。 ◆ ◆ ◆ 效果属性说明 Contro…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

第2篇 机器学习基础 —(1)机器学习方式及分类、回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习是一种人工智能的分支&#xff0c;它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进&#xff0c;而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律&#xff0c;从而使计算机能够自动进…

Leetcode 231.2的幂

给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;tr…

【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入/输出操作)

目录 前言 二、顺序程序设计 2.1 求绿化带面积——简单程序 2.2基本符号&#xff1a; 2.2.1 字符集 可视字符 不可视字符 2.2.2 C特定符 关键字 分隔符 运算符 2.2.3 标识符 2.2.4 间隔符 2.2.5 注释 2.3 数据 2.3.1 字面常量&#xff08;Literal Constants&am…

【RP-RV1126】烧录固件使用记录

文章目录 烧录完整固件进入MASKROM模式固件烧录升级中&#xff1a;升级完成&#xff1a; 烧录部分进入Loader模式选择文件切换loader模式 烧录完整固件 完整固件就是update.img包含了所有的部件&#xff0c;烧录后可以直接运行。 全局编译&#xff1a;./build.sh all生成固件…

SDL2绘制ffmpeg解析的mp4文件

文章目录 1.FFMPEG利用命令行将mp4转yuv4202.ffmpeg将mp4解析为yuv数据2.1 核心api: 3.SDL2进行yuv绘制到屏幕3.1 核心api 4.完整代码5.效果展示 本项目采用生产者消费者模型&#xff0c;生产者线程&#xff1a;使用ffmpeg将mp4格式数据解析为yuv的帧&#xff0c;消费者线程&am…

单层神经网络

神经网络 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;&#xff0c;简称神经网络&#xff08;Neural Network&#xff0c;NN&#xff09;&#xff0c;是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年&#xff0c;McCulloc…

计数排序(Counting Sort)详解

计数排序&#xff08;Counting Sort&#xff09;是一种非比较排序算法&#xff0c;其核心思想是通过计数每个元素的出现次数来进行排序&#xff0c;适用于整数或有限范围内的非负整数排序。这个算法的特点是速度快且稳定&#xff0c;适用于某些特定场景。在本文中&#xff0c;我…

多层神经网络和激活函数

多层神经网络的结构 多层神经网络就是由单层神经网络进行叠加之后得到的&#xff0c;所以就形成了层的概念&#xff0c;常见的多层神经网络有如下结构&#xff1a; 1&#xff09;输入层&#xff08;Input layer&#xff09;&#xff0c;众多神经元&#xff08;Neuron&#xff…

电商项目常用的五个设计模式场景及分析实现

电商设计模式总结 1 单点登录模 1 业务介绍 单点登录&#xff08;Single Sign-On, SSO&#xff09;模块允许用户在多个相关应用系统之间进行无缝的身份验证。用户只需登录一次&#xff0c;然后可以访问所有连接的应用程序而无需重新登录。在电商应用中&#xff0c;这对于提供…

互联网Java工程师面试题·Dubbo篇·第一弹

目录 1、为什么要用 Dubbo&#xff1f; 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架&#xff0c;还有别的选择吗? 4、服务调用是阻塞的吗&#xff1f; 5、一般使用什么注册中心&#xff1f;还有别的选择吗&#xff1f; 6、默认使用什么序列化框架&…

堆排序——向下调整

之前我们要想实现堆排序&#xff0c;是运用建堆代码来实现的&#xff1a; 向上调整建堆——向下调整排序 那么去我们可不可以只适用一种调整方法&#xff08;向下调整&#xff09;就能实现这样的功能呢&#xff1f; 向要只使用向下调整就实现堆排序 首先就是把数组里的值使用…