python用pygame实现坦克大战游戏代码分享
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"python用pygame实现坦克大战游戏代码分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python用pygame实现坦克大战游
千家信息网最后更新 2026年11月03日python用pygame实现坦克大战游戏代码分享
本篇内容主要讲解"python用pygame实现坦克大战游戏代码分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"python用pygame实现坦克大战游戏代码分享"吧!
import pygameimport sysimport timefrom pygame.locals import *from random import randintMOVE_SLEEP = 0.01class MyTank: width = 600 heights = 500 speed = 10 screen = 0 myshells = [] enemylist = [] enemyshells = [] grade = 0 life = 3 cnt = 0 def startgame(self): pygame.init() self.screen = pygame.display.set_mode((self.width,self.heights),0,32) pygame.display.set_caption("bit tank") self.tank = Tank(self.screen,275,450) for i in range(6): self.enemylist.append(EnmeyTank(self.screen)) while True: key = pygame.key.get_pressed() self.screen.fill((0,0,0)) if key[K_LEFT]: self.tank.move('L') elif key[K_RIGHT]: self.tank.move('R') elif key[K_UP]: self.tank.move('U') elif key[K_DOWN]: self.tank.move('D') self.get_event() for shell in self.myshells: if shell.move() == True: self.myshells.remove(shell) shell.display() a = shell.hitTank() #子弹碰撞 if a == True: if self.life >0: self.myshells.remove(shell) self.grade += 1 #mytank碰撞 if self.tank.live == True: if self.tank.hitTank(): self.life -= 1 if self.life <=0: self.tank.live =False else:self.tank = Tank(self.screen,275,450) #mytanke 碰撞子弹 if self.tank.live == True: if self.tank.hitShell(): self.life -= 1 if self.life <=0: self.tank.live = False else:self.tank=Tank(self.screen,275,450) #敌方子弹击中我方坦克 # 游戏结束 if self.life <=0: self.gotGamePrint() for enemy in self.enemylist: enemy.move() print('move') enemy.display() # 添加敌方子弹 self.cnt += 1 if self.cnt % 100 ==0: for enemy in self.enemylist: self.enemyshells.append(enemy.fire()) #判断敌方子弹碰撞 for enemyshell in self.enemyshells: f = enemyshell.move() enemyshell.display() if f: self.enemyshells.remove(enemyshell) if len(self.enemylist)<6: self.enemylist.append(EnmeyTank(self.screen)) self.screen.blit(self.getGrade(),(5,5)) self.tank.display() pygame.display.update() time.sleep(0.02) def get_event(self): for event in pygame.event.get(): if event.type == KEYDOWN: if event.key == K_SPACE: self.myshells.append(self.tank.fire()) if event.key == K_ESCAPE: pass def getGrade(self): text = pygame.font.Font('./font/msyhbd.ttc',20).render("分数:{} 生命:{}".format(self.grade,self.life),True,(0,255,0)) return text def gotGamePrint(self): text = pygame.font.Font('./font/msyh.ttc',70).render('game over!',True,(0,255,0)) self.screen.blit(text,(100,200))class Shell: width = 48 height = 48 live = True speed = 3 def __init__(self,screen,tank): self.screen = screen self.image = pygame.image.load('./images/3.png') self.direction = tank.direction self.rect = self.image.get_rect() self.rect.left = tank.rect.left + (tank.width-self.width)/2.0+18 # print(tank.rect.left,tank.width,self.width) self.rect.top = tank.rect.top + (tank.height - self.height)/2.0 self.live = True def move(self): tag = self.isObstacle() if self.live == True: if self.direction == 'L' and self.direction not in tag: self.rect.left -= self.speed elif self.direction == 'R' and self.direction not in tag: self.rect.left += self.speed elif self.direction == 'U' and self.direction not in tag: self.rect.top -= self.speed elif self.direction == 'D' and self.direction not in tag: self.rect.top += self.speed else: pass if self.direction in tag: return True else: return False else: pass def display(self): # print(self.rect.left,self.rect.top) if self.live == True: self.screen.blit(self.image,self.rect) def isObstacle(self): tag = [] if self.rect.left <=0:tag.append('L') if self.rect.left + self.width >= MyTank.width:tag.append('R') if self.rect.top <=0:tag.append('U') if self.rect.top + self.height >=MyTank.heights:tag.append('D') return tag def hitTank(self): hitList = pygame.sprite.spritecollide(self,MyTank.enemylist,False) for e in hitList: e.live = False MyTank.enemylist.remove(e) self.live = False return True return False def hitMytank(self): hitList = pygame.sprite.spritecollide(self,MyTank.tank,False) for e in hitList: e.live = False MyTank.life -= 1 return Trueclass BaseTank: width = 50 height = 50 direction = 'U' live = True time = 0 images = {} def __init__(self,screen,left,top): self.screen = screen self.images['L'] = pygame.image.load("images/04.jpg") self.images['R'] = pygame.image.load("images/02.jpg") self.images['U'] = pygame.image.load("images/01.jpg") self.images['D'] = pygame.image.load("images/03.jpg") self.image = self.images[self.direction] self.rect = self.image.get_rect() self.rect.left = left self.rect.top = top self.live = True # 坦克是否被消灭 def isObstacle(self): tag = [] if self.rect.left <= 0: tag.append('L') if self.rect.left + self.width >= MyTank.width: tag.append('R') if self.rect.top <= 0: tag.append('U') if self.rect.top + self.height >= MyTank.heights: tag.append('D') return tag def display(self): if self.live == True: self.image = self.images[self.direction] self.screen.blit(self.image, self.rect) def fire(self): m = Shell(self.screen,self) return mclass Tank(BaseTank): images = {} def __init__(self,screen,left,top): super().__init__(screen,275,450) self.screen = screen self.speed = 2 self.images['L'] = pygame.image.load('./images/4.jpg') self.images['R'] = pygame.image.load('./images/2.jpg') self.images['U'] = pygame.image.load('./images/1.jpg') self.images['D'] = pygame.image.load('./images/3.jpg') self.image = self.images[self.direction] self.rect = self.image.get_rect() self.rect.top = top self.rect.left = left def move(self, direction): if self.live == True: tag = self.isObstacle() if direction == self.direction: if self.direction == 'L' and self.direction not in tag: self.rect.left -= self.speed elif self.direction == 'R' and self.direction not in tag: self.rect.left += self.speed elif self.direction == 'U' and self.direction not in tag: self.rect.top -= self.speed elif self.direction == 'D' and self.direction not in tag: self.rect.top += self.speed else: pass else: self.direction = direction def hitTank(self): hitList = pygame.sprite.spritecollide(self,MyTank.enemylist,False) for e in hitList: self.live = False return True return False def hitShell(self): hitlist = pygame.sprite.spritecollide(self, MyTank.enemyshells, False) for e in hitlist: self.live = False return True return Falseclass EnmeyTank(BaseTank): speed = 1 def __init__(self,screen): super().__init__(screen,randint(1,5)*100,0) self.getdirection() self.step = 0 def getdirection(self): self.direction = ['L','R','U','D'][randint(0,3)] def move(self): if self.live == True: if self.step == 0 or (self.direction in self.isObstacle()): self.getdirection() self.step = randint(0, 200) else: tag = self.isObstacle() if self.direction == 'L' and self.direction not in tag: self.rect.left -= self.speed elif self.direction == 'R' and self.direction not in tag: self.rect.left += self.speed elif self.direction == 'U' and self.direction not in tag: self.rect.top -= self.speed elif self.direction == 'D' and self.direction not in tag: self.rect.top += self.speed else: pass self.step -= 1if __name__ == '__main__': main = MyTank() main.startgame()到此,相信大家对"python用pygame实现坦克大战游戏代码分享"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
坦克
子弹
碰撞
代码
大战
敌方
内容
学习
实用
更深
兴趣
分数
实用性
实际
操作简单
方法
更多
朋友
生命
网站
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
亿人帮互联网科技有限公司
互联网科技工作委员会副主任毛军
互联网科技巨头监管
科技互联网公司装修
港股互联网科技股
北京互联网科技
北京互联网科技有限公司
智网互联网科技
未来的互联网科技
电子科技大学互联网
伴你行互联网科技有限公司
齐家互联网科技有限公司
华中科技有哪些互联网大佬
北京三清互联网科技
西藏七维空间互联网科技有限公司
广州市恰铎互联网科技有限公司
南通创西澳互联网科技有限公司
互联网科技融合创新
互联网公司属于科技吗
易租星互联网科技有限公司
A股互联网金融科技公司
青岛互联网科技公司
奇酷互联网科技公司
盛创互联网科技有限公司
互联网科技革命什么开始
恒生互联网科技指数跳水
翼展科技 首家互联网医院
徐州市互联网科技有限公司
下一代互联网重大应用科技园
承德科技产业互联网平台