刚开始学习计算机,代码写的良莠不齐,多担待哈。


这个资源积分我自己修改不了,没办法,想直接要代码和素材的朋友请qq我:1638179220,欢迎。


**

游戏效果图:


**

pygame—坦克大战

大体分为10个模块:

button.py

'''游戏按钮模块'''import pygameclass Button():def __init__(self,screen,msg):'''初始化按钮属性'''self.screen = screenself.msg = msg#设置按钮的尺寸和其它属性self.width = 200self.height = 50self.button_color = (0,255,0)self.text_color = (255,255,255)self.font = pygame.font.Font("C:/Windows/Fonts/SIMHEI.TTF",30)#创建按钮的矩形对象self.rect = pygame.Rect(0,0,self.width,self.height)self.rect.center = (450,300)#创建按钮的标签self.prep_msg(self.msg)def prep_msg(self,msg):'''将msg渲染成为图像,并使其在按钮上居中'''self.msg_image = self.font.render(msg,True,self.text_color,self.button_color)self.msg_image_rect = self.msg_image.get_rect()def draw_button(self):#绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color,self.rect)self.screen.blit(self.msg_image,(self.rect.x+40,self.rect.y+10))

customize_wall.py

'''自定义地图模块'''import pygame
from pygame.sprite import Spriteclass Walls(Sprite):def __init__(self,screen):self.customize = FalseSprite.__init__(self)self.screen = screenself.stop = Falseself.step = 0self.images = [pygame.image.load("imgs\\wall\\1.gif"), \pygame.image.load("imgs\\wall\\2.gif"), \pygame.image.load("imgs\\wall\\3.gif"), \pygame.image.load("imgs\\wall\\4.gif"), \pygame.image.load("imgs\\wall\\5.gif"), \pygame.image.load("imgs\\wall\\7.gif"), \pygame.image.load("imgs\\wall\\8.png")]self.speed = 1 self.image = self.images[self.step]self.rect = self.image.get_rect()self.rect.x = 68self.rect.y = 40self.screen.blit(self.image,self.rect)def update(self):self.image = self.images[self.step]self.screen.blit(self.image,self.rect)def move_up(self):if not self.stop:self.rect.y -= self.speeddef move_under(self):if not self.stop:self.rect.y += self.speeddef move_left(self):if not self.stop:self.rect.x -= self.speeddef move_right(self):if not self.stop:self.rect.x += self.speeddef no_screen(self):if self.rect.x <= 68:self.rect.x = 68if self.rect.x >= 1008:self.rect.x = 1008if self.rect.y <= 40:self.rect.y = 40if self.rect.y >= 650:self.rect.y = 650

game_interface.py

'''游戏开始前背景图片更换模块'''import pygameclass Game_interface():def __init__(self,screen,msg,rect):self.screen = screenself.images = [pygame.image.load("imgs\\q.jpg"), \pygame.image.load("imgs\\w.jpg"), \pygame.image.load("imgs\\e.jpg"), \pygame.image.load("imgs\\r.jpg"), \pygame.image.load("imgs\\t.jpg"), \pygame.image.load("imgs\\y.jpg"), \pygame.image.load("imgs\\314662.jpg"), \pygame.image.load("imgs\\306745.jpg"), \pygame.image.load("imgs\\271039.jpg"), \pygame.image.load("imgs\\279861.jpg")]self.step = 0self.width = 450self.height = 50self.interface_color = (0,255,0)self.text_color = (255,255,255)self.size = 30self.len = len(msg)self.font = pygame.font.Font("C:/Windows/Fonts/SIMHEI.TTF",self.size)#创建按钮的矩形对象self.rect = pygame.Rect(0,0,self.width,self.height)self.rect.center = rect#创建按钮的标签self.prep_msg(msg)self.draw_interface()def prep_msg(self,msg):'''将msg渲染成为图像,并使其在界面上居中'''self.msg_image = self.font.render(msg,True,self.text_color,self.interface_color)self.msg_image_rect = self.msg_image.get_rect()def draw_interface(self):#绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.interface_color,self.rect)self.screen.blit(self.msg_image,(self.rect.x+(self.width-self.len*self.size)/2,self.rect.y+(self.height-self.size)/2))def screen_bg(self):if self.step == len(self.images):self.step = 0else:self.image = self.images[self.step]self.time = pygame.time.delay(700)self.screen.blit(self.image,(0,0))pygame.display.update()self.step += 1

home.py

'''坦克保护的老家模块'''import pygame
from pygame.sprite import Spriteclass Home(Sprite):def __init__(self,screen):Sprite.__init__(self)self.screen = screenself.screen_rect = self.screen.get_rect()self.live = Trueself.images = [pygame.image.load("imgs\\symbol.gif"),pygame.image.load("imgs\\destory.gif")]self.step = 0def draw_home(self):if self.live:self.image1 = self.images[self.step]self.rect = self.image1.get_rect()self.rect.width = 60self.rect.height = 45self.rect.x = 500self.rect.y = 665self.screen.blit(self.image1,self.rect)if not self.live:self.image2 = self.images[self.step+1]self.rect = self.image2.get_rect()self.rect.width = 60self.rect.height = 45self.rect.x = 500self.rect.y = 665self.screen.blit(self.image2,self.rect)

tank_buff.py

'''坦克buff模块'''import random
import pygame
from pygame.sprite import Spriteclass Tank_buff(Sprite):def __init__(self,screen):Sprite.__init__(self)self.screen = screenself.random_image()def random_image(self):r = random.randint(0,2)if r == 0:self.m = 0self.image = pygame.image.load("imgs\\timer.gif")self.rect = self.image.get_rect()self.rect.x = random.randint(68,1000)self.rect.y = random.randint(40,750)if r == 1:self.m = 1self.image = pygame.image.load("imgs\\star.gif")self.rect = self.image.get_rect()self.rect.x = random.randint(68,1000)self.rect.y = random.randint(40,750)if r == 2:self.m = 2self.image = pygame.image.load("imgs\\bomb.gif")self.rect = self.image.get_rect()self.rect.x = random.randint(68,1000)self.rect.y = random.randint(40,750)

tank_bullet.py

'''坦克子弹模块'''import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):def __init__(self,screen,direction,image,tank_hero):Sprite.__init__(self)self.screen = screenself.image = pygame.image.load(image)self.direction = directionself.rect = self.image.get_rect()self.speed = 5self.live = Trueself.moving = Falseif self.direction == "top":self.rect.x = tank_hero.rect.x+23self.rect.y = tank_hero.rect.y-5elif self.direction == "under":self.rect.x = tank_hero.rect.x+23self.rect.y = tank_hero.rect.y+60elif self.direction == "right":self.rect.x = tank_hero.rect.x+60self.rect.y = tank_hero.rect.y+23elif self.direction == "left":self.rect.x = tank_hero.rect.xself.rect.y = tank_hero.rect.y+23def moving_t(self):self.rect.y -= self.speeddef moving_l(self):self.rect.x -= self.speeddef moving_r(self):self.rect.x += self.speeddef moving_u(self):self.rect.y+= self.speed

tank_enemy.py

'''敌方坦克模块'''import random
import pygame
from pygame.sprite import Sprite#敌方坦克类
class Tank_enemy(Sprite):def __init__(self,screen,image,speed):Sprite.__init__(self)self.screen = screenself.direction = "a"self.o = 2#坦克移动的速度self.speed = speed#坦克按照某个方向移动的步数self.step = 120self.y = 0self.first = 1self.limit = 1if self.direction == "a":self.image = pygame.image.load(image)self.moving_up = Trueself.moving_down = Trueself.moving_right = Trueself.moving_left = True#坦克的图片由方向决定self.rect = self.image.get_rect()self.rect.x = random.choice((68,538,1008))self.rect.y = 40self.image1 = self.imageself.live = Trueself.get_random()def direction_move(self):if self.direction == "a":self.image = self.image1elif self.direction == "w":if self.first > 0:self.first -= 1self.image = pygame.transform.rotate(self.image1,270)elif self.direction == "s":if self.first > 0:self.first -= 1self.image = pygame.transform.rotate(self.image1,90)elif self.direction == "d":if self.first > 0:self.first -= 1self.image = pygame.transform.rotate(self.image1,180)def get_random(self):r = random.randint(0,3)if r == 1:self.direction = "d"self.moving_right = Trueelif r == 2:self.direction = "w"self.moving_up = Trueelif r == 3:self.direction = "a"self.moving_left =Trueelif r == 0:self.direction = "s"self.moving_down = Truedef move(self):if self.direction == "a":if self.moving_left:if self.rect.x <= 68:self.rect.x = 68                            else:self.rect.x -= self.speedself.direction_move()elif self.direction == "d":if self.moving_right:if self.rect.x >= 1008:self.rect.x = 1008else:self.rect.x += self.speedself.direction_move()elif self.direction == "w":if self.moving_up:if self.rect.y <= 40:self.rect.y = 40else:self.rect.y -= self.speedself.direction_move()elif self.direction == "s":if self.moving_down:if self.rect.y >= 650:self.rect.y = 650else:self.rect.y += self.speedself.direction_move()#敌方坦克,按照一个确定的随机方向,连续移动六步,才能再次改变方向 def enemy_random_move(self):if self.live:if self.step == 0:self.first = 1self.get_random()self.step = 120else:self.move()self.step -= 1class Tank_twinkle(Sprite):def __init__(self,screen):Sprite.__init__(self)self.step1 = 0self.step = 1self.get_random()self.y = 5self.o = 1self.screen = screenself.images = [pygame.image.load("imgs\\enemy3L.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235357.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235819.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101118000029.gif")]self.image = self.images[self.step]self.rect = self.image.get_rect()self.rect.x = random.choice((68,538,1008))self.rect.y = 40self.live = Trueself.speed = 2self.limit = 3def direction_move(self):if self.direction == "a":self.images = [pygame.image.load("imgs\\enemy3L.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235357.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235819.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101118000029.gif")]self.twinkle()elif self.direction == "w":self.images = [pygame.image.load("imgs\\enemy3U.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235441.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235923.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101118000114.gif")]self.twinkle()elif self.direction == "s":self.images = [pygame.image.load("imgs\\enemy3D.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235303.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235754.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235941.gif")]self.twinkle()elif self.direction == "d":self.images = [pygame.image.load("imgs\\enemy3R.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235418.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101117235843.gif"), \pygame.image.load("imgs\\bianshen\\tugai.net.20101118000048.gif")]self.twinkle()def get_random(self):r = random.randint(0,3)if r == 1:self.direction = "d"self.moving_right = Trueelif r == 2:self.direction = "w"self.moving_up = Trueelif r == 3:self.direction = "a"self.moving_left =Trueelif r == 0:self.direction = "s"self.moving_down = Truedef move(self):if self.direction == "a":if self.moving_left:if self.rect.x <= 68:self.rect.x = 68      else:self.rect.x -= self.speedself.direction_move()elif self.direction == "d":if self.moving_right:if self.rect.x >= 1008:self.rect.x = 1008else:self.rect.x += self.speedself.direction_move()elif self.direction == "w":if self.moving_up:if self.rect.y <= 40:self.rect.y = 40else:self.rect.y -= self.speedself.direction_move()elif self.direction == "s":if self.moving_down:if self.rect.y >= 650:self.rect.y = 650else:self.rect.y += self.speedself.direction_move()#敌方坦克,按照一个确定的随机方向,连续移动六步,才能再次改变方向 def enemy_random_move(self):if self.live:if self.step == 0:self.step1 = 0self.get_random()self.step = 120else:self.move()self.step -= 1def twinkle(self):if self.step1 == len(self.images)-1:self.step1 = 0else:self.image = self.images[self.step1]self.screen.blit(self.image,self.rect)pygame.display.update()self.step1 += 1

tank_explode.py

'''爆炸模块'''import pygameimport timeclass Explode():def __init__(self,screen,rect):self.live = Trueself.images = [pygame.image.load("imgs\\blast1.gif"), \pygame.image.load("imgs\\blast2.gif"), \pygame.image.load("imgs\\blast3.gif"), \pygame.image.load("imgs\\blast4.gif"), \pygame.image.load("imgs\\blast5.gif"), \pygame.image.load("imgs\\blast6.gif"), \pygame.image.load("imgs\\blast7.gif"), \pygame.image.load("imgs\\blast8.gif")]self.screen = screen#坦克爆炸位置self.rect = rectself.step = 0#在整个游戏过程中,循环使用,每隔0.05秒调用一次def update(self):if self.live:#最后一张爆炸图片已经显示了if self.step == len(self.images):self.live = Falseelse:                self.image = self.images[self.step]                self.screen.blit(self.image,(self.rect.x-30,self.rect.y-30))pygame.display.update()                self.step += 1else:return#删除该对象

tank_hero.py

'''己方坦克模块'''import pygame
from pygame.sprite import Sprite
'''定义一个坦克英雄类'''
import pygame.fontclass Tank_hero(Sprite):#初始化方法def __init__(self,screen,speed,image,x,y):Sprite.__init__(self)self.screen = screenself.screen_rect = self.screen.get_rect()self.image = pygame.image.load(image)self.rect = self.image.get_rect()self.rect.x = xself.rect.y = yself.life_limit = 3self.live1 = Trueself.live2 = Falseself.live3 = Falseself.live4 = Falseself.stop = Falseself.speed = speedself.font = pygame.font.SysFont(None,22)self.a = 1self.moving_up = Trueself.moving_down = Trueself.moving_right = Trueself.moving_left = Trueself.direction = "w"self.x = 1098self.y = 600self.color = (245,169,21)def transform_image_up(self,image):self.image = pygame.image.load(image)def transform_image_under(self,image):self.image = pygame.image.load(image)def transform_image_right(self,image):self.image = pygame.image.load(image)def transform_image_left(self,image):self.image = pygame.image.load(image)def move_up(self):self.rect.y -= self.speeddef move_under(self):self.rect.y += self.speeddef move_right(self):self.rect.x += self.speeddef move_left(self):self.rect.x -= self.speeddef no_screen(self):if self.rect.x <= 68:self.rect.x = 68if self.rect.x >= 1008:self.rect.x = 1008if self.rect.y <= 40:self.rect.y = 40if self.rect.y >= 650:self.rect.y = 650def residue_tank(self):if self.live1:self.tank_image = self.font.render(" X 3",True,self.color,(145,145,145))if self.live2:self.tank_image = self.font.render(" X 2",True,self.color,(145,145,145))if self.live3:self.tank_image = self.font.render(" X 1",True,self.color,(145,145,145))if self.live4:self.tank_image = self.font.render(" X 0",True,self.color,(145,145,145))self.screen.blit(self.tank_image,(self.x,self.y))

tank_war_main.py

'''坦克大战游戏'''import random
import time
import pygame
import sys
from tank_hero import Tank_hero
from tank_bullet import Bullet
from button import Button
from tank_explode import Explode
from tank_enemy import Tank_enemy,Tank_twinkle
from game_interface import Game_interface
from home import Home
from customize_wall import Walls
from tank_buff import Tank_buff
import timeclass Tank_war_main():'''初始化属性和方法'''def __init__(self):pygame.init()#播放开始音乐self.music = True#创建一个屏幕对象self.screen = pygame.display.set_mode((1136,750))#游戏名字self.caption = pygame.display.set_caption("坦克大战增强版")#背景颜色self.bg_color = (30,30,90)#非是游戏活动状态self.game_active = False#敌方坦克限制数量self.enemy_tank_limit = 30#闪烁坦克限制数量self.enemy_tank_limit1 = 5#游戏灰色边框图片self.bg_1 = pygame.image.load("imgs\\1-3.png")self.bg_2 = pygame.image.load("imgs\\1-2.png")#坦克出生显示的图片self.start1 = pygame.image.load("imgs\\born1.png")self.start2 = pygame.image.load("imgs\\born2.png")self.start3 = pygame.image.load("imgs\\born3.png")self.start4 = pygame.image.load("imgs\\born4.png")self.home_wall = True#定义定时器常量(敌方坦克)self.EVENT_ENEMY = pygame.USEREVENTself.event = pygame.USEREVENT + 1pygame.time.set_timer(self.event,5000)pygame.time.set_timer(self.EVENT_ENEMY,1000)#敌方坦克移动self.enemy_move = True#生成一个时钟对象self.clock = pygame.time.Clock()#循环播放音乐self.file2 = "music\林俊杰 - 进阶.mp3"self.bg_music = pygame.mixer.music.load(self.file2)#pygame.mixer.music.play(-1)#初始化游戏元素self.game_element()#执行游戏主循环self.loop()'''游戏主循环方法'''def loop(self):#生成一个背景图片对象,以便用于刚开始背景图像的绘制self.screen_bg = Game_interface(self.screen,"..",(-400,-400))while True:#设置帧率self.clock.tick(120)#监听鼠标事件self.mouse_check()#不是游戏活动状态if not self.game_active:#绘制按钮self.bg_button()#绘制背景图self.screen_bg.screen_bg()#游戏活动状态if self.game_active:#碰撞检测self.collide_check()#监听键盘事件self.keyboard_check()#不能让坦克英雄1移动到屏幕外面self.tank_hero1.no_screen()self.tank_hero2.no_screen()#用于碰撞墙壁所造成的不能移动self.tank_moving()#英雄坦克移动self.bullets_moving()#这个是buff定时时使用if self.enemy_move:#敌人移动self.enemy_tank_move()#敌人子弹移动self.enemy_tank_bullet_move()#绘制图片self.draw_image()#刷新显示self.update()#不是造墙的时候跳到背景图像切换if not self.home.live:self.game_active = False'''按钮点击和坦克英雄发射子弹事件方法'''def mouse_check(self):#如果一直按着一个键的时候会返回布尔类型True,反之key_pressed = pygame.key.get_pressed()#获取所有的游戏事件for event in pygame.event.get():#游戏退出if event.type == pygame.QUIT:pygame.quit()sys.exit()#敌方坦克定时的时间if event.type == self.event:self.enemy_move = True#监听鼠标事件if event.type == pygame.MOUSEBUTTONDOWN:#获取鼠标点击的位置mouse_x,mouse_y = pygame.mouse.get_pos()#判断鼠标点击的位置是否是开始按钮的位置if self.play_button.rect.collidepoint(mouse_x,mouse_y):self.game_active = Trueself.home.live = Trueself.home.wall = Trueself.wall.customize = False#播放开始音乐(初始化的时候是True)所以会播放一次(其它的时候是False)if self.music:file1 = "music\start.wav"start_music = pygame.mixer.Sound(file1)start_music.play()    #判断鼠标点击的位置是否是游戏说明的按钮if self.description_button.rect.collidepoint(mouse_x,mouse_y):#显示游戏说明self.game_description_interface()#停留9秒self.screen_bg.time = pygame.time.delay(9000)#判断鼠标点击的位置是否是自定义地图的按钮if self.customize_map_button.rect.collidepoint(mouse_x,mouse_y):self.home_wall = Falseself.game_active = True#初始化敌方坦克数量self.enemy_tank_limit = 30self.enemy_tank_limit1 = 5self.game_element()self.wall.customize = Trueself.init()if self.game_active:'''定时器'''#敌方坦克定时出现if self.home_wall:if event.type == self.EVENT_ENEMY:if len(self.enemy_list) < 4:if self.enemy_tank_limit > 0:new_enemy_tank1 = Tank_enemy(self.screen,"imgs\\enemy1l.gif",2)new_enemy_tank1.y = 1  self.born_image(new_enemy_tank1)self.enemy_list.add(new_enemy_tank1)self.enemy_tank_limit -= 1if self.enemy_tank_limit > 0:new_enemy_tank2 = Tank_enemy(self.screen,"imgs\\enemy2L.gif",3)new_enemy_tank2.y = 2self.born_image(new_enemy_tank2)self.enemy_list.add(new_enemy_tank2)self.enemy_tank_limit -= 1if self.enemy_tank_limit > 0:new_enemy_tank3 = Tank_enemy(self.screen,"imgs\\enemy3L.gif",2)new_enemy_tank3.y = 5self.born_image(new_enemy_tank3)self.enemy_list.add(new_enemy_tank3)self.enemy_tank_limit -= 1if len(self.enemy_list) == 3 and self.enemy_tank_limit1 > 0:new_enemy_tank_twinkle = Tank_twinkle(self.screen)self.born_image(new_enemy_tank_twinkle)self.born_image(new_enemy_tank_twinkle)self.enemy_list.add(new_enemy_tank_twinkle)self.enemy_tank_limit1 -= 1for new_enemy_tank in self.enemy_list:if new_enemy_tank.direction == "w":new_enemy_bullet = Bullet(self.screen,"top","imgs\\tankmissile.gif",new_enemy_tank)self.enemy_bullet_group.add(new_enemy_bullet)if new_enemy_tank.direction == "s":new_enemy_bullet = Bullet(self.screen,"under","imgs\\tankmissile.gif",new_enemy_tank)self.enemy_bullet_group.add(new_enemy_bullet)if new_enemy_tank.direction == "a":new_enemy_bullet = Bullet(self.screen,"left","imgs\\tankmissile.gif",new_enemy_tank)self.enemy_bullet_group.add(new_enemy_bullet)if new_enemy_tank.direction == "d":new_enemy_bullet = Bullet(self.screen,"right","imgs\\tankmissile.gif",new_enemy_tank)self.enemy_bullet_group.add(new_enemy_bullet)              if event.type == pygame.KEYDOWN:if self.wall.customize:if event.key == pygame.K_j:self.new_wall = Walls(self.screen)self.new_wall.rect.x = self.wall.rect.xself.new_wall.rect.y = self.wall.rect.yself.new_wall.step = self.wall.stepif self.new_wall.step == 0:self.new_wall.rect.width = 30self.new_wall.rect.height = 30if self.new_wall.step == 1:self.new_wall.rect.width = 60self.new_wall.rect.height = 30if self.new_wall.step == 2:self.new_wall.rect.width = 30self.new_wall.rect.height = 60if self.new_wall.step == 3:self.new_wall.rect.width = 60self.new_wall.rect.height = 60if self.new_wall.step == 4:self.new_wall.rect.width = 30self.new_wall.rect.height = 30if self.new_wall.step == 5 or self.new_wall.step == 6:self.new_wall.rect.width = 60self.new_wall.rect.height = 60self.walls.add(self.new_wall)if event.key == pygame.K_k:self.wall.step += 1if self.wall.step == 7:self.wall.step = 0    if self.home_wall:#坦克英雄一发射子弹if self.tank_hero1.live1 or self.tank_hero1.live2 or self.tank_hero1.live3 :if event.key == pygame.K_j and key_pressed[pygame.K_w]:self.music_fire()new_bullet = Bullet(self.screen,"top","imgs\\tankmissile.gif",self.tank_hero1)self.bullets.add(new_bullet)elif event.key == pygame.K_j and key_pressed[pygame.K_s]:self.music_fire()new_bullet = Bullet(self.screen,"under","imgs\\tankmissile.gif",self.tank_hero1)self.bullets.add(new_bullet)elif event.key == pygame.K_j and key_pressed[pygame.K_d]:self.music_fire()new_bullet = Bullet(self.screen,"right","imgs\\tankmissile.gif",self.tank_hero1)self.bullets.add(new_bullet)elif event.key == pygame.K_j and key_pressed[pygame.K_a]:self.music_fire()new_bullet = Bullet(self.screen,"left","imgs\\tankmissile.gif",self.tank_hero1)self.bullets.add(new_bullet)#坦克英雄二发射子弹if self.tank_hero2.live1 or self.tank_hero2.live2 or self.tank_hero2.live3:if event.key == pygame.K_0 and key_pressed[pygame.K_UP]:self.music_fire()new_bullet = Bullet(self.screen,"top","imgs\\tankmissile.gif",self.tank_hero2)self.bullets.add(new_bullet)elif event.key == pygame.K_0 and key_pressed[pygame.K_DOWN]:self.music_fire()new_bullet = Bullet(self.screen,"under","imgs\\tankmissile.gif",self.tank_hero2)self.bullets.add(new_bullet)elif event.key == pygame.K_0 and key_pressed[pygame.K_RIGHT]:self.music_fire()new_bullet = Bullet(self.screen,"right","imgs\\tankmissile.gif",self.tank_hero2)self.bullets.add(new_bullet)elif event.key == pygame.K_0 and key_pressed[pygame.K_LEFT]:self.music_fire()new_bullet = Bullet(self.screen,"left","imgs\\tankmissile.gif",self.tank_hero2)self.bullets.add(new_bullet)if event.key == pygame.K_SPACE:self.game_active = Falseself.music = Falseself.home_wall = Trueif self.wall.customize:key_pressed = pygame.key.get_pressed()if key_pressed[pygame.K_w]:self.wall.move_up()if key_pressed[pygame.K_s]:self.wall.move_under()if key_pressed[pygame.K_d]:self.wall.move_right()if key_pressed[pygame.K_a]:self.wall.move_left()'''坦克英雄移动检测方法'''def keyboard_check(self):if self.home_wall:key_pressed = pygame.key.get_pressed()for event in pygame.event.get():#游戏退出if event.type == pygame.QUIT:pygame.quit()sys.exit() #坦克英雄一按键移动            if self.tank_hero1.live1 or self.tank_hero1.live2 or self.tank_hero1.live3:if key_pressed[pygame.K_w]:if self.tank_hero1.moving_up:self.tank_hero1.direction = "w"self.tank_hero1.move_up()self.tank_hero1.transform_image_up("imgs\\p1tankU.gif")elif key_pressed[pygame.K_s]:if self.tank_hero1.moving_down:self.tank_hero1.direction = "s"self.tank_hero1.move_under()self.tank_hero1.transform_image_under("imgs\\p1tankD.gif")elif key_pressed[pygame.K_d]:if self.tank_hero1.moving_right:self.tank_hero1.direction = "d"self.tank_hero1.move_right()self.tank_hero1.transform_image_right("imgs\\p1tankR.png")elif key_pressed[pygame.K_a]:if self.tank_hero1.moving_left:self.tank_hero1.direction = "a"self.tank_hero1.move_left()self.tank_hero1.transform_image_left("imgs\\p1tankL.gif")#坦克英雄二移动if self.tank_hero2.live1 or self.tank_hero2.live2 or self.tank_hero2.live3:if key_pressed[pygame.K_UP]:if self.tank_hero2.moving_up:self.tank_hero2.direction = "w"self.tank_hero2.move_up()self.tank_hero2.transform_image_up("imgs\\p2tankU.gif")elif key_pressed[pygame.K_DOWN]:if self.tank_hero2.moving_down:self.tank_hero2.direction = "s"self.tank_hero2.move_under()self.tank_hero2.transform_image_under("imgs\\p2tankD.gif")elif key_pressed[pygame.K_RIGHT]:if self.tank_hero2.moving_right:self.tank_hero2.direction = "d"self.tank_hero2.move_right()self.tank_hero2.transform_image_right("imgs\\p2tankR.gif")elif key_pressed[pygame.K_LEFT]:if self.tank_hero2.moving_left:self.tank_hero2.direction = "a"self.tank_hero2.move_left()   self.tank_hero2.transform_image_left("imgs\\p2tankL.gif")'''坦克英雄子弹移动和删除方法'''def bullets_moving(self):for bullet in self.bullets.sprites():if bullet.direction == "top":bullet.moving_t()elif bullet.direction == "under":bullet.moving_u()elif bullet.direction == "right":bullet.moving_r()elif bullet.direction == "left":bullet.moving_l()for bullet in self.bullets.copy():if bullet.rect.bottom <= 0 or bullet.rect.bottom >=750 or bullet.rect.right >= 1136 or bullet.rect.right <= 0:self.bullets.remove(bullet)'''敌军坦克出现移动'''def enemy_tank_move(self):if self.home_wall:for enemy in self.enemy_list.sprites():enemy.enemy_random_move()enemy.update()'''敌方坦克子弹移动'''def enemy_tank_bullet_move(self):if self.home_wall:for bullet in self.enemy_bullet_group.sprites():if bullet.direction == "top":bullet.moving_t()if bullet.direction == "under":bullet.moving_u()if bullet.direction == "right":bullet.moving_r()if bullet.direction == "left":bullet.moving_l()for bullet in self.enemy_bullet_group.copy():if bullet.rect.bottom <= 0 or bullet.rect.bottom >=750 or bullet.rect.right >= 1136 or bullet.rect.right <= 0:self.enemy_bullet_group.remove(bullet)'''碰撞检测'''def collide_check(self):for enemy_bullet in self.enemy_bullet_group:hit_list = pygame.sprite.spritecollide(enemy_bullet,self.tank_hero_group,False)for hero_explode in hit_list:self.enemy_bullet_group.remove(enemy_bullet)tank_explode = Explode(self.screen,hero_explode.rect)if hero_explode.live1:hero_explode.live1 = Falsehero_explode.live2 = Trueself.tank_hero_group.remove(hero_explode)self.music_explode()for i in range(1,10):tank_explode.update()if hero_explode.a == 1:hero_explode.rect.x = 341else:hero_explode.rect.x = 674hero_explode.rect.y = 650elif hero_explode.live2:hero_explode.live2 = Falsehero_explode.live3 = Trueself.tank_hero_group.remove(hero_explode)self.music_explode()for i in range(1,10):tank_explode.update()if hero_explode.a == 1:hero_explode.rect.x = 341else:hero_explode.rect.x = 674hero_explode.rect.y = 650elif hero_explode.live3:hero_explode.live3 = Falsehero_explode.live4 = Trueself.music_explode()self.tank_hero_group.remove(hero_explode)for i in range(1,10):tank_explode.update()if hero_explode.a == 1:hero_explode.rect.x = 341else:hero_explode.rect.x = 674hero_explode.rect.y = 650for hero_bullet in self.bullets:hit_list = pygame.sprite.spritecollide(hero_bullet,self.enemy_list,False)for enemy_explode in hit_list:if enemy_explode.y >= 3:self.bullets.remove(hero_bullet)enemy_explode.y -= 1file1 = "music\\hit.wav"start_music = pygame.mixer.Sound(file1)start_music.play()tank_explode = Explode(self.screen,enemy_explode.rect)for i in range(1,10):tank_explode.update()if enemy_explode.y == 1 or enemy_explode.y == 2:self.bullets.remove(hero_bullet)enemy_explode.live = Falsetank_explode = Explode(self.screen,enemy_explode.rect)for i in range(1,10):tank_explode.update()self.enemy_list.remove(enemy_explode)self.music_explode()if enemy_explode.o == 1:if not enemy_explode.live:tank_buff = Tank_buff(self.screen)self.tank_buff_list.add(tank_buff)for hero_tank in self.tank_hero_group:collide_buff_list = pygame.sprite.spritecollide(hero_tank,self.tank_buff_list,False)for buff in collide_buff_list:if buff.m == 0:self.enemy_move = Falseif buff.m == 1:hero_tank.speed = 3for bullet in self.bullets:bullet.speed = 6if buff.m == 2:for enemy in self.enemy_list:file1 = "music\\blast.wav"start_music = pygame.mixer.Sound(file1)start_music.play()tank_explode = Explode(self.screen,enemy.rect)for i in range(1,10):tank_explode.update()self.enemy_list.remove(enemy)file1 = "music\\add.wav"start_music = pygame.mixer.Sound(file1)start_music.play()self.tank_buff_list.remove(buff)hit_list = pygame.sprite.spritecollide(self.home,self.enemy_bullet_group,False)for hit in hit_list:self.init()self.game_element()self.home.live = Falsefor hero_bullet in self.bullets:hit_wall_list = pygame.sprite.spritecollide(hero_bullet,self.walls,False)for wall in hit_wall_list:if wall.step == 0 or wall.step == 1 or wall.step == 2 or wall.step == 3:                    wall_explode = Explode(self.screen,wall.rect)for i in range(1,10):wall_explode.update()file1 = "music\hit.wav"start_music = pygame.mixer.Sound(file1)start_music.play()self.bullets.remove(hero_bullet)if wall.step == 4:wall_explode = Explode(self.screen,wall.rect)for i in range(1,10):wall_explode.update()self.walls.remove(wall)self.bullets.remove(hero_bullet)for bullet in self.enemy_bullet_group:hit_wall_list = pygame.sprite.spritecollide(bullet,self.walls,False)for wall in hit_wall_list:if wall.step == 0 or wall.step == 1 or wall.step == 2 or wall.step == 3:wall_explode = Explode(self.screen,wall.rect)for i in range(1,10):wall_explode.update()file1 = "music\hit.wav"start_music = pygame.mixer.Sound(file1)start_music.play()self.enemy_bullet_group.remove(bullet)if wall.step == 4:wall_explode = Explode(self.screen,wall.rect)for i in range(1,10):wall_explode.update()self.walls.remove(wall)self.enemy_bullet_group.remove(bullet)#英雄坦克碰撞墙壁不能继续向前走for hero_tank in self.tank_hero_group:collide_tank_list = pygame.sprite.spritecollide(hero_tank,self.walls,False)for wall in collide_tank_list:if wall.step == 0 or wall.step == 1 or wall.step == 2 or wall.step == 3 or wall.step == 4 or wall.step == 5:if hero_tank.direction == "w" and wall.rect.bottom == hero_tank.rect.top + 1 or wall.rect.bottom == hero_tank.rect.top + 2 or wall.rect.bottom == hero_tank.rect.top + 3:hero_tank.moving_up = Falseelif hero_tank.direction == "s" and wall.rect.top + 1 == hero_tank.rect.bottom or wall.rect.top + 2 == hero_tank.rect.bottom or wall.rect.top + 3 == hero_tank.rect.bottom:hero_tank.moving_down = Falseelif hero_tank.direction == "d" and wall.rect.left + 1 == hero_tank.rect.right or wall.rect.left + 2 == hero_tank.rect.right or wall.rect.left + 3 == hero_tank.rect.right:hero_tank.moving_right = Falseelif hero_tank.direction == "a" and wall.rect.right == hero_tank.rect.left + 1 or wall.rect.right == hero_tank.rect.left + 2 or wall.rect.right == hero_tank.rect.left + 3:hero_tank.moving_left = False#敌方坦克碰撞墙壁不能继续向前走for enemy_tank in self.enemy_list:collide_tank_list = pygame.sprite.spritecollide(enemy_tank,self.walls,False)for wall in collide_tank_list:if wall.step == 0 or wall.step == 1 or wall.step == 2 or wall.step == 3 or wall.step == 4 or wall.step == 5:if enemy_tank.direction == "w" and wall.rect.bottom == enemy_tank.rect.top + 1 or wall.rect.bottom == enemy_tank.rect.top + 2 or wall.rect.bottom == enemy_tank.rect.top + 3:enemy_tank.moving_up = Falseelif enemy_tank.direction == "s" and wall.rect.top + 1 == enemy_tank.rect.bottom or wall.rect.top + 2 == enemy_tank.rect.bottom or wall.rect.top + 3 == enemy_tank.rect.bottom:enemy_tank.moving_down = Falseelif enemy_tank.direction == "d" and wall.rect.left + 1 == enemy_tank.rect.right or wall.rect.left + 2 == enemy_tank.rect.right or wall.rect.left + 3 == enemy_tank.rect.right:enemy_tank.moving_right = Falseelif enemy_tank.direction == "a" and wall.rect.right == enemy_tank.rect.left + 1 or wall.rect.right == enemy_tank.rect.left + 2 or wall.rect.right == enemy_tank.rect.left + 3:enemy_tank.moving_left = False'''让坦克英雄能移动问题(也就是照应碰撞墙壁)'''def tank_moving(self):self.tank_hero1.moving_up = Trueself.tank_hero1.moving_down = Trueself.tank_hero1.moving_right = Trueself.tank_hero1.moving_left = Trueself.tank_hero2.moving_up = Trueself.tank_hero2.moving_down = Trueself.tank_hero2.moving_right = Trueself.tank_hero2.moving_left = True'''游戏元素方法'''def game_element(self):#生成坦克英雄self.tank_hero1 = Tank_hero(self.screen,2,"imgs\\p1tankU.gif",341,650)self.tank_hero2 = Tank_hero(self.screen,2,"imgs\\p2tankU.gif",674,650)#区别坦克英雄一和坦克英雄二self.tank_hero2.a = 2#生成子弹精灵组(坦克英雄一和坦克英雄二)self.bullets = pygame.sprite.Group()#生成子弹精灵组(敌方坦克)self.enemy_bullet_group = pygame.sprite.Group()#生成敌人子弹精灵组self.enemy_list = pygame.sprite.Group()#生成坦克英雄精灵组self.tank_hero_group = pygame.sprite.Group()#把两个英雄坦克添加到坦克英雄精灵组中self.tank_hero_group.add(self.tank_hero1,self.tank_hero2)#坦克英雄小图标(用于计算坦克英雄生命个数)self.tank1 = pygame.image.load("imgs\\000.gif")self.tank2 = pygame.image.load("imgs\\0000.gif")#这个是家,如果家爆炸了,game over.self.home = Home(self.screen)#这个是生成一个墙对象self.wall = Walls(self.screen)#墙壁的精灵组self.walls = pygame.sprite.Group()#调用墙对象的draw_home方法self.home.draw_home()#这个是坦克buffself.tank_buff_list = pygame.sprite.Group()#刚开始游戏填充颜色self.screen.fill(self.bg_color)'''游戏说明界面'''def game_description_interface(self):#生成矩形对象self.tank_hero1_handle = Game_interface(self.screen,"坦克英雄一操作",(298,100))self.tank_hero1_up_handle = Game_interface(self.screen,"向上按键:w",(298,160))self.tank_hero1_down_handle = Game_interface(self.screen,"向下按键:s",(298,220))self.tank_hero1_right_handle = Game_interface(self.screen,"向右按键:d",(298,280))self.tank_hero1_left_handle = Game_interface(self.screen,"向上按键:a",(298,340))self.tank_hero1_fire_handle = Game_interface(self.screen,"发射子弹:j",(298,400))self.tank_hero2_handle = Game_interface(self.screen,"坦克英雄二操作",(818,100))self.tank_hero2_up_handle = Game_interface(self.screen,"向上按键:↑",(818,160))self.tank_hero2_down_handle = Game_interface(self.screen,"向上按键:↓",(818,220))self.tank_hero2_right_handle = Game_interface(self.screen,"向上按键:→",(818,280))self.tank_hero2_left_handle = Game_interface(self.screen,"向上按键:←",(818,340))self.tank_hero2_fire_handle = Game_interface(self.screen,"发射子弹:0",(818,400))self.game_suspend = Game_interface(self.screen,"游戏暂停:空格键",(543,500))self.game_point = Game_interface(self.screen,"温馨提示:请等待9秒自动返回",(543,560))self.tank_hero1_handle.draw_interface()self.tank_hero1_up_handle.draw_interface()self.tank_hero1_down_handle.draw_interface()self.tank_hero1_right_handle.draw_interface()self.tank_hero1_left_handle.draw_interface()self.tank_hero1_fire_handle.draw_interface()self.tank_hero2_handle.draw_interface()self.tank_hero2_up_handle.draw_interface()self.tank_hero2_down_handle.draw_interface()self.tank_hero2_right_handle.draw_interface()self.tank_hero2_left_handle.draw_interface()self.tank_hero2_fire_handle.draw_interface()self.game_suspend.draw_interface()self.game_point.draw_interface()#绘制矩形对象pygame.display.update()'''绘制游戏按钮'''def bg_button(self):#创建开始游戏按钮self.play_button = Button(self.screen,"开始游戏")#绘制开始游戏按钮self.play_button.draw_button()#创建游戏说明按钮self.description_button = Button(self.screen,"游戏说明")self.description_button.rect.center = (450,360)#创建自定义地图按钮self.customize_map_button = Button(self.screen,"自定义地图")self.customize_map_button.rect.center = (450,420)#绘制自定义地图按钮self.customize_map_button.draw_button()#绘制游戏说明按钮self.description_button.draw_button()#刷新显示pygame.display.update()'''坦克英雄发射子弹音效'''def music_fire(self):self.file4 = "music\\fire.wav"fire_music = pygame.mixer.Sound(self.file4)fire_music.play()'''所有坦克爆炸音效'''def music_explode(self):self.file3 = "music\\blast.wav"explode_music = pygame.mixer.Sound(self.file3)explode_music.play()'''绘制图像方法'''def draw_image(self):self.screen.fill(self.bg_color)if self.home_wall:if self.tank_hero1.live1:self.screen.blit(self.tank_hero1.image,self.tank_hero1.rect)if self.tank_hero2.live1:self.screen.blit(self.tank_hero2.image,self.tank_hero2.rect)if self.tank_hero1.live2:self.screen.blit(self.tank_hero1.image,self.tank_hero1.rect)self.tank_hero_group.add(self.tank_hero1)if self.tank_hero1.live3:self.screen.blit(self.tank_hero1.image,self.tank_hero1.rect)self.tank_hero_group.add(self.tank_hero1)if self.tank_hero2.live2:self.screen.blit(self.tank_hero2.image,self.tank_hero2.rect)self.tank_hero_group.add(self.tank_hero2)if self.tank_hero2.live3:self.screen.blit(self.tank_hero2.image,self.tank_hero2.rect)self.tank_hero_group.add(self.tank_hero2)self.bullets.draw(self.screen)self.enemy_list.draw(self.screen)self.enemy_bullet_group.draw(self.screen)self.tank_hero1.residue_tank()self.tank_hero2.y = 650self.tank_hero2.color = (158,253,200)self.tank_hero2.residue_tank()self.home.draw_home()self.screen.blit(self.bg_2,(0,0))self.screen.blit(self.bg_1,(0,0))self.screen.blit(self.bg_2,(0,710))self.screen.blit(self.bg_1,(1068,0))self.screen.blit(self.tank1,(1073,600))self.screen.blit(self.tank2,(1073,650))self.tank_hero1.residue_tank()self.tank_hero2.y = 650self.tank_hero2.color = (158,253,200)self.tank_hero2.residue_tank()if not self.home_wall:self.wall.update()self.wall.no_screen()if len(self.walls)!=0:self.walls.draw(self.screen)self.tank_buff_list.draw(self.screen)def init(self):'''初始化所有模块'''self.enemy_list.empty()self.enemy_bullet_group.empty()self.tank_hero1.live1 = Trueself.tank_hero1.live2 = Falseself.tank_hero1.live3 = Falseself.tank_hero2.live1 = Trueself.tank_hero2.live2 = Falseself.tank_hero2.live3 = Falseself.tank_hero1.residue_tank()self.tank_hero2.residue_tank()self.bullets.empty()'''刷新显示方法'''def update(self):self.bullets.update()self.enemy_list.update()self.enemy_bullet_group.update()self.walls.update()self.tank_buff_list.update()pygame.display.update()'''绘制坦克出生的图片'''def born_image(self,rect):self.screen.blit(self.start1,rect)pygame.time.delay(10)pygame.display.update()self.screen.blit(self.start2,rect)pygame.time.delay(10)pygame.display.update()self.screen.blit(self.start3,rect)pygame.time.delay(10)pygame.display.update()self.screen.blit(self.start4,rect)pygame.time.delay(10)pygame.display.update()tank_big_war = Tank_war_main()

下面是素材

链接:https://pan.baidu.com/s/1xy1VSIrdlPfkB7i1SnbCEQ
提取码:mnhx

利用python中的pygame模块开发fc坦克大战(可自定义地图,包括部分素材)相关推荐

  1. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  2. python中的pygame模块使用方法_Pygame的基本使用

    Pygame有很多模块,每个模块又有很多方法,在此不能够逐一讲解,所以,我们通过一个实例来学习Pygame,然后再分解代码,讲解代码中的模块. 例:制作一个跳跃的小球游戏. 创建一个游戏窗口,然后在窗 ...

  3. 利用python中的gzip模块压缩和解压数据流和文件

    直接给出源码实现, 分为两种情况: 1.网络连接中的数据流的压缩和解压,或是打开的文件读取一部分 2.打开文件压缩或是解压 #!/usr/bin/env python #encoding: utf-8 ...

  4. python doc转docx_利用python中的win32com模块将doc文件转为docx文件

    简介 win32com模块的功能也是非常的强大的,能够处理各种的文件 word操作 如何使用python的win32com模块实现将doc类型文件转成docx类型的文件 import os from ...

  5. 利用python中的zipfile模块进行解压缩

    文章目录 一.主要使用代码: 二.详解 1.压缩文件的基本信息 2.解压文件 本文主要说解压的问题 一.主要使用代码: #导入模块 import zipfile #压缩包所在路径 file_dir=' ...

  6. python中的sympy模块求导和解方程

    利用python中的sympy模块求导和解方程 对sympy这个模块我不是很了解,我学习python主要是想往机器学习和深度学习方向发展.这次了解到有这个模块,是因为有同学在写论文中要用到求导,并且计 ...

  7. python保存变量sklearn.externals_如何利用python中的sklearn.externals 模块保存加载训练模型...

    前提:在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上进行测试,本文主要介绍如何利用python中的sklearn.externals 模块保存训练模型, ...

  8. python中的numpy模块

    参考  python中的numpy模块 - 云+社区 - 腾讯云 目录 NumPy 教程 学习本教程前你需要了解 NumPy 应用 相关链接 NumPy 安装 1.使用已有的发行版本 2.使用 pip ...

  9. 介绍Python中的__future__模块

    这篇文章主要介绍了介绍Python中的__future__模块,__future__模块使得在Python2.x的版本下能够兼容更多的Python3.x的特性,需要的朋友可以参考下 Python的每个 ...

  10. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

最新文章

  1. 界面代码ios不响应presentModalViewController界面的处理
  2. 目标检测--R-FCN: Object Detection via Region-based Fully Convolutional Networks
  3. 在centos上通过yum直接安装最新版gcc和开发工具
  4. 【Android 热修复】Tinker 简介
  5. java 录屏_java 录屏 小工具源码(idea)
  6. oracle 01304,关于ORA-01034和ORA-27101的解决方法
  7. ServletContext作用功能详解
  8. 2016年CIO要掌握五大新思维
  9. skb_buff结构体解析
  10. C++编译为动态链接库并用python调用
  11. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写
  12. 2022年护士考试知识强化巩固习题及答案
  13. Unity UI 框架
  14. 不经意传输协议快速入门
  15. 弘扬文明之风,彰显正能量!中山公园职工平凡岗位上的不凡坚守!
  16. java实现环形队列
  17. STM32的HAL库知识总结
  18. 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第五次培训
  19. 科技部“云计算和大数据”重点专项2018年度项目申报指南发布
  20. 中信银行国航携程维萨联合推出联名信用卡

热门文章

  1. gateway-统一权限-认证
  2. session超时问题
  3. 汇编语言程序设计 实验7 循环程序设计
  4. 这些神奇的 QQ 你还记得几个?
  5. GStreamer 简化 Linux 多媒体开发
  6. winrar4.2 破解 注册码
  7. hadoop 启动 报running beyond virtual memory错误的解决
  8. Web前端性能优化优秀文章集锦
  9. Java版本新零售小程序saas商城全开源系统
  10. Unity3D 官方资源包Standard Assets导入