python开发的坦克大战游戏importpygamefrom pygame.sprite importSpriteimportsysimporttimeimportrandom

SCREEN_WIDTH= 780SCREEN_HEIGHT= 500BG_COLOR=pygame.Color(0,0,0)

TEXT_COLOR= pygame.Color(255,0,0)#复活次数

#定义一个精灵类

classBaseItem(Sprite):def __init__(self, color, width, height):#Call the parent class (Sprite) constructor

pygame.sprite.Sprite.__init__(self)classMainGame ():

window=None

my_tank=None

REC_TIME=0#敌方坦克初始化

EnemyTankList =[]

EnemyTankCount= 5

#存储我方子弹列表

myBulleList =[]#存储敌方子弹

EnemyBulletList =[]#创建爆炸对象列表

explodeList =[]#创建墙壁列表

wallList =[]def __init__(self):pass

defstarGame(self):#初始化,设置标题,屏幕大小

pygame.display.init()

MainGame.window=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))

pygame.display.set_caption("坦克大战1.03")#初始化我方坦克

self.creatMyTank()#初始化敌方坦克

self.creatEnemyTank()#初始化墙壁

self.creatWall()whileTrue:#填充颜色

MainGame.window.fill(BG_COLOR)#获取事件

self.getEvent()#绘制文字

MainGame.window.blit(self.getTextSuface("敌方坦克剩余数量%d"%MainGame.EnemyTankCount),(SCREEN_HEIGHT/2,20))#调用我方坦克进行显示

if MainGame.my_tank andMainGame.my_tank.live:

MainGame.my_tank.displayTank()else:delMainGame.my_tank

MainGame.my_tank=None#显示我方子弹

self.blitMyBullet()#敌方坦克进行显示

self.blitEnenyTank()#显示墙壁

self.blitWall()#显示敌方子弹

self.blitEnenyBullet()#显示爆炸效果

self.blitExplode()if MainGame.my_tank andMainGame.my_tank.live:if notMainGame.my_tank.stop:

MainGame.my_tank.move()

MainGame.my_tank.hitWall()

MainGame.my_tank.myTank_hit_enemyTank()if MainGame.EnemyTankCount ==0:

MainGame.window.blit(self.getTextSuface('恭喜你,顺利通过'), (SCREEN_HEIGHT/2, SCREEN_WIDTH/2))

time.sleep(2)

self.endGame()

pygame.display.update()

time.sleep(0.02)defcreatWall(self):for i in range(0,SCREEN_WIDTH,SCREEN_WIDTH//6):

top= SCREEN_HEIGHT//3left=i

wall=Wall(left,top)

MainGame.wallList.append(wall)defcreatMyTank(self):

MainGame.my_tank= MyTank(SCREEN_WIDTH/2,SCREEN_HEIGHT/3*2)

music= Music("img/start.wav")

music.play()defcreatEnemyTank(self):

top= 100

for i inrange(MainGame.EnemyTankCount):

left= random.randint(0,600)

speed= random.randint(1,4)

enmy=EnemyTank(left,top,speed)

MainGame.EnemyTankList.append(enmy)defblitWall(self):for wall inMainGame.wallList:ifwall.live:

wall.displayWall()else:

MainGame.wallList.remove(wall)defblitEnenyTank(self):"循环遍历敌方坦克,展示敌方坦克"

for enmeyTank inMainGame.EnemyTankList:ifenmeyTank.live:

enmeyTank.displayTank()

enmeyTank.randomMove()

EnemyBullet=enmeyTank.shot()

enmeyTank.hitWall()

enmeyTank.enemyTank_hit_MyTank()#存储敌方子弹

ifEnemyBullet:

MainGame.EnemyBulletList.append(EnemyBullet)else:

MainGame.EnemyTankList.remove(enmeyTank)

MainGame.EnemyTankCount-=1

defblitMyBullet(self):for bullet inMainGame.myBulleList:ifbullet.live:

bullet.displayBullet()

bullet.move()

bullet.myBullet_hit_enemyTank()

bullet.wall_bullet()else:

MainGame.myBulleList.remove(bullet)defblitEnenyBullet(self):for bullet inMainGame.EnemyBulletList:if bullet.live: #随机会产生None

bullet.displayBullet()

bullet.move()

bullet.enemyBullet_hit_myTank()

bullet.wall_bullet()else:

MainGame.EnemyBulletList.remove(bullet)defblitExplode(self):for explode inMainGame.explodeList:ifexplode.live:

explode.displayExplode()else:

MainGame.explodeList.remove(explode)defendGame(self):print("欢迎下次游戏")

sys.exit()defgetTextSuface(self,text):

pygame.font.init()#print(pygame.font.get_fonts())

font = pygame.font.SysFont('kaiti',18)

textSurface=font.render(text,True,TEXT_COLOR)returntextSurfacedefgetEvent(self):'''获取所有事件'''eventList=pygame.event.get()for event ineventList:if event.type ==pygame.QUIT:

self.endGame()if event.type ==pygame.KEYDOWN:if notMainGame.my_tank:if event.key ==pygame.K_ESCAPE:if MainGame.REC_TIME < 3:

self.creatMyTank()

MainGame.REC_TIME+=1

if MainGame.my_tank andMainGame.my_tank.live:if event.key ==pygame.K_DOWN:

MainGame.my_tank.direction='D'

#MainGame.my_tank.move()

MainGame.my_tank.stop =Falseprint("按下向下的键,向下移动",)elif event.key ==pygame.K_UP:

MainGame.my_tank.direction= 'U'

#MainGame.my_tank.move()

MainGame.my_tank.stop =Falseprint("按下向上的键,向上移动")elif event.key ==pygame.K_LEFT:

MainGame.my_tank.direction= 'L'

#MainGame.my_tank.move()

MainGame.my_tank.stop =Falseprint("按下向左的键,向左移动", MainGame.my_tank.direction)elif event.key ==pygame.K_RIGHT:

MainGame.my_tank.direction= 'R'

#MainGame.my_tank.move()

MainGame.my_tank.stop =Falseprint("按下向右的键,向右移动", MainGame.my_tank.direction)elif event.key ==pygame.K_SPACE:print("发射子弹")#创建我方子弹

if len(MainGame.myBulleList) < 3:

myBullet=Bullet(MainGame.my_tank)

MainGame.myBulleList.append(myBullet)#发射子弹音效

ShotMusic = Music('img/hit.wav')

ShotMusic.play()elif event.type ==pygame.KEYUP:if event.key ==pygame.K_UP or event.key == pygame.K_DOWN or event.key ==pygame.K_LEFT or event.key ==pygame.K_RIGHT:if MainGame.my_tank andMainGame.my_tank.live:

MainGame.my_tank.stop=TrueclassTank(BaseItem):def __init__(self,left,top):

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='U'self.image=self.images[self.direction]

self.rect=self.image.get_rect()#设置放置的位置

self.rect.left=left

self.rect.top=top

self.speed= 4

#控制坦克开关

self.stop =True

self.live=True#保持原来的位置

self.oldLeft =self.rect.left

self.oldTop=self.rect.topdefhitWall(self):for wall inMainGame.wallList:ifpygame.sprite.collide_rect(wall, self):

self.stay()defstay(self):

self.rect.left=self.oldLeft

self.rect.top=self.oldTopdefshot(self):returnBullet(self)defmove(self):#保持原来的状态

self.oldLeft =self.rect.left

self.oldTop=self.rect.top#判断坦克的方向进行移动

if self.direction =='U':if self.rect.top>0:

self.rect.top-=self.speedelif self.direction =='L':if self.rect.left>0:

self.rect.left-=self.speedelif self.direction =='D':if self.rect.top +self.rect.height

self.rect.top+=self.speedelif self.direction == 'R':if self.rect.left+self.rect.height

self.rect.left+=self.speeddefdisplayTank(self):

self.image=self.images[self.direction]

MainGame.window.blit(self.image,self.rect)classMyTank(Tank):def __init__(self,left,top):

super().__init__(left,top)defmyTank_hit_enemyTank(self):for enemyTank inMainGame.EnemyTankList:ifpygame.sprite.collide_rect(enemyTank, self):

self.stay()classEnemyTank(Tank):def __init__(self,left,top,speed):

super(EnemyTank,self).__init__(left,top)

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.RandomDirction()

self.image=self.images[self.direction]

self.rect=self.image.get_rect()

self.rect.left=left

self.rect.top=top

self.speed=speed

self.EnemyFlag=False

self.step= 60

defRandomDirction(self):

num= random.randint(1,4)if num ==1:return "U"

elif num == 2:return "L"

elif num == 3:return "D"

elif num == 4:return "R"

defrandomMove(self):if self.step <0:

self.direction=self.RandomDirction()

self.step= 60

else:

self.move()

self.step-= 1

defshot(self):

num=random.randint(1,100)if num < 4:returnBullet(self)defenemyTank_hit_MyTank(self):for enemy inMainGame.EnemyTankList:if MainGame.my_tank andMainGame.my_tank.live :ifpygame.sprite.collide_rect(MainGame.my_tank,enemy):

self.stay()classBullet(BaseItem):def __init__(self,tank):

self.image=pygame.image.load('img/enemymissile.gif')

self.direction=tank.direction

self.rect=self.image.get_rect()if self.direction == 'U':

self.rect.left= tank.rect.left + tank.rect.width/2 - self.rect.width/2self.rect.top= tank.rect.top -self.rect.heightelif self.direction == 'D':

self.rect.left= tank.rect.left + tank.rect.width/2 - self.rect.width/2self.rect.top= tank.rect.top +tank.rect.heightelif self.direction == 'L':

self.rect.left= tank.rect.left - self.rect.width/2 -self.rect.width/2self.rect.top= tank.rect.top +tank.rect.height/2 - self.rect.width/2

elif self.direction == 'R':

self.rect.left= tank.rect.left +tank.rect.width

self.rect.top= tank.rect.top + tank.rect.height/2 -self.rect.width/2

#子弹的速度

self.speed =6

#子弹状态

self.live =Truedefmove(self):if self.direction == 'U':if self.rect.top>0:

self.rect.top-=self.speedelse:

self.live=Falseelif self.direction == 'R':if self.rect.left + self.rect.width

self.rect.left+=self.speedelse:

self.live=Falseelif self.direction == 'D':if self.rect.top + self.rect.height

self.rect.top+=self.speedelse:

self.live=Falseelif self.direction == 'L':if self.rect.left>0:

self.rect.left-=self.speedelse:

self.live=FalsedefdisplayBullet(self):

MainGame.window.blit(self.image,self.rect)defmyBullet_hit_enemyTank(self):for enemyTank inMainGame.EnemyTankList:ifpygame.sprite.collide_rect(enemyTank,self):

enemyTank.live=False

self.live=False#创建爆炸对象

explode =Explode(enemyTank)

MainGame.explodeList.append(explode)defenemyBullet_hit_myTank(self):if MainGame.my_tank andMainGame.my_tank.live:ifpygame.sprite.collide_rect(MainGame.my_tank,self):

MainGame.my_tank.live=False

self.live=False

explode=Explode(MainGame.my_tank)

MainGame.explodeList.append(explode)defwall_bullet(self):for wall inMainGame.wallList:ifpygame.sprite.collide_rect(wall,self):

wall.hg-=1self.live=Falseif wall.hg<=0:

wall.live=FalseclassWall():def __init__(self,left,top):

self.image= pygame.image.load('img/steels.gif')

self.rect=self.image.get_rect()

self.rect.top=top

self.rect.left=left

self.live=True

self.hg= 8

defdisplayWall(self):if self.live ==True:

MainGame.window.blit(self.image,self.rect)classExplode():def __init__(self,tank):#爆炸的位置有坦克决定

self.rect =tank.rect

self.images= [pygame.image.load('img/blast0.gif'),

pygame.image.load('img/blast1.gif'),

pygame.image.load('img/blast2.gif'),

pygame.image.load('img/blast3.gif')]

self.step=0

self.image=self.images[self.step]

self.live=TruedefdisplayExplode(self):if self.step

self.image=self.images[self.step]

self.step+=1MainGame.window.blit(self.image,self.rect)else:

self.live=False

self.step=0classMusic():def __init__(self,filename):

self.filename=filename#初始化音乐混合器

pygame.mixer.init()

pygame.mixer.music.load(filename)defplay(self):

pygame.mixer.music.play()if __name__ == '__main__':

c=MainGame()

c.starGame()

python坦克大战游戏_Python开发的坦克大战游戏相关推荐

  1. python贪吃蛇小游戏_python开发贪吃蛇小游戏

    3.概要设计 3.1 程序功能模块 由设计应解决的问题可知,本次的设计是使用用方向键来实现一个简易的贪吃蛇小游戏的程序,具体的功能模块如图3-1所示. 图3-1 程序功能模块 Fig.3-1 prog ...

  2. python 通用数据库类型_Python开发基础之Python常用的数据类型

    博文大纲 一.Python介绍 二.Python的变量 三.Python常用的数据类型 1.数字 2.字符串 3.元组 4.列表 5.字典 一.Python介绍 Python是一种动态解释型的编程语言 ...

  3. python编辑器是什么_python开发用什么编辑器

    如果你想做得好,你必须首先提高工具.据估计,大部分pythoners开始python从python IDE.有许多python IDE工具,但这是一个艰巨的任务选择一个IDE使用.您可以使用最基本的文 ...

  4. python编写一个弹球游戏_python pygame实现挡板弹球游戏

    学了一天pygame,用python和pygame写一个简单的挡板弹球游戏 GitHub: # -*- coding:utf-8 -*- from sys import exit import pyg ...

  5. python编程猜拳小游戏_python实现人机猜拳小游戏

    今天的这篇文章呢是对人机猜拳小游戏--石头剪刀布的一个描述以及代码展现 石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家 ...

  6. 【游戏开发面经1】游戏客户端开发岗(阿里 | 游戏 | 凉面面经)

    转载自[林新发]  本文只是用来分享,如有不妥,请联系删除. 文章目录 一.前言 二.流程 1.简历 2.一面,技术面 2.1.技术题 2.2.常规题 2.3.面试结果 3.二面,技术面 3.1.技术 ...

  7. 用python做一个坦克小游戏_Python制作经典坦克大战小游戏

    image.png 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. ...

  8. python坦克大战游戏_python实现简单坦克大战

    基于对面向对象编程的思想完成简单的坦克大战游戏.主要目的锻炼面相对象编程思想 同样的在使用python进行游戏编写时需要安装pygame模块 安装方法: pycharm安装方式:File --> ...

  9. python实现植物大战僵尸_Python开发植物大战僵尸游戏

    开发思路 1.引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口. 1引入需要的模块 import pygame import random 1配置图片地址 IMAGE_PATH = ...

最新文章

  1. python利用WMI监控windows状态如CPU、内存、硬盘
  2. 13/100. Best Time to Buy and Sell Stock
  3. SAP CRM Product hierarchy,Category和Application的三个问题
  4. [vue] 说说你对Object.defineProperty的理解
  5. android获取root修改根目录,代码中获取root权限并随意修改根目录文件
  6. PIL与opencv相互转换
  7. Rust: String 与 str
  8. 【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋
  9. h5问卷调查 html模版,问卷调查H5模板制作流程
  10. JAVA开发工程师面试题shiro
  11. 3dmax2017卸载/安装失败/如何彻底卸载清除干净3dmax2017注册表和文件的方法
  12. java更改文件编码方式_java 更改文件编码
  13. iOS开发-学习规划及阶段性目标,学习方法整理
  14. 什么才是真正的高级程序员
  15. matlab海底地形数据,海底地形建模器
  16. 英特尔计划发布代号为Spring Crest的神经网络处理器芯片,测试部署AI模型速度更快
  17. 关于蓝桥杯大赛,你应该了解的那些事!
  18. 契约锁电子签章在食品行业全产业链的应用场景
  19. bat和cmd文件是什么,dos又是什么东西
  20. JavaScript DOM节点

热门文章

  1. Minecraft 1.19.2 Forge模组开发 04.动画效果物品
  2. Flink 系例 之 Project
  3. 红米k20pro短接9008_小米、红米全系列短接点拆机进入9008模式刷机图解方法
  4. 随机过程笔记(5) 平稳过程
  5. ArcGIS 10安装及破解
  6. 使用OCT将office序列号封装到安装文件中
  7. AI智能曲谱识别|MusicXml渲染乐谱识别识音SDK|人声数拍SDK|智能钢琴、MIDI音乐、打谱、曲谱乐谱播放识别SDK、音序器、合成器、播放器软件
  8. PHP实现 微信个人号 的 自动回复机器人 及 对PHP的感想
  9. 雷神笔记本官网_ ThundeRobot笔记本官方网站- ThundeRobot.com
  10. 10分钟python爬虫_python scrapy 入门,10分钟完成一个爬虫