pygame--坦克大战(二)

加载敌方坦克

敌方坦克的方向是随机的,使用随机数生成。

初始化敌方坦克。

class EnemyTank(Tank):def __init__(self,left,top,speed):self.images = {'U': pygame.image.load('img/enemy1U.gif'),'D': pygame.image.load('img/enemy1D.gif'),'L': pygame.image.load('img/enemy1L.gif'),'R': pygame.image.load('img/enemy1R.gif')}self.direction = self.randDirection()self.image = self.images[self.direction]# 坦克所在的区域  Rect->self.rect = self.image.get_rect()# 指定坦克初始化位置 分别距x,y轴的位置self.rect.left = leftself.rect.top = top# 新增速度属性self.speed = speedself.stop = True

生成随机的四个方向

  def randDirection(self):num = random.randint(1,4)if num == 1:return 'U'elif num == 2:return 'D'elif num == 3:return 'L'elif num == 4:return 'R'

创建敌方坦克

  #创建敌方坦克def creatEnemyTank(self):top = 100speed = random.randint(3,6)for i in range(MainGame.EnemTank_count):#每次都随机生成一个left值left = random.randint(1, 7)eTank = EnemyTank(left*100,top,speed)MainGame.EnemyTank_list.append(eTank)

坦克类的优化

class Tank:'''坦克类'''def display_tank(self) -> None:'''显示坦克'''# 获取最新坦克的朝向位置图片self.image = self.images.get(self.direction)MainGame.window.blit(self.image,self.rect)def move(self) -> None:'''坦克的移动'''if self.direction == "L":# 判断坦克的位置是否已左边界if self.rect.left > 0:# 修改坦克的位置 离左边的距离  - 操作self.rect.left = self.rect.left - self.speedelif self.direction == "R":# 判断坦克的位置是否已右边界if self.rect.left + self.rect.width < SCREEN_WIDTH:# 修改坦克的位置 离左边的距离  + 操作self.rect.left = self.rect.left + self.speedelif self.direction == "U":# 判断坦克的位置是否已上边界if self.rect.top > 0:# 修改坦克的位置 离上边的距离  - 操作self.rect.top = self.rect.top - self.speedelif self.direction == "D":# 判断坦克的位置是否已下边界if self.rect.top + self.rect.height < SCREEN_HEIGHT:# 修改坦克的位置 离上边的距离  + 操作self.rect.top = self.rect.top + self.speeddef shot(self) -> None:'''坦克的射击'''passclass MyTank(Tank):'''我方坦克类'''def __init__(self,left:int,top:int) -> None:# 设置我方坦克的图片资源self.images = {'U':pygame.image.load('./img/p1tankU.gif'),'D':pygame.image.load('./img/p1tankD.gif'),'L':pygame.image.load('./img/p1tankL.gif'),'R':pygame.image.load('./img/p1tankR.gif'),}# 设置我方坦克的方向self.direction = 'L'# 获取图片信息self.image = self.images.get(self.direction)# 获取图片的矩形self.rect = self.image.get_rect()# 设置我方坦克位置self.rect.left = leftself.rect.top = top# 设置移动速度self.speed = 10# 设置移动开关, False 表示不移动, True 表示移动self.remove = Falseclass MainGame:'''游戏主窗口类'''# 游戏主窗口对象window =None# 设置我放坦克my_tank = None# 存储敌方坦克的列表enemy_tank_list = []# 设置敌方坦克的数量enemy_tank_count = 6def __init__(self) -> None:passdef start_game(self) -> None:'''开始游戏'''# 初始化游戏窗口pygame.display.init()# 创建一个窗口MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))# 设置窗口标题pygame.display.set_caption('坦克大战1.0')# 创建一个我方 坦克MainGame.my_tank = MyTank(350,200)# 创建敌方坦克self.create_enemy_tank()# 刷新窗口while True:sleep(0.02)# 给窗口设置填充色MainGame.window.fill(BG_COLOR)# 增加提示文字# 1.要增加文字内容# num = 6text = self.get_text_surface(f'敌方坦克剩余数量{MainGame.enemy_tank_count}')# 2.如何把文字加上MainGame.window.blit(text,(10,10))# 增加事件self.get_event()# 显示 我方坦克MainGame.my_tank.display_tank()# 显示敌方坦克self.display_enemy_tank()# 移动坦克if MainGame.my_tank.remove:MainGame.my_tank.move()pygame.display.update()

敌方坦克随机移动

def rand_move(self):'''随机移动'''# 判断步长是否为0if self.step <= 0:# 如果小于0,更换方向self.direction = self.rand_direction()# 重置步长self.step = 20else:# 如果大于0,移动self.move()# 步长减1self.step -=1

将敌方坦克加到窗口中

  def display_enemy_tank(self) -> None:'''显示敌方坦克'''for e_tank in self.enemy_tank_list:# 显示敌方坦克e_tank.display_tank()# 移动敌方坦克e_tank.rand_move()

在开始游戏方法,加载敌方坦克

 #循环展示敌方坦克self.display_enemy_tank()

运行结果:

image-20211126154440054

完善子弹类 

初始化子弹

 '''子弹类'''def __init__(self,tank) -> None:# 加载图片self.image = pygame.image.load('./img/enemymissile.gif')# 获取子弹的方向self.direction = tank.direction# 获取子弹的图形self.rect = self.image.get_rect()# 设置子弹的位置if self.direction == "L":# 子弹的位置 = 坦克的位置 - 子弹的宽度self.rect.left = tank.rect.left - self.rect.width# 子弹的位置 = 坦克的位置 + 坦克的高度/2 - 子弹的高度/2self.rect.top = tank.rect.top + tank.rect.height/2 - self.rect.height/2elif self.direction == "R":# 子弹的位置 = 坦克的位置 + 坦克的宽度self.rect.left = tank.rect.left + tank.rect.width# 子弹的位置 = 坦克的位置 + 坦克的高度/2 - 子弹的高度/2self.rect.top = tank.rect.top + tank.rect.height/2 - self.rect.height/2elif self.direction == "U":# 子弹的位置 = 坦克的位置 + 坦克的宽度/2 - 子弹的宽度/2self.rect.left = tank.rect.left + tank.rect.width/2 - self.rect.width/2# 子弹的位置 = 坦克的位置 - 子弹的高度self.rect.top = tank.rect.top - self.rect.heightelif self.direction == "D":# 子弹的位置 = 坦克的位置 + 坦克的宽度/2 - 子弹的宽度/2self.rect.left = tank.rect.left + tank.rect.width/2 - self.rect.width/2# 子弹的位置 = 坦克的位置 + 坦克的高度self.rect.top = tank.rect.top + tank.rect.height# 设置子弹的速度self.speed = 10

展示子弹

  #展示子弹的方法def displayBullet(self):MainGame.window.blit(self.image,self.rect)

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

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

相关文章

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…

python 爱心代码

效果图&#xff1a; 代码&#xff1a; import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 CANVAS_HEIGHT 480 CANVAS_CENTER_X CANVAS_WIDTH / 2 CANVAS_CENTER_Y CANVAS_HEIGHT / 2 IMAGE_ENLARGE 11 # 设置颜色 HEART_COLOR &…

QT中的文件操作QFile、QDataStream、QTextStream、QBuffer

文件操作概述 1、Qt中IO操作的处理方式 &#xff08;1&#xff09;、Qt通过统一的接口简化了文件与外部设备的操作方式 &#xff08;2&#xff09;、Qt中的文件被看做是一种特殊的外部设备 &#xff08;3&#xff09;、Qt中的文件操作与外部设备操作相同 2、IO操作中的关键…

Topaz Video AI for Mac v5.0.0激活版 视频画质增强软件

Topaz Video AI for Mac是一款功能强大的视频处理软件&#xff0c;专为Mac用户设计&#xff0c;旨在通过人工智能技术为视频编辑和增强提供卓越的功能。这款软件利用先进的算法和深度学习技术&#xff0c;能够自动识别和分析视频中的各个元素&#xff0c;并进行智能修复和增强&…

DAY17 平衡二叉树二叉树所有路径左叶子之和

12.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树? 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子树都是一棵平衡二叉树。它是一棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格

xls文件&#xff1a; 后端代码&#xff1a; InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现&#xff0c;主要从以下两个方面&#xff1a; 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途&#xff1a; sub&#xff1a;下标、sup&#xff1a;上标、var 变量 代码如下&am…

docker搭建CI/CD环境配置过程中的常见问题

一、Jenkins 1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepo…

端点攻击剖析:网络攻击如何破坏企业网络

为了实现真正有效的网络安全态势&#xff0c;将公司的所有设备作为网络设备进行保护至关重要。攻击者可以将任何端点&#xff08;电话、计算机、虚拟机、嵌入式设备、服务器、POS 终端&#xff09;变成进入组织的入口点。 未受保护的端点是恶意行为者的主要攻击媒介&#xff0…

Git 核心知识

2024年4月2日更新 Git 安装 官网下载&#xff0c;Git 选择合适的版本&#xff0c;无脑下一步即可。 安装成功之后&#xff0c;鼠标右键任意的文件夹&#xff0c;会出现 Git GUI 的选项&#xff0c;即安装成功 安装注意事项 安装前&#xff0c;检查环境变量 &#xff0c; 如…

15.Python访问数据库

如果数据量较少&#xff0c;则我们可以将数据保存到文件中&#xff1b;如果数据量较 大&#xff0c;则我们可以将数据保存到数据库中。 1 SQLite数据库 SQLite是嵌入式系统使用的关系数据库&#xff0c;目前的主流版本是SQLite 3。SQLite是开源的&#xff0c;采用C语言编写而…

Springboot整合Milvus向量库

1. Milvus的Maven依赖&#xff0c; 配置如下 <dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.3.4</version><exclusions><exclusion><artifactId>log4j-slf4j-imp…

组合总和-java

题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

HTML常用的图片标签和超链接标签

目录 一.常用的图片标签和超链接标签&#xff1a; 1.超链接标签&#xff1a; 前言: 超链接的使用&#xff1a; target属性: 1)鼠标样式&#xff1a; 2)颜色及下划线: 总结: 2.图片标签&#xff1a; 前言: img的使用: 设置图片&#xff1a; 1.设置宽度和高度: 2.HTM…

C++心决之内联函数+auto关键字+指针空值

目录 7.内联函数 7.1 概念 7.2 特性 8. auto关键字(C11) 8.1 类型别名思考 8.2 auto简介 8.3 auto的使用细则 8.4 auto不能推导的场景 9. 基于范围的for循环(C11) 9.1 范围for的语法 9.2 范围for的使用条件 10. 指针空值nullptr(C11) 10.1 C98中的指针空值 7.内联…

R语言颜色细分

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

18.web 应用测试

每年必考&#xff1b; 考几个关键点&#xff1a; 1、计算通信量&#xff1b;给定并发多少、每个并发事务请求的量是多少、单位时间并发有多少个请求&#xff1b;计算吞吐量&#xff1b; 解&#xff1a;记公式&#xff1b;课上不讲&#xff0c;真题里有公式&#xff1b;比较容易…

解决Flutter应用在苹果商店上架中常见的问题与挑战

引言 Flutter是一款由Google推出的跨平台移动应用开发框架&#xff0c;其强大的性能和流畅的用户体验使其备受开发者青睐。然而&#xff0c;开发一款应用只是第一步&#xff0c;将其成功上架到苹果商店才是实现商业目标的关键一步。本文将详细介绍如何使用Flutter将应用程序上…

第十四章 MySQL

一、MySQL 1.1 MySql 体系结构 MySQL 架构总共四层&#xff0c;在上图中以虚线作为划分。 1. 最上层的服务并不是 MySQL 独有的&#xff0c;大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如&#xff1a;连接处理、授权认证、安全等。 2. 第二层的架构包括…