python小游戏—摧毁基地

前言

python新手。最近用python写了一款小游戏,只能算是对大佬的拙劣模仿。代码冗杂,后面有时间会进行优化。如需引用请附上本文地址,有时间会进行不定期更改。请大佬轻喷。

import pygame
import random
import time
import mathSCREEN_WIDTH = 800  # 窗口宽度
SCREEN_HEIGHT = 600  # 窗口高度
BG_COLOR = pygame.Color(0, 0, 0)  # 窗口背景颜色
FG_COLOR = pygame.Color(255, 255, 255)  # 前景颜色
'''摧毁基地'''class MainGame:window = NoneAttacker1 = Nonecount = 0randNum = 0baseList = []protectorList = []myBulletList = []baseBulletList = []  # 基地子弹列表def start(self):"""游戏开始"""pygame.display.init()MainGame.window = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])self.createBase()self.createProtector()self.createAttacker()pygame.display.set_caption("摧毁基地")while True:time.sleep(0.02)MainGame.window.fill(BG_COLOR)self.getEvent()for base in MainGame.baseList:if MainGame.Attacker1:MainGame.window.blit(self.showText("boss剩余生命值{0}                                              ""攻击者剩余生命值{1}".format(base.hp, MainGame.Attacker1.hp)), (5, 5))self.blitBase()self.blitProtector()self.blitAttacker()self.blitBullet()if MainGame.count > 50:self.createBaseBullet()MainGame.count = 0MainGame.count += 1MainGame.randNum += 1self.blitBaseBullet()if MainGame.Attacker1:if not MainGame.Attacker1.stop:MainGame.Attacker1.move()pygame.display.update()def createBase(self):"""基地创建"""base = Base(SCREEN_WIDTH / 2 - 100, 25)MainGame.baseList.append(base)def blitBase(self):"""显示基地"""for base in MainGame.baseList:if base.live:base.displayBase()base.randMove()else:MainGame.baseList.remove(base)def createProtector(self):"""创建保护者"""for i in range(10):left = random.randint(0, 300)top = 30 * random.randint(5, 12)protector = Protector(left, top)MainGame.protectorList.append(protector)def blitProtector(self):"""显示保护者"""for protector in MainGame.protectorList:protector.displayProtector()protector.randMove()def createAttacker(self):"""创建攻击者"""top = 480left = random.randint(0, 700)MainGame.Attacker1 = Attacker(left, top)def blitAttacker(self):"""显示攻击者"""if MainGame.Attacker1:if MainGame.Attacker1.live:MainGame.Attacker1.displayAttacker()else:del MainGame.Attacker1MainGame.Attacker1 = Nonedef blitBullet(self):"""显示子弹"""for myBullet in MainGame.myBulletList:if myBullet.live:myBullet.displayBullet()myBullet.move()myBullet.hitProtector()myBullet.hitBase()else:MainGame.myBulletList.remove(myBullet)def createBaseBullet(self):"""创建基地子弹"""for i in range(3):speed = 5for base in MainGame.baseList:baseBullet = BaseBullet(speed, base)MainGame.baseBulletList.append(baseBullet)def blitBaseBullet(self):"""显示基地子弹"""num = 0for baseBullet in MainGame.baseBulletList:num += 1if baseBullet:if baseBullet.live:baseBullet.displayBaseBullet()for base in MainGame.baseList:baseBullet.move(num, base)baseBullet.hitAttacker()else:passdef showText(self, text):"""显示基地生命值"""pygame.font.init()font = pygame.font.SysFont("kaiti", 20)textSurface = font.render(text, True, FG_COLOR)return textSurfacedef getEvent(self):"""获取点击事件"""eventList = pygame.event.get()for event in eventList:if event.type == pygame.QUIT:  # 判断事件是否为退出键(即窗口右上角的叉)self.endGame()if event.type == pygame.KEYDOWN:  # 判断事件是否为按下按键操作if not MainGame.Attacker1:if event.key == pygame.K_ESCAPE:  # 判断按键是否为Esc键self.createAttacker()elif MainGame.Attacker1.live:if event.key == pygame.K_LEFT:  # 判断按键是否为左键print("左")MainGame.Attacker1.direction = 'L'MainGame.Attacker1.stop = Falseelif event.key == pygame.K_RIGHT:  # 判断按键是否为右键print("右")MainGame.Attacker1.direction = 'R'MainGame.Attacker1.stop = Falseelif event.key == pygame.K_SPACE:  # 判断按键是否为空格键print("发射子弹")if len(MainGame.myBulletList) < 8:myBullet = Bullet(MainGame.Attacker1)MainGame.myBulletList.append(myBullet)elif event.type == pygame.KEYUP:  # 判断事件是否为释放按键操作if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:if MainGame.Attacker1:MainGame.Attacker1.stop = Truedef endGame(self):"""结束游戏"""exit()class Base:def __init__(self, left, top):self.image = pygame.image.load('./img/boss1.gif')  # 加载图片self.rect = self.image.get_rect()self.rect.left = leftself.rect.top = topself.direction = 'L'self.step = 60self.speed = 5self.live = Trueself.hp = 20  # 设置基地生命def randShot(self):"""随机射击"""return Bullet(self)def displayBase(self):"""显示基地"""MainGame.window.blit(self.image, self.rect)def randDirection(self):"""产生基地的随机移动方向"""a = random.randint(1, 2)if a == 1:return 'L'elif a == 2:return 'R'def randMove(self):if self.step <= 0:self.direction = self.randDirection()self.step = 60else:self.move()self.step -= 1def move(self):if self.direction == 'L':if self.rect.left > 0:self.rect.left -= self.speedelif self.direction == 'R':if self.rect.left < SCREEN_WIDTH - self.rect.width:self.rect.left += self.speedclass Protector:def __init__(self, left, top):self.image = pygame.image.load('./img/protector.gif')self.rect = self.image.get_rect()self.step = 60self.speed = 5self.direction = 'L'self.rect.left = leftself.rect.top = topself.oldLeft = self.rect.leftself.oldTop = self.rect.topdef randDirection(self):a = random.randint(1, 2)if a == 1:return 'L'elif a == 2:return 'R'def randMove(self):self.oldLeft = self.rect.leftself.oldTop = self.rect.topif self.step <= 0:self.direction = self.randDirection()self.step = 60else:self.move()self.step -= 1def move(self):if self.direction == 'L':if self.rect.left > 0:self.rect.left -= self.speedelif self.direction == 'R':if self.rect.left < SCREEN_WIDTH - self.rect.width:self.rect.left += self.speeddef displayProtector(self):MainGame.window.blit(self.image, self.rect)class Attacker:def __init__(self, left, top):self.image = pygame.image.load('./img/attacker2.gif')self.rect = self.image.get_rect()self.direction = 'L'self.rect.left = leftself.rect.top = topself.speed = 7self.stop = Trueself.hp = 5self.live = Truedef shot(self):return Bullet(self)def move(self):if self.direction == 'L':if self.rect.left > 0:self.rect.left -= self.speedelif self.direction == 'R':if self.rect.left < SCREEN_WIDTH - self.rect.width:self.rect.left += self.speeddef displayAttacker(self):MainGame.window.blit(self.image, self.rect)class Bullet:def __init__(self, attacker):self.image = pygame.image.load('./img/enemymissile.gif')self.rect = self.image.get_rect()self.speed = 10self.rect.left = attacker.rect.left + 0.5 * attacker.rect.width - 0.5 * self.rect.widthself.rect.top = attacker.rect.top + self.rect.heightself.live = Truedef move(self):if self.rect.top > 0:self.rect.top -= self.speedelse:self.live = Falsedef displayBullet(self):MainGame.window.blit(self.image, self.rect)def hitProtector(self):for protector in MainGame.protectorList:if pygame.sprite.collide_rect(self, protector):  # 检测self与protecter是否发生碰撞self.live = Falsedef hitBase(self):for base in MainGame.baseList:if pygame.sprite.collide_rect(self, base):self.live = Falsebase.hp -= 1if base.hp <= 0:base.live = Falseclass BaseBullet:def __init__(self, speed, base):self.image = pygame.image.load('./img/enemymissile.gif')self.rect = self.image.get_rect()self.speed = speedself.rect.left = base.rect.left + 0.5 * base.rect.width - 0.5 * self.rect.widthself.rect.top = base.rect.top + base.rect.heightself.live = Trueself.mark = Truedef move(self, num, base):if self.rect.top < SCREEN_HEIGHT:if self.rect.left > 0:if self.rect.left < SCREEN_WIDTH:if num % 3 == 1:self.rect.top += self.speedelif num % 3 == 2:if self.mark:self.rect.left = base.rect.left + 0.5 * base.rect.width - 0.5 * self.rect.width - 50self.mark = Falseself.rect.top += self.speedelif num % 3 == 0:if self.mark:self.rect.left = base.rect.left + 0.5 * base.rect.width - 0.5 * self.rect.width + 50self.mark = Falseself.rect.top += self.speedelse:self.live = Falseelse:self.live = Falseelse:self.live = Falsedef hitAttacker(self):if MainGame.Attacker1:if pygame.sprite.collide_rect(self, MainGame.Attacker1):self.live = FalseMainGame.Attacker1.hp -= 1if MainGame.Attacker1.hp <= 0:MainGame.Attacker1.live = Falsedef displayBaseBullet(self):MainGame.window.blit(self.image, self.rect)if __name__ == '__main__':MainGame().start()

python小游戏—摧毁基地相关推荐

  1. Python小游戏-坦克大战(tank war)

    Python小游戏-坦克大战(tank war) 前言 这款游戏一直都是我很喜欢的游戏,很童年,太经典啦!也很好玩,所以我来做一做这款游戏. 开发工具 python版本:3.7.3 相关模块:pyga ...

  2. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  3. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  4. python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  5. python小游戏之三

    猜拳游戏 Python代码实现猜拳小游戏 Python代码实现猜拳小游戏_zhangtongyuan0909的博客-CSDN博客_python猜拳游戏代码 用python中类与对象写一个猜拳游戏 用p ...

  6. python小游戏-16行代码实现3D撞球小游戏!-源码下载

    python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...

  7. python小游戏编程arcade----坦克动画图片合成

    python小游戏编程arcade----坦克动画图片合成 前言 坦克动画图片合成 1.PIL image 1.1 读取文件并转换 1.2 裁切,粘贴 1.3 效果图 1.4 代码实现 2.处理图片的 ...

  8. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  9. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

最新文章

  1. ubuntu修改新增用户的目录_Ubuntu 18.04下创建新用户/目录、修改用户权限及删除用户的方法...
  2. android java style_Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
  3. (网络编程)TCP实现文件上传
  4. POJ - 3450 Corporate Identity(二分+后缀数组)
  5. 《Java和Android开发实战详解》——2.2节构建Java应用程序
  6. linq.js的用法
  7. android之微信分享音频
  8. armgcc交叉编译的文件无法运行_从0开始搭建基于ARM GCC的软件系统02——使用ARM GCC编译SDK
  9. Java连接SQLite数据库
  10. python自学书-大牛推荐的10本学习 Python 的好书
  11. HDOJ水题集合2:最短路(Dijkstra)
  12. 无向图java_Java实现无向图的建立与遍历
  13. 对象用[]来获取属性的注意点
  14. Java中单例设计模式总结
  15. 关于另类BT下载的想法
  16. SVM支持向量机原理总结
  17. jersey文件服务器,通过jersey实现客户端图片上传
  18. 数据仓库是什么?和数据库有何区别?
  19. BeanUtils.populate 的使用
  20. 计算几何VS解析几何

热门文章

  1. 1434 Best Cow Fences
  2. vue + elementui 实现动态侧边导航栏
  3. 浏览器打印出完整的知乎文章为PDF文件
  4. workman实现websocket
  5. 【生产者篇】 sender线程源码分析--1
  6. 最新android游戏不联网,人类跌落梦境游戏不联网版本下载-人类跌落梦境单机版v1.0 安卓版-腾牛安卓网...
  7. macOS seria 10.12升级到macOS Mojave的报错:xcrun: error: invalid active developer path, missing xcrun...
  8. deepin系统安装wine
  9. 美股港股快速出入金指南
  10. 多次异步请求,结果返回顺序的问题