爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Python代码游戏————星球大战

      首页 知识中心 软件开发 文章详情页

      Python代码游戏————星球大战

      2025-01-15 08:08:20 阅读次数:13

      num,self

      一.Python介绍

      Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。   Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, [ 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

      二.游戏效果呈现

      Python代码游戏————星球大战

       三.主代码

      '''
      Function:
          外星人入侵小游戏
      
      '''
      import os
      import sys
      import cfg
      import random
      import pygame
      from modules import *
      
      
      '''开始游戏'''
      def startGame(screen):
          clock = pygame.time.Clock()
          # 加载字体
          font = pygame.font.SysFont('arial', 18)
          if not os.path.isfile('score'):
              f = open('score', 'w')
              f.write('0')
              f.close()
          with open('score', 'r') as f:
              highest_score = int(f.read().strip())
          # 敌方
          enemies_group = pygame.sprite.Group()
          for i in range(55):
              if i < 11:
                  enemy = enemySprite('small', i, cfg.WHITE, cfg.WHITE)
              elif i < 33:
                  enemy = enemySprite('medium', i, cfg.WHITE, cfg.WHITE)
              else:
                  enemy = enemySprite('large', i, cfg.WHITE, cfg.WHITE)
              enemy.rect.x = 85 + (i % 11) * 50
              enemy.rect.y = 120 + (i // 11) * 45
              enemies_group.add(enemy)
          boomed_enemies_group = pygame.sprite.Group()
          en_bullets_group = pygame.sprite.Group()
          ufo = ufoSprite(color=cfg.RED)
          # 我方
          myaircraft = aircraftSprite(color=cfg.GREEN, bullet_color=cfg.WHITE)
          my_bullets_group = pygame.sprite.Group()
          # 用于控制敌方位置更新
          # --移动一行
          enemy_move_count = 24
          enemy_move_interval = 24
          enemy_move_flag = False
          # --改变移动方向(改变方向的同时集体下降一次)
          enemy_change_direction_count = 0
          enemy_change_direction_interval = 60
          enemy_need_down = False
          enemy_move_right = True
          enemy_need_move_row = 6
          enemy_max_row = 5
          # 用于控制敌方发射子弹
          enemy_shot_interval = 100
          enemy_shot_count = 0
          enemy_shot_flag = False
          # 游戏进行中
          running = True
          is_win = False
          # 主循环
          while running:
              screen.fill(cfg.BLACK)
              for event in pygame.event.get():
                  # --点右上角的X或者按Esc键退出游戏
                  if event.type == pygame.QUIT:
                      pygame.quit()
                      sys.exit()
                  if event.type == pygame.KEYDOWN:
                      if event.key == pygame.K_ESCAPE:
                          pygame.quit()
                          sys.exit()
                  # --射击
                  if event.type == pygame.MOUSEBUTTONDOWN:
                      my_bullet = myaircraft.shot()
                      if my_bullet:
                          my_bullets_group.add(my_bullet)
              # --我方子弹与敌方/UFO碰撞检测
              for enemy in enemies_group:
                  if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None):
                      boomed_enemies_group.add(enemy)
                      enemies_group.remove(enemy)
                      myaircraft.score += enemy.reward
              if pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):
                  ufo.is_dead = True
                  myaircraft.score += ufo.reward
              # --更新并画敌方
              # ----敌方子弹
              enemy_shot_count += 1
              if enemy_shot_count > enemy_shot_interval:
                  enemy_shot_flag = True
                  enemies_survive_list = [enemy.number for enemy in enemies_group]
                  shot_number = random.choice(enemies_survive_list)
                  enemy_shot_count = 0
              # ----敌方移动
              enemy_move_count += 1
              if enemy_move_count > enemy_move_interval:
                  enemy_move_count = 0
                  enemy_move_flag = True
                  enemy_need_move_row -= 1
                  if enemy_need_move_row == 0:
                      enemy_need_move_row = enemy_max_row
                  enemy_change_direction_count += 1
                  if enemy_change_direction_count > enemy_change_direction_interval:
                      enemy_change_direction_count = 1
                      enemy_move_right = not enemy_move_right
                      enemy_need_down = True
                      # ----每次下降提高移动和射击速度
                      enemy_move_interval = max(15, enemy_move_interval-3)
                      enemy_shot_interval = max(50, enemy_move_interval-10)
              # ----遍历更新
              for enemy in enemies_group:
                  if enemy_shot_flag:
                      if enemy.number == shot_number:
                          en_bullet = enemy.shot()
                          en_bullets_group.add(en_bullet)
                  if enemy_move_flag:
                      if enemy.number in range((enemy_need_move_row-1)*11, enemy_need_move_row*11):
                          if enemy_move_right:
                              enemy.update('right', cfg.SCREENSIZE[1])
                          else:
                              enemy.update('left', cfg.SCREENSIZE[1])
                  else:
                      enemy.update(None, cfg.SCREENSIZE[1])
                  if enemy_need_down:
                      if enemy.update('down', cfg.SCREENSIZE[1]):
                          running = False
                          is_win = False
                      enemy.change_count -= 1
                  enemy.draw(screen)
              enemy_move_flag = False
              enemy_need_down = False
              enemy_shot_flag = False
              # ----敌方爆炸特效
              for boomed_enemy in boomed_enemies_group:
                  if boomed_enemy.boom(screen):
                      boomed_enemies_group.remove(boomed_enemy)
                      del boomed_enemy
              # --敌方子弹与我方飞船碰撞检测
              if not myaircraft.one_dead:
                  if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):
                      myaircraft.one_dead = True
              if myaircraft.one_dead:
                  if myaircraft.boom(screen):
                      myaircraft.resetBoom()
                      myaircraft.num_life -= 1
                      if myaircraft.num_life < 1:
                          running = False
                          is_win = False
              else:
                  # ----更新飞船
                  myaircraft.update(cfg.SCREENSIZE[0])
                  # ----画飞船
                  myaircraft.draw(screen)
              if (not ufo.has_boomed) and (ufo.is_dead):
                  if ufo.boom(screen):
                      ufo.has_boomed = True
              else:
                  # ----更新UFO
                  ufo.update(cfg.SCREENSIZE[0])
                  # ----画UFO
                  ufo.draw(screen)
              # --画我方飞船子弹
              for bullet in my_bullets_group:
                  if bullet.update():
                      my_bullets_group.remove(bullet)
                      del bullet
                  else:
                      bullet.draw(screen)
              # --画敌方子弹
              for bullet in en_bullets_group:
                  if bullet.update(cfg.SCREENSIZE[1]):
                      en_bullets_group.remove(bullet)
                      del bullet
                  else:
                      bullet.draw(screen)
              if myaircraft.score > highest_score:
                  highest_score = myaircraft.score
              # --得分每增加2000我方飞船增加一条生命
              if (myaircraft.score % 2000 == 0) and (myaircraft.score > 0) and (myaircraft.score != myaircraft.old_score):
                  myaircraft.old_score = myaircraft.score
                  myaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)
              # --敌人都死光了的话就胜利了
              if len(enemies_group) < 1:
                  is_win = True
                  running = False
              # --显示文字
              # ----当前得分
              showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8)
              showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24)
              # ----敌人数量
              showText(screen, 'ENEMY: ', cfg.WHITE, font, 370, 8)
              showText(screen, str(len(enemies_group)), cfg.WHITE, font, 370, 24)
              # ----历史最高分
              showText(screen, 'HIGHEST: ', cfg.WHITE, font, 540, 8)
              showText(screen, str(highest_score), cfg.WHITE, font, 540, 24)
              # ----FPS
              showText(screen, 'FPS: ' + str(int(clock.get_fps())), cfg.RED, font, 8, 8)
              # --显示剩余生命值
              showLife(screen, myaircraft.num_life, cfg.GREEN)
              pygame.display.update()
              clock.tick(cfg.FPS)
          with open('score', 'w') as f:
              f.write(str(highest_score))
          return is_win
      
      
      '''主函数'''
      def main():
          # 初始化
          pygame.init()
          pygame.display.set_caption('外星人入侵 ')
          screen = pygame.display.set_mode(cfg.SCREENSIZE)
          pygame.mixer.init()
          pygame.mixer.music.load(cfg.BGMPATH)
          pygame.mixer.music.set_volume(0.4)
          pygame.mixer.music.play(-1)
          while True:
              is_win = startGame(screen)
              endInterface(screen, cfg.BLACK, is_win)
      
      
      '''run'''
      if __name__ == '__main__':
          main()

      四.cfg

      '''配置文件'''
      import os


      '''一些颜色'''
      WHITE = (255, 255, 255)
      BLACK = (0, 0, 0)
      GREEN = (50, 250, 5)
      RED = (255, 0, 0)
      '''FPS'''
      FPS = 60
      '''背景音乐'''
      BGMPATH = os.path.join(os.getcwd(), 'resources/bgm.mp3')
      '''屏幕大小'''
      SCREENSIZE = (800, 600)

      五.README

      # Introduction
      https:///s/9UylZkV3sVTQLjThIaVObg

      # Environment
      ```
      OS: Windows10
      Python: Python3.5+(have installed necessary dependencies)
      ```

      # Usage
      ```
      Step1:
      pip install -r requirements.txt
      Step2:
      run "python Game13.py"
      ```

      # Game Display
      ![giphy](demonstration/running.gif)

      requirements:pygame

      六.sprites

      '''
      Function:
          定义精灵类

      '''
      import sys
      import pygame


      '''我方飞船类'''
      class aircraftSprite(pygame.sprite.Sprite):
          def __init__(self, color, bullet_color, **kwargs):
              pygame.sprite.Sprite.__init__(self)
              # 生命值
              self.num_life = 3
              self.max_num_life = 5
              # 最小单元
              self.cell = [3, 3]
              self.num_cols = 15
              self.num_rows = 8
              # 用于碰撞检测
              self.rect = pygame.Rect(0, 550, self.cell[0] * self.num_cols, self.cell[0] * self.num_rows)
              # 填充颜色区域
              self.filled_cells = [7,21,22,23,36,37,38,46,47,48,49,50,51,52,53,54,55,56,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119]
              # 飞船颜色
              self.color = color
              # 飞船子弹颜色
              self.bullet_color = bullet_color
              # 子弹是否在冷却中
              self.is_cooling = False
              self.init_count = 35
              self.cooling_count = self.init_count
              # 得分
              self.score = 0
              # 避免重复增加生命值
              self.old_score = -1
              self.resetBoom()
          '''射击'''
          def shot(self):
              if self.is_cooling:
                  return None
              self.is_cooling = True
              self.cooling_count = self.init_count
              return myBulletSprite(self.rect.x + self.rect.width // 2, self.rect.y, self.bullet_color)
          '''在屏幕上画出来'''
          def draw(self, screen):
              for i in range(0, len(self.filled_cells)):
                  y = self.filled_cells[i] // self.num_cols
                  x = self.filled_cells[i] % self.num_cols
                  rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                  pygame.draw.rect(screen, self.color, rect)
          '''更新飞船位置等信息'''
          def update(self, WIDTH):
              # 位置信息
              x = pygame.mouse.get_pos()[0] - (self.rect.width // 2)
              if x < 0:
                  x = pygame.mouse.get_pos()[0]
              elif x > WIDTH - self.rect.width:
                  x = WIDTH - self.rect.width
              self.rect.x = x
              # 子弹信息
              if self.is_cooling:
                  self.cooling_count -= 1
                  if self.cooling_count == 0:
                      self.is_cooling = False
          '''被击中后爆炸'''
          def boom(self, screen):
              self.boomed_rect.x = self.rect.x
              self.boomed_rect.y = self.rect.y
              self.boomed_count += 1
              if self.boomed_count % 1 == 0:
                  self.boomed_frame += 1
                  for i in range(0, len(self.boomed_filled_cells)):
                      y = self.boomed_filled_cells[i] // self.boomed_num_cols
                      x = self.boomed_filled_cells[i] % self.boomed_num_cols
                      rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
              if self.boomed_frame > 4:
                  return True
              else:
                  return False
          '''重置爆炸所用到的数据'''
          def resetBoom(self):
              # 被击中爆炸时用
              self.one_dead = False
              self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
              self.boomed_cell = [3, 3]
              self.boomed_num_cols = 11
              self.boomed_num_rows = 9
              self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols*self.boomed_cell[0], self.boomed_num_rows*self.boomed_cell[1])
              # 控制每帧的时间
              self.boomed_count = 0
              # 爆炸特效当前帧
              self.boomed_frame = 0


      '''ufo类'''
      class ufoSprite(pygame.sprite.Sprite):
          def __init__(self, color, **kwargs):
              pygame.sprite.Sprite.__init__(self)
              # 击中该类获得的奖励
              self.reward = 200
              self.color = color
              self.reset()
          '''在屏幕上画出来'''
          def draw(self, screen):
              if self.is_dead:
                  return None
              for i in range(0, len(self.filled_cells)):
                  y = self.filled_cells[i] // self.num_cols
                  x = self.filled_cells[i] % self.num_cols
                  rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                  pygame.draw.rect(screen, self.color, rect)
          '''更新UFO位置等信息'''
          def update(self, WIDTH):
              if self.rect.x + self.rect.width < 0 or self.rect.x > WIDTH:
                  self.rect.x += self.low_speed
              else:
                  self.rect.x += self.high_speed
              if self.rect.x > WIDTH + 500:
                  self.reset()
          '''被击中后爆炸'''
          def boom(self, screen):
              self.boomed_rect.x = self.rect.x
              self.boomed_rect.y = self.rect.y
              self.boomed_count += 1
              if self.boomed_count % 1 == 0:
                  self.boomed_frame += 1
                  for i in range(0, len(self.boomed_filled_cells)):
                      y = self.boomed_filled_cells[i] // self.boomed_num_cols
                      x = self.boomed_filled_cells[i] % self.boomed_num_cols
                      rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
              if self.boomed_frame > 4:
                  return True
              else:
                  return False
          '''重置'''
          def reset(self):
              self.cell = [3, 3]
              self.num_cols = 16
              self.num_rows = 7
              self.rect = pygame.Rect(-500 - self.num_cols * self.cell[0], 60, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
              self.filled_cells = [5,6,7,8,9,10,19,20,21,22,23,24,25,26,27,28,34,35,36,37,38,39,40,41,42,43,44,45,49,50,52,53,55,56,58,59,61,62,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,82,83,84,87,88,91,92,93,99,108]
              self.low_speed = 1
              self.high_speed = 2
              self.is_dead = False
              # 被击中爆炸时用
              self.has_boomed = False
              self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
              self.boomed_cell = [3, 3]
              self.boomed_num_cols = 11
              self.boomed_num_rows = 9
              self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols*self.boomed_cell[0], self.boomed_num_rows*self.boomed_cell[1])
              self.boomed_count = 0
              self.boomed_frame = 0


      '''敌方类'''
      class enemySprite(pygame.sprite.Sprite):
          def __init__(self, category, number, color, bullet_color, **kwargs):
              pygame.sprite.Sprite.__init__(self)
              self.cell = [3, 3]
              # 编号
              self.number = number
              # 种类
              self.category = category
              if category == 'small':
                  self.reward = 20
                  self.num_cols = 8
                  self.num_rows = 8
                  self.rect = pygame.Rect(0, 0, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
                  self.filled_cells = [[3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38,39,42,45,49,51,52,54,56,58,61,63],
                                       [3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38,39,41,43,44,46,48,55,57,62]]
              elif category == 'medium':
                  self.reward = 15
                  self.num_cols = 11
                  self.num_rows = 8
                  self.rect = pygame.Rect(0, 0, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
                  self.filled_cells = [[2,8,11,14,18,21,22,24,25,26,27,28,29,30,32,33,34,35,37,38,39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,59,60,61,62,63,64,68,74,78,86],
                                       [2,8,14,18,24,25,26,27,28,29,30,34,35,37,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,65,66,68,74,76,80,81,83,84]]
              elif category == 'large':
                  self.reward = 10
                  self.num_cols = 12
                  self.num_rows = 8
                  self.rect = pygame.Rect(0, 0, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
                  self.filled_cells = [[4,5,6,7,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,67,68,69,73,74,77,78,81,82,86,87,92,93],
                                       [4,5,6,7,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,63,64,67,68,74,75,77,78,80,81,84,85,94,95]]
              self.color = color
              self.bullet_color = bullet_color
              self.speed = [8, 20]
              self.change_count = 0
              self.change_flag = False
              # 被击中爆炸时用
              self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
              self.boomed_cell = [3, 3]
              self.boomed_num_cols = 11
              self.boomed_num_rows = 9
              self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols * self.boomed_cell[0], self.boomed_num_rows * self.boomed_cell[1])
              self.boomed_count = 0
              self.boomed_frame = 0
          '''射击'''
          def shot(self):
              return enemyBulletSprite(self.rect.x + self.rect.width // 2, self.rect.y, self.bullet_color)
          '''在屏幕上画出来'''
          def draw(self, screen):
              if self.change_count > 50:
                  self.change_count = 0
                  self.change_flag = not self.change_flag
              if self.change_flag:
                  for i in range(0, len(self.filled_cells[0])):
                      y = self.filled_cells[0][i] // self.num_cols
                      x = self.filled_cells[0][i] % self.num_cols
                      rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
              else:
                  for i in range(0, len(self.filled_cells[1])):
                      y = self.filled_cells[1][i] // self.num_cols
                      x = self.filled_cells[1][i] % self.num_cols
                      rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
          '''更新敌方位置等信息'''
          def update(self, direction, HEIGHT):
              # 用于改变形状
              self.change_count += 1
              # 更新位置信息
              if direction == 'right':
                  self.rect.x += self.speed[0]
              elif direction == 'left':
                  self.rect.x -= self.speed[0]
              elif direction == 'down':
                  self.rect.y += self.speed[1]
              if self.rect.y >= HEIGHT - self.rect.height:
                  return True
              else:
                  return False
          '''被击中后爆炸'''
          def boom(self, screen):
              self.boomed_rect.x = self.rect.x
              self.boomed_rect.y = self.rect.y
              self.boomed_count += 1
              if self.boomed_count % 1 == 0:
                  self.boomed_frame += 1
                  for i in range(0, len(self.boomed_filled_cells)):
                      y = self.boomed_filled_cells[i] // self.boomed_num_cols
                      x = self.boomed_filled_cells[i] % self.boomed_num_cols
                      rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
              if self.boomed_frame > 4:
                  return True
              else:
                  return False


      '''我方子弹精灵类'''
      class myBulletSprite(pygame.sprite.Sprite):
          def __init__(self, x, y, color, **kwargs):
              pygame.sprite.Sprite.__init__(self)
              self.cell = [2, 2]
              self.num_cols = 1
              self.num_rows = 4
              self.rect = pygame.Rect(x, y, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
              self.filled_cells = [0,1,2,3]
              self.speed = 8
              self.color = color
          '''在屏幕上画出来'''
          def draw(self, screen):
              for i in range(0, len(self.filled_cells)):
                  y = self.filled_cells[i] // self.num_cols
                  x = self.filled_cells[i] % self.num_cols
                  rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                  pygame.draw.rect(screen, self.color, rect)
          '''更新子弹位置等信息'''
          def update(self):
              self.rect.y -= self.speed
              if self.rect.y + self.rect.height < 0:
                  return True
              else:
                  return False


      '''敌方子弹精灵类'''
      class enemyBulletSprite(pygame.sprite.Sprite):
          def __init__(self, x, y, color):
              pygame.sprite.Sprite.__init__(self)
              self.cell = [3, 3]
              self.num_cols = 3
              self.num_rows = 7
              self.rect = pygame.Rect(x, y, self.num_cols * self.cell[0], self.num_rows * self.cell[1])
              self.filled_cells = [[0,4,8,10,12,16,20],
                                   [2,4,6,10,14,16,18]]
              self.change_count = 0
              self.change_flag = False
              self.speed = 4
              self.color = color
          '''在屏幕上画出来'''
          def draw(self, screen):
              if self.change_count > 2:
                  self.change_count = 0
                  self.change_flag = not self.change_flag
              if self.change_flag:
                  for i in range(0, len(self.filled_cells[0])):
                      y = self.filled_cells[0][i] // self.num_cols
                      x = self.filled_cells[0][i] % self.num_cols
                      rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
              else:
                  for i in range(0, len(self.filled_cells[1])):
                      y = self.filled_cells[1][i] // self.num_cols
                      x = self.filled_cells[1][i] % self.num_cols
                      rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
                      pygame.draw.rect(screen, self.color, rect)
          '''更新子弹位置等信息'''
          def update(self, HEIGHT):
              # 用于改变子弹形状的计数
              self.change_count += 1
              # 位置信息
              self.rect.y += self.speed
              if self.rect.y > HEIGHT:
                  return True
              else:
                  return False

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/lzl10211345/article/details/129048176,作者:小刘在C站,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:低代码开发重要工具:jvs-logic(逻辑引擎)2.1.6版本功能清单

      下一篇:算法题:剑指 Offer 38. 字符串的排列(题目+思路+代码+注释)回溯法 时空 5ms击败99.14%用户 一次AC

      相关文章

      2025-04-22 09:28:31

      零基础玩转C语言系列第二章——分支语句

      零基础玩转C语言系列第二章——分支语句

      2025-04-22 09:28:31
      break , num , switch , 分支 , 语句
      2025-03-27 10:12:02

      java知识点总结(二)

      java知识点总结(二)

      2025-03-27 10:12:02
      int , new , num , String , switch , 循环 , 数组
      2025-03-25 07:59:27

      【C++前后缀分解 最大子段和】1191. K 次串联后最大子数组之和|1747

      【C++前后缀分解 最大子段和】1191. K 次串联后最大子数组之和|1747

      2025-03-25 07:59:27
      arr , C++ , lt , num
      2025-03-24 08:46:07

      【向上取整/向下取整】C语言向上或向下取整 函数

      【向上取整/向下取整】C语言向上或向下取整 函数

      2025-03-24 08:46:07
      double , num , 取整
      2025-03-24 08:45:46

      React项目中,Antdesign的Tab组件,状态更新,视图没有更新问题

      React项目中,Antdesign的Tab组件,状态更新,视图没有更新问题

      2025-03-24 08:45:46
      content , num , 修改 , 更新 , 组件 , 视图
      2025-03-21 07:03:12

      【C++图论】1993. 树上的操作|1861

      【C++图论】1993. 树上的操作|1861

      2025-03-21 07:03:12
      num , true , user , 节点
      2025-03-11 09:35:24

      【python基础(八)】类的定义、属性、函数种类;创建对象,使用对象

      【python基础(八)】类的定义、属性、函数种类;创建对象,使用对象

      2025-03-11 09:35:24
      self , 实例 , 对象 , 属性 , 方法
      2025-03-06 09:16:11

      C语言刷题 | 输入一个数输出对应的值(13)

      C语言刷题 | 输入一个数输出对应的值(13)

      2025-03-06 09:16:11
      num , 语句 , 输出
      2025-03-05 09:11:26

      【Python】递归求解汉诺塔+八皇后问题

      【Python】递归求解汉诺塔+八皇后问题

      2025-03-05 09:11:26
      num , yield , 列表 , 盘子 , 递归 , 题解
      2025-03-04 09:23:58

      C++算法:135分发糖果

      C++算法:135分发糖果

      2025-03-04 09:23:58
      amp , int , num , vRet , 糖果
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5250730

      查看更多

      最新文章

      零基础玩转C语言系列第二章——分支语句

      2025-04-22 09:28:31

      【C++前后缀分解 最大子段和】1191. K 次串联后最大子数组之和|1747

      2025-03-25 07:59:27

      【向上取整/向下取整】C语言向上或向下取整 函数

      2025-03-24 08:46:07

      【C++图论】1993. 树上的操作|1861

      2025-03-21 07:03:12

      C语言刷题 | 输入一个数输出对应的值(13)

      2025-03-06 09:16:11

      【Python】递归求解汉诺塔+八皇后问题

      2025-03-05 09:11:26

      查看更多

      热门文章

      Python|面向对象编程的类和实例

      2023-02-24 09:42:48

      Python魔法方法(15):__set __(self, instance, value) 方法

      2023-04-24 11:27:18

      【C++】C++ STL中 next_permutation,prev_permutation函数的用法

      2025-02-10 08:56:02

      【C++ 博弈论 数学】1927. 求和游戏|2004

      2025-02-28 09:28:12

      Python 使用 OpenCV 进行全景拼接

      2024-12-18 08:28:12

      使用 Python 和 OpenCV 实现摄像头人脸检测并截图

      2024-12-18 08:24:44

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      C++算法:282给表达式添加运算符

      【C++】C++ STL中 next_permutation,prev_permutation函数的用法

      Python 使用 OpenCV 进行全景拼接

      Python面向对象程序设计讲座【修订】

      C++算法:135分发糖果

      python小游戏——走出迷宫代码开源

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号