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

基于对面向对象编程的思想完成简单的坦克大战游戏。主要目的锻炼面相对象编程思想

同样的在使用python进行游戏编写时需要安装pygame模块

安装方法:

pycharm安装方式:File --> setting

游戏中的主要对象有:

坦克父类:BaseTank

我方坦克:HeroTank

敌方坦克:EnemyTank

子弹类:Bullet

爆炸类:Explode

墙类:Wall

主进程:MainGame

定义一个精灵类:

# 定义一个精灵类

class BaseItem(Sprite):

def __init__(self, color, width, height):

# Call the parent class (Sprite) constructor

pygame.sprite.Sprite.__init__(self)

坦克父类:

# 坦克父类

class BaseTank(BaseItem):

# 定义类属性,所有坦克对象高和宽都是一样

width = 60

height = 60

def __init__(self, left, top):

self.direction = 'U' # 坦克的方向默认向上

# 存放图片的字典

self.images = {

'U': pygame.image.load('tank_img/p1tankU.gif'),

'D': pygame.image.load('tank_img/p1tankD.gif'),

'L': pygame.image.load('tank_img/p1tankL.gif'),

'R': pygame.image.load('tank_img/p1tankR.gif')

}

self.image = self.images[self.direction] # 坦克的图片由方向决定

self.speed = 5 # 坦克的速度

self.rect = self.image.get_rect()

# 设置放置的位置

self.rect.left = left

self.rect.top = top

self.stop = True # 坦克是否停止

self.live = True # 决定坦克是否消灭了

# 保持原来的位置

self.oldLeft = self.rect.left

self.oldTop = self.rect.top

# 射击方法

def shot(self):

return Bullet(self)

# 坦克的移动

def move(self):

# 保持原来的状态

self.oldLeft = self.rect.left

self.oldTop = self.rect.top

# 判断坦克的移动方向

if self.direction == 'U':

if self.rect.top > 0:

self.rect.top -= self.speed

elif self.direction == 'D':

if self.rect.top + self.rect.height < WINDOW_HEIGHT:

self.rect.top += self.speed

elif self.direction == 'L':

if self.rect.left > 0:

self.rect.left -= self.speed

elif self.direction == 'R':

if self.rect.left+self.rect.height < WINDOW_WIDTH:

self.rect.left += self.speed

# 加载坦克

def displayTank(self):

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

MainGame.window.blit(self.image, self.rect)

# 撞墙处理

def hitWall(self):

for wall in MainGame.wallList:

if pygame.sprite.collide_rect(wall, self):

self.stay()

# 处理位置不变

def stay(self):

self.rect.left = self.oldLeft

self.rect.top = self.oldTop

我方坦克类():

# 我方坦克

class HeroTank(BaseTank):

def __init__(self, left, top):

super().__init__(left, top)

# 我方坦克碰撞敌方坦克

def myTank_hit_enemyTank(self):

for enemyTank in MainGame.EnemyTankList:

if pygame.sprite.collide_rect(enemyTank, self):

self.stay()

敌方坦克类():

# 敌方坦克

class EnemyTank(BaseTank):

def __init__(self, left, top, speed):

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

self.images = {

'U': pygame.image.load('tank_img/enemy1U.gif'),

'D': pygame.image.load('tank_img/enemy1D.gif'),

'L': pygame.image.load('tank_img/enemy1L.gif'),

'R': pygame.image.load('tank_img/enemy1R.gif')

}

self.direction = self.RandomDirection()

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

self.rect = self.image.get_rect()

self.rect.left = left

self.rect.top = top

self.speed = speed

self.step = 60

self.enemy_flag = False

# 坦克出生随机方向

def RandomDirection(self):

num = random.randint(1, 4)

if num == 1:

return 'U'

elif num == 2:

return 'D'

elif num == 3:

return 'L'

else:

return 'R'

# 坦克随机移动

def randomMove(self):

if self.step < 0:

self.direction = self.RandomDirection()

self.step = 60

else:

self.move()

self.step -= 1

# 坦克射击

def shot(self):

num = random.randint(1, 100)

if num < 4:

return Bullet(self)

# 敌方坦克碰撞我方坦克

def enemyTank_hit_MyTank(self):

for enemy in MainGame.EnemyTankList:

if MainGame.my_tank and MainGame.my_tank.live:

if pygame.sprite.collide_rect(MainGame.my_tank, enemy):

self.stay()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值