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

2023-10-04 22:48

本文主要是介绍星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

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

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

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

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

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

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

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

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

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

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

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

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


目录

系列文章目录

文章目录

前言

一、解放小花猫

 二、修改子弹样式

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

总结


前言

前面已经完成了游戏一代,也就是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.chinasem.cn/article/2894

相关文章

Flink实战案例(十六):Flink 异步IO 简介

1 Aysnc I/O是啥? Async I/O 是阿里巴巴贡献给社区的一个呼声非常高的特性,于1.2版本引入。  主要目的:是为了解决与外部系统交互时网络延迟成为了系统瓶颈的问题。  场景: 流计算系统中经常需要与外部系统进行交互,比如需要查询外部数据库以关联上用户的额外信息。通常,我们的实现方式是向数据库发送用户a的查询请求(例如在MapFunction中),然后等待结果返回,在这

【硬刚ES】ES基础(十六)基于词项和基于全文的搜索

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。 DELETE productsPUT products{"settings": {"number_of_shards": 1}}POST /products/_bulk{ "index": { "_id": 1 }}{ "productID" : "XHDK-

【Canvas与纹饰】环形小蜜蜂纹饰

【成图】 【代码】 <!DOCTYPE html><html lang="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><head><title>环形小蜜蜂纹饰</title><style type="text/css">.centerlize{margin:0 auto;

【Unity 3D】学习笔记十六:实例-添加与关闭窗口

Unity 学习笔记十六 学习资料:《Unity 3D游戏开发》 宣雨松 在游戏里,是可以动态的添加与关闭一个游戏窗口的,所以这次我们就制作一个可以动态添加与关闭窗口的实例。 例子:

递推—杭电2044 一只小蜜蜂...

http://acm.hdu.edu.cn/showproblem.php?pid=2044 一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35811    Accepted Submission(s): 1317

QT教程-十六,QT中如何解析JSON

一,对json的初步认识         (这里我们主要说明最常用的,以一个宏观的概念来说一下),json是一种数据格式,作用就是便于传递信息,我们可以按其结构和对应关系,拿到我们想要的数据。其主要结构为:json对象(大括号包裹 { }),以及json数组(中括号包裹[ ])。 例子: json对象{"name":"张三", "age":"20", "city":"西安"} json数组

24-8-31-读书笔记(十六)-《契诃夫文集》(十一)([俄] 契诃夫 [译] 汝龙 )

文章目录 《契诃夫文集》(十一)([俄] 契诃夫 [译] 汝龙 )目录阅读笔记记录总结 《契诃夫文集》(十一)([俄] 契诃夫 [译] 汝龙 )   8月最后一天了,心里很多的感慨,说不出是一个什么样的感觉,很不舒服,也很不痛快,有人说这是一个从无知到有知的痛苦的过程,就当他说的对吧!《契诃夫文集》是今年才买的一套文集,第十一卷是契诃夫的喜剧集,我特别喜欢俄国沙皇时期末期的作家,

PMP错题总结(十六)

本文是PMP考试的错题总结,适合想增强分数的学习者参与,本篇文章是我自己的学习笔记,供大家参考 因果图(鱼骨图、石川图)是一种分解技术,有助于追溯造成非预期结果的根本原因。 发生了已识别的风险,启动应急计划中的应对措施。 最初,两名团队成员负责解决冲突。如果冲突升级,项目经理应帮忙促成令人满意的解决方案。 并非所有报告的问题都需要更改请求。首先,您需要确定稳定性问题是否在可接受的容忍水平之

vue学习十六(vuex)

文章目录 概念实例 概念 Vuex是用来管理组件之间通信的一个插件 state:用来存放组件之间共享的数据。他跟组件的data选项类似,只不过data选项是用来存放组件的私有数据。 getters:有时候,我们需要对state的数据进行筛选,过滤。这些操作都是在组件的计算属性进行的。如果多个组件需要用到筛选后的数据,那我们就必须到处重复写该计算属性函数;或者将其提取到一个

使用 C# 开发智能手机软件:推箱子(十六)

这是“ 使用 C# 开发智能手机软件:推箱子 ” 系列文章的第十六篇。在这篇文章中,介绍 Window/ConfigDlg.cs 源程序文件。这个源程序文件包含 ConfigDlg 类,该类继承自 System.Windows.Forms.Form 类,表示推箱子的“配置”对话框。如下图所示:     下面是 Window/ConfigDlg.Designer.cs 的源