本文实例为大家分享了pygame模块实现坦克大战游戏的具体代码,供大家参考,具体内容如下
首先,第一步,游戏简单素材的准备。
炮弹,   炮弹,坦克移动。音乐-开火素材。
其次,思路整理。
我们需要几个类,分别是玩家类,敌人类,炮弹类及地图类,开始游戏界面以及结束界面,血条等等。
开始coding。
主函数,new一个对象(java乱入emmm),声明一个对象。
# encoding : utf-8
# anthor : comi
from gameloop import *
from pygame import *
import pygame,sys,time
if __name__ == '__main__':
player = game() # 声明一个类对象
player.game_start('KEEP-GOING') # 调用开始函数
while player.playing: # 进入游戏运行
player.new() # 开始游戏
player.screen.fill(black)
player.game_start('GAME-OVER') # 游戏结束
time.sleep(1.5) # 可以不要
这里可以根据自己的需要进行更改相关代码
接下来 游戏的主循环
# encoding : utf-8
# author : comi
from setting import *
from pygame import *
from Sprite import *
import pygame,sys
vec = pygame.math.Vector2
class game: # 游戏类 包含循环等
def __init__(self): # 初始化
pygame.init() # pygame 初始化
pygame.display.set_caption("Keep-Going") # 游戏窗口 左上角名称
self.screen = pygame.display.set_mode((width, height)) # 游戏窗口的大小
self.FpsClock = pygame.time.Clock() # 设置游戏的刷新率
self.playing = True # 进入游戏的状态
self.running = True # 游戏运行的状态
self.Waiting = True # 游戏等待的状态
self.Pblood = 100 # 玩家血量
self.Eblood = 100 # 敌人血量
self.player = Player() # 声明一个游戏玩家对象
self.enemy = Enemy() # 声明一个敌人对象
self.all_groups = pygame.sprite.Group() # 通过pygame自带的 group 来判断碰撞检测
self.player_groups = pygame.sprite.Group()
self.Map_groups = pygame.sprite.Group()
self.Enemy_groups = pygame.sprite.Group()
def new(self): # 开始一个游戏
self.player_groups.add(self.player) # 将玩家添加到玩家组
self.all_groups.add(self.player) # 将玩家添加到 所有组
self.Enemy_groups.add(self.enemy)
self.all_groups.add(self.enemy)
for platfroms in Map1: # 地图
p = Platform(*platfroms) # 取出所有值
self.Map_groups.add(p)
self.all_groups.add(p)
self.run() # 调用函数运行游戏
def game_start(self,text): # 游戏的开始界面
self.text_draw(width / 2, height / 4, 64, text) # 文本
self.text_draw(width / 2, height * 3 / 4, 25,'Press any key to continue',) # 文本
pygame.display.update() # 更行展示
while self.Waiting: # 实现 按键等待开始效果
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
self.Waiting = False
def update(self): # 画面更新
self.Map_groups.update()
self.player_groups.update()
self.enemy.Bullet_groups.update(self.enemy.flag) # 通过按键判断子弹方向
self.player.Bullet_groups.update(self.player.flag)
self.Enemy_groups.update()
hit = pygame.sprite.groupcollide(self.player.Bullet_groups, self.Map_groups, True,False) # 子弹碰墙消失
hit = pygame.sprite.groupcollide(self.enemy.Bullet_groups, self.Map_groups, True, False)
PMC = pygame.sprite.spritecollide(self.player,self.Map_groups,False,False) # 撞墙
if PMC:
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_a]:
self.player.pos.x = self.player.pos.x + gap
if key_pressed[pygame.K_d]:
self.player.pos.x = self.player.pos.x - gap
if key_pressed[pygame.K_w]:
self.player.pos.y = self.player.pos.y + gap
if key_pressed[pygame.K_s]:
self.player.pos.y = self.player.pos.y - gap
EMC = pygame.sprite.spritecollide(self.enemy,self.Map_groups,False,False) # 撞墙
if EMC:
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_LEFT]:
self.enemy.pos.x = self.enemy.pos.x + gap
if key_pressed[pygame.K_RIGHT]:
self.enemy.pos.x = self.enemy.pos.x - gap
if key_pressed[pygame.K_UP]:
self.enemy.pos.y = self.enemy.pos.y + gap
if key_pressed[pygame.K_DOWN]:
self.enemy.pos.y = self.enemy.pos.y - gap
def run(self):
while self.running:
self.FpsClock.tick(Fps) # 设置帧率
self.events() # 获取事件
self.draw_pic() # 画出图片
self.update()
f self.Eblood <= 0: # enemy
self.screen.fill(black)
self.game_start('P1 WIN!')
time.sleep(1.5)
self.running = False
self.playing = False
if self.Pblood <= 0: # Player
q-qqй4(4(}4((m-}UAtq-qq4(4(}4((m-}=]9tq-qq4(4(}4((m-}Р4(4(й(4(С4(}(q-q4(4(С( Ф4( 4(}(4(4) СM而
4(}}|
r'j:Fn(M}}|4(q-qqй4(4(Р4(йbjnRй4((4((而(й4(而(й4(耍4(й4(而4(й4(rB;jZ4(4(4)4))4)4))})})54(д4(4(4(4(4(4(4(4(а4(4(4(t((4)4)4)4)4)4)啱4)4(v/"cjSO'A
b>G
O'n7ZGCk2'2'jZG7&O_/惚"=3v?j"$4(r'jB3>J3"GVg4(rB;C3V#zs3N7>4(е聍顽顽ь4(nk"?j
r/c4(нMх}ZZ_"?nB 4(нMх}?"?4(нMх}"?nB 4(brZj3ro疒j惚r'&*rokkR2 |