pygame--坦克大战(二)

2024-04-03 13:36
文章标签 大战 pygame 坦克

本文主要是介绍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)

这篇关于pygame--坦克大战(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873058

相关文章

军事目标无人机视角检测数据集 3500张 坦克 带标注voc

数据集概述 该数据集包含3500张无人机拍摄的图像,主要用于坦克目标的检测。数据集已经按照VOC(Visual Object Classes)标准进行了标注,适用于训练深度学习模型,特别是物体检测模型。 数据集特点 目标明确:专注于坦克这一特定军事目标的检测。多样视角:图像采集自无人机的不同飞行高度和角度,涵盖了各种环境下的坦克图像。高质量标注:每个坦克实例都被精确标注,包括位置信息和类别

Pygame游戏编程入门笔记

目录 1. Python游戏编程入门2. 建立开发环境3. 简单示例4. 绘制不同形状5. 事件监听举例6. 用pygame打印文本7. 键盘事件8. 鼠标事件9. 轮询键盘10. 轮询鼠标11. 角度与弧度12. 遍历圆周13. 矢量图与位图14. 获取已有的surface15. 加载位图16. 绘制位图17. 绘制游戏背景图18. 缩放图像19. 旋转20. 用精灵实现动画 20.1.

Web开发基础:JavaScript飞机大战

超详细的Java知识点路线图 飞机大战 图片链接:https://pan.baidu.com/s/1elfvlHClwwDnc8buUnySPw 提取码:mi5y 功能点: 1、飞机跟着鼠标移动 在onmousemove事件中获得鼠标的坐标,设置给飞机图片 2、发射子弹 子弹需要动态添加到网页中 动态创建标签对象 document.createElement(“标签名”); 动态添加

creator物理引擎 /RPG运动类型 /坦克

1 applyForce/ToCenter(). 这个力怎么计算 (牛顿第二定律F=ma) 2 .linearVelocity()是像素/米 (看源码) 3 why到第四帧才有速度 CocosCreator官方文档物理引擎Demo(physics-example,下载链接:https://github.com/2youyou2/physics-example) ----------------

十四、坦克大战(上)

文章目录 一、坦克大战游戏演示(略)二、java绘图坐标体系三、java绘图技术3.1 快速入门3.2 绘图原理Graphics类 四、java事件处理机制五、绘制坦克5.1 坦克抽象类、己方坦克、敌方坦克5.2 自定义面板5.3 绘图界面 一、坦克大战游戏演示(略) 二、java绘图坐标体系 三、java绘图技术 3.1 快速入门 package com.g

新能源车的补能大战:画饼越来越大,实现越来越难

转眼间2024年已经过半,上半年汽车行业的竞争中,纵然有一些车企表现出色,但结合目标完成度来看,车企们却普遍未能交出高分答卷,目标完成度普遍在30%左右,仅有比亚迪、长安、吉利等少部分车企目标完成度超过了40%。 当然,汽车销量存在季节性变化,下半年利用“金九银十”和春节前的购车高峰期冲击销量,车企仍有望实现目标。然而在另一项“考试”中,今年车企们却可能要以不及格收场。 在新能源汽车市

winfrom坦克大战

http://yunpan.cn/cfdRYUPyBWDWc  提取码 bf89

【坦克大战一】——简单实现小结

一、【背景】       小时候对于游戏的痴迷让我对于游戏有一种心底的渴望,然而随着时间的推移阅历、经历的增加以及现在从事的编程行业似乎和游戏越来越远;在工作中对技术的要求以及未来技术的分量加上一次偶然的机会重新燃起我对游戏的渴望,不过这次的游戏并不仅仅是痴迷,而是让自己拥有一颗归零的心态在游戏编程的角度去学习那些基础的知识。       跟着马士兵教育讲解的坦克大战教程,学习完了前四节课,一

Java学习Day33:HTML 第四章:大战虎先锋(js)

1.小案例 function fl(){var div =document.getElementById("flush")var data =new Date();baoshan ="❤❤!性感荷官在线发牌!❤❤"+data.getFullYear()+"年"+data.getMonth()+1+ "月"+data.getDate()+"日"+data.getHours()+"时"+data.g

计算机视觉-猫狗大战

文章目录 一.猫狗大战1.1 简介1.2 数据集 二.代码:dataset.pytrain.pypredict.py 三.程序输出:train.pypredict.py 一.猫狗大战 1.1 简介 这是计算机视觉系列的第一篇博文,主要介绍用TensorFlow来实现猫狗分类、识别。该项目主要包括dataset、train、predict三部分。其中dataset.py主要是