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

news2024/10/7 12:25:31

系列文章目录

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

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

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

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

目录

 前言

一、寻找图片

 二、创建Alien类

 三、小老鼠实例化

 四、小老鼠上灯台

 总结


前言

 前期已经完成了小蜜蜂(这里我想更名了,因为是一只大花猫,每次说小蜜蜂怪怪的,以后都叫大花猫吧)的创建,现在我们要创建它的对手了,一群小老鼠,今天我们按照计划,先搞定一只小老鼠。

一、寻找图片

 像之前的小蜜蜂一样,找图片不好找,本来是想找一只可爱的小老鼠,白色的,萌萌的,结果找不到,只能找一只写实的,看着有点恶心,不过缩小以后好多了,大家凑合看。

 

 二、创建Alien类

 有了前面创建大花猫的经历,其实我们做这个小老鼠还是有一定思路的,首先,我们要创建一个老鼠的类mouse,为了编写的时候不搞混淆,我们把类的名字设置的和书上一样,也命名为Alien,然后我们需要在里面设置小老鼠的位置、速度等属性,和大花猫一样,下面我们看代码:

import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
    def __init__(self,new_setting,screen):
        super(Alien,self).__init__()
        self.screen = screen
        self.new_setting = new_setting

        self.image = pygame.image.load('mouse.jpg')
        self.rect = self.image.get_rect()

        self.rect.x = self.rect.width
        self.rect.y = self.rect.height

        self.x = float(self.rect.x)

    def blitme(self):
        self.screen.blit(self.image,self.rect)

 可以看出,这段代码与大花猫的代码Ship很相似,但是它导入了Sprite类,这个类在创建子弹的时候也导入了,因为Sprite可以处理多个对象,子弹和小老鼠都不止一个。self.x = float(self.rect.x)的作用也和子弹、大花猫一致,用来存储位置信息,会有一个属性来控制速度,不明白的可以看看前面的内容。

 三、小老鼠实例化

 Alien类写好之后,我们就需要在主函数中创建它的实例,创建实例很简单,我们导入Alien类,再创建,看代码:

import pygame
import settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from alien import Alien

def run_game():
    pygame.init()
    new_setting=settings.Settings()
    screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))
    ship = Ship(screen,new_setting)
    alien = Alien(new_setting,screen)
    pygame.display.set_caption("狂敲代码的橘子")
    bullets = Group()

    while True:
        gf.check_events(new_setting,screen,ship,bullets)
        ship.update()
        gf.update_bullets(bullets)
        gf.update_screen(new_setting,screen,ship,bullets)


run_game()

 我们将创建实例的代码就写在ship下面,目前我们的操作都是按照先创建一只小老鼠来的,创建好实例后,我们先让屏幕显示这一只小老鼠看看效果。

 四、小老鼠上灯台

 在Alien类中,我们已经写好了显示函数blitme(),我们只需要在game_functions模块的update_screen()函数里调用blitme就可以了,同样,我们把代码写在ship.blitme()后面。

import sys
import pygame
from bullet import Bullet


def check_keydown_events(event,new_setting,screen,ship,bullets):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True

    elif event.key == pygame.K_LEFT:
        ship.moving_left = True

    elif event.key == pygame.K_SPACE:
        fire_bullet(new_setting, screen, ship, bullets)

    elif event.key ==pygame.K_q:
        sys.exit()


def check_keyup_events(event,ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False

    if event.key == pygame.K_LEFT:
        ship.moving_left = False


def check_events(new_setting,screen,ship,bullets):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type==pygame.KEYDOWN:
            check_keydown_events(event,new_setting,screen,ship,bullets)

        elif event.type==pygame.KEYUP:
            check_keyup_events(event, ship)

def fire_bullet(new_setting,screen,ship,bullets):
    if len(bullets) < new_setting.bullets_allowed:
        new_bullet = Bullet(new_setting, screen, ship)
        bullets.add(new_bullet)


def update_bullets(bullets):
    bullets.update()
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)

def update_screen(new_setting,screen,ship,bullets,alien):
    screen.fill(new_setting.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    alien.blitme()
pygame.display.flip()

 这里我们要注意,我们将alien作为传参,传给了update_screen,所以我们的主函数调用update_screen的代码需要修改,加上传参alien。

 现在一只小老鼠已经完成,我们来看看效果。

 

 总结

今天完成了一只小老鼠的创建,明天我们来创建一群小老鼠。 

 

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

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

相关文章

C++智能指针介绍与使用

什么是智能指针 智能指针是一种 C 标准库中的模板类&#xff0c;用于管理动态分配内存资源。它们提供了自动化的内存管理功能&#xff0c;可以帮助程序员在避免内存泄漏和野指针的同时&#xff0c;简化内存资源的手动释放。C 标准库中提供了三种主要的智能指针&#xff1a;std…

学习记录——Efficient MOdel轻量化主干模型(iRMB、EMO)、CATnet

Rethinking Mobile Block for Efficient Attention-based Models 结合 CNN 和 Transformer 的倒残差移动模块设计 ICCV-2023 实例化了一个面向移动端应用的iRMB基础模块&#xff08;Inverted Residual Mobile Block&#xff0c;倒残差移动模块&#xff09;&#xff0c;其同时具…

springboot如何区分测试环境、生产环境。分环境启动

一 通过Maven打包时&#xff0c;将不同环境文件打入jar包来区分环境&#xff0c;然后直接启动jar包即可 1 pom.xml文件project标签里面加入以下配置 环境关键字可以根据自己的习惯来改 <profiles><!--开发--><profile><id>dev</id><propert…

前端文件相关总结

先引用掘金上的一个总结&#xff0c;将前端会遇到的文件相关的知识点间的关系串联了起来。 前端技术提供了一些高效的解决方案&#xff1a;文件流操作和切片下载与上传。 1. 文件基本操作 1.1 数据流和文件处理的基本概念 数据流是指连续的数据序列&#xff0c;可以从一个源传输…

并发编程的故事——共享模式之无锁

共享模式之无锁 文章目录 共享模式之无锁一、提出问题二、CAS和volatile三、原子整数四、原子引用五、原子数组六、原子更新器七、原子累加器八、unsafe 一、提出问题 关于对共享变量修改的多线程问题其实就是指令交错问题导致取值的时机相同&#xff0c;最后修改之后以最后一…

【基于空间纹理的残差网络无监督Pansharpening】

Unsupervised Pansharpening method Using Residual Network with Spatial Texture Attention &#xff08;基于空间纹理的残差网络无监督泛锐化方法&#xff09; 近年来&#xff0c;深度学习已经成为最受欢迎的泛锐化工具之一&#xff0c;许多相关方法已经被研究并反映出良好…

Qt xml解析之QXmlStreamReader

文章目录 背景QXmlStreamReader简单介绍使用QXmlStreamReader添加头文件<QXmlStreamReader>toString()toInt()完整代码 背景 项目中遇到需要解析某个方法返回的xml字符串&#xff0c;奈何C/C中没有原生的方法可供调用&#xff0c;只能使用第三方库&#xff0c;搜了一圈资…

OpenCV之filter2D函数

函数原型&#xff1a; CV_EXPORTS_W void filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kernel,Point anchorPoint(-1,-1),double delta0,int borderTypeBORDER_DEFAULT); src: 原图像&#xff1b; dst&#xff1a;输出图像 &#xff0c;和输入的图像具有…

优秀的ui设计作品(合集)

UI设计师需要了解的九个Tips 1.图片类APP排版突破 规则是死的&#xff0c;人是活的。很多时候&#xff0c;如果需求是比较宽要尝试突破原则&#xff0c;用一些另类的排版方式&#xff0c;其实也是做好设计的本质。在图片类app中&#xff0c;错落一些的排版会使你的作品更有魅力…

Ubuntu系统安装VirtualBox后无发安装“增强功能”的解决办法

Ubuntu系统安装VirtualBox后&#xff0c; 在设备选项中点击曾倩功能没有反应&#xff0c;也不能是用多动和剪切板功能&#xff0c;解决办法如下 1. 安装linux-image Terminal执行: sudo apt-get install --reinstall linux-image-$(uname -r) 2. 安装virtualbox-guest-x11 …

9.Redis-zset

zset zset 有序集合 -> 升序常用命令zaddzcardzcountzrangezrevrange -> reverse 逆序zrangebyscorezpopmaxzpopminbzpopmax / bzpopminzrankzrevrankzscorezremzremrangebyrankzremrangebyscorezincrby集合间操作zinter -> 交集zunion -> 并集zdiff -> 差集zin…

0202hdfs的shell操作-hadoop-大数据学习

文章目录 1 进程启停管理2 文件系统操作命令2.1 HDFS文件系统基本信息2.2 介绍2.3 创建文件夹2.4 查看指定文件夹下的内容2.5 上传文件到HDFS2.6 查看HDFS文件内容2.7 下载HDFS文件2.8 HDFS数据删除操作 3 HDFS客户端-jetbrians产品插件3.1 Big Data Tools 安装3.2 配置windows…

睿趣科技:开抖音小店挣钱吗到底

在当今数字化时代&#xff0c;社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台&#xff0c;自然也成为了许多人开设小店、进行创业的选择之一。那么&#xff0c;开抖音小店能否真正实现盈利&#xff0c;成为了一个备受关注的话题。…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量&#xff0c;那…

Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

Android安卓实战项目&#xff08;12&#xff09;—关于身体分析&#xff0c;BMI计算&#xff0c;喝水提醒&#xff0c;食物卡路里计算APP【支持中英文切换】生活助手类APP&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 一.项目运行介绍 B站演示…

第8章 字符输入/输出和输入验证

本章介绍以下内容&#xff1a; 更详细地介绍输入、输出以及缓冲输入和无缓冲输入的区别 如何通过键盘模拟文件结尾条件 如何使用重定向把程序和文件相连接 创建更友好的用户界面 在涉及计算机的话题时&#xff0c;我们经常会提到输入&#xff08;input&#xff09;和输出&#…

Facebook登录SDK

一、Facebook SDK接入 官方文档&#xff1a;https://developers.facebook.com/docs/facebook-login/android 按照流程填写完成 1、选择新建应用 如果已经创建了应用就点【搜索你的应用】&#xff0c;忽略2、3步骤 2、选择【允许用户用自己的Facebook账户登录】 3、填写应用…

简析vue文件编译——AST

简介 首先了解一个概念AST&#xff08;abstract syntax tree&#xff09;抽象语法树&#xff0c;按照大多数教程中的描述&#xff0c;这是一种源代码的抽象语法结构树&#xff0c;树上的每个节点都表示源代码中的一种结构&#xff0c;将源码中的各种嵌套括号等形式&#xff0c…

Android安卓实战项目(13)---记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用!!!(源码在文末)

Android安卓实战项目&#xff08;13&#xff09;—记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用&#xff01;&#xff01;&#xff01;&#xff08;源码在文末&#x1f415;&#x1f415;&#x1f415;&#xff09; 一.项目运行介绍 B站…

antd实现年日输入框联动

效果: 1、默认显示年&#xff0c;日期区间默认显示今年2023——2024 年份显示前5年后5年 2、如果选择了月份&#xff0c;日期区间显示从1月份到12月份 部分代码: (react 使用class类组件)