以下代码单纯是个简易的没有完全完成的代码,主坦克单纯只能进行移动的操作,其他攻击类以及敌方坦克的移动攻击均未设置。
(精灵图可以到bilibili或者网上找精灵图,只需要改一下以下代码的文件位置就行)
import pygame.display
import pygame, time, random
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 800
COLRE = pygame.Color(0, 0, 0)
TEXT_COLOR = pygame.Color(255, 0, 0)
# 导入模块
class Maingame():
window = None
my_tank = None
# 创建存储敌方坦克的列表
enemytanklist = []
enemytankcount = 5
def __init__(self):
pass
def startgame(self):
# 加载一个主窗口
pygame.display.init() # 初始化窗口
# 设置窗口的大小及其显示
Maingame.window = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
# 初始化坦克的位置
Maingame.my_tank = Tanke(350, 250)
# 初始化敌方的坦克,并且添加到列表当中
self.createenemy()
# 对标题方面进行设置
pygame.display.set_caption('坦克大作战')
while True:
# 使用time模块的时侯让坦克速度慢一些
time.sleep(0.001)
# 给窗口设置填充的颜色
Maingame.window.fill(COLRE)
self.getevent()
# 绘制文字
Maingame.window.blit(self.getText('敌方坦克剩余的数量%d' % 6), (10, 10))
# 调用坦克的显示方法
Maingame.my_tank.displayTake()
#循环遍历敌方的坦克的列表,展示敌方的坦克
self.blitenemytake()
# 调用移动的方法
# 如果坦克的开关是开启,才可以移动
if not Maingame.my_tank.stop:
Maingame.my_tank.move()
pygame.display.update()
def createenemy(self):
top = 100
# 循环生成敌方的坦克
for i in range(Maingame.enemytankcount):
left = random.randint(0, 600)
speed = random.randint(1, 4)
enemy = EnemyTanke(left, top, speed)
Maingame.enemytanklist.append(enemy)
def blitenemytake(self):
for enemytake in Maingame.enemytanklist:
enemytake.displayTake()
def endgame(self):
print('谢谢使,欢迎再一次进行使用')
exit()
# 对左上角的文字进行绘制
def getText(self, text):
# 设置初始化字体的模块
pygame.font.init()
# 获取字体FONT对象
font = pygame.font.SysFont('kaiti', 18)
# 绘制文字的信息
textSurface = font.render(text, True, TEXT_COLOR)
return textSurface
# 获取时间
def getevent(self):
eventlist = pygame.event.get()
for event in eventlist:
# 判断按下的键位是关闭还是键盘按下
# 代表的意思是如果按下的键位是退出那么就关闭窗口
if event.type == pygame.QUIT:
self.endgame()
# 如果是键盘的按下键位
if event.type == pygame.KEYDOWN:
# 用来判断是否是上下左右
# 判断按下的是上下左右键位
if event.key == pygame.K_LEFT:
Maingame.my_tank.direction = 'L'
# 修改坦克的开关状态
Maingame.my_tank.stop = False
Maingame.my_tank.move()
print('按下左键,坦克向左方向进行移动')
elif event.key == pygame.K_RIGHT:
Maingame.my_tank.direction = 'R'
Maingame.my_tank.stop = False
Maingame.my_tank.move()
print('按下右键,坦克向右移动')
elif event.key == pygame.K_UP:
Maingame.my_tank.direction = 'U'
Maingame.my_tank.stop = False
Maingame.my_tank.move()
print('按下上键,坦克向上移动')
elif event.key == pygame.K_DOWN:
Maingame.my_tank.direction = 'D'
Maingame.my_tank.stop = False
Maingame.my_tank.move()
print('按下下键,坦克向下移动')
elif event.key == pygame.K_SPACE:
print('发射子弹')
# 松开方向键的时侯停止坦克的移动,修改坦克的开关状态
if event.type == pygame.KEYUP:
Maingame.my_tank.stop = True
class Tanke():
# 添加距离左边left距离上边top
def __init__(self, left, top):
self.images = {
'U': pygame.image.load('坦克2/p1tankU.gif'),
'D': pygame.image.load('坦克2/p1tankD.gif'),
'L': pygame.image.load('坦克2/p1tankL.gif'),
'R': pygame.image.load('坦克2/p1tankR.gif'),
}
# 加载方向
self.direction = 'U'
# 根据当前的图片的方向获取图片 surface
self.image = self.images[self.direction]
# 获取区域根据图片
self.rect = self.image.get_rect()
# 设置区域的left 和 top
self.rect.left = left
self.rect.top = top
# 调整速度,决定移动速度的快慢
self.speed = 1
# 坦克移动的开关
self.stop = True
def move(self):
# 判断坦克的方向进行移动
if self.direction == 'L':
if self.rect.left > 0:
self.rect.left -= self.speed
elif self.direction == 'U':
if self.rect.top > 0:
self.rect.top -= self.speed
elif self.direction == 'D':
if self.rect.top + self.rect.height < SCREEN_HEIGHT:
self.rect.top += self.speed
elif self.direction == 'R':
if self.rect.top + self.rect.height < SCREEN_WIDTH:
self.rect.left += self.speed
def shot(self):
pass
# 展示坦克的方法
def displayTake(self):
# 获取展示的对象
self.image = self.images[self.direction]
# 调用blit方法
Maingame.window.blit(self.image, self.rect)
# 我方的坦克
class MyTanke(Tanke):
def __init__(self):
pass
# 敌方的坦克
class EnemyTanke(Tanke):
def __init__(self, left, top, speed):
# 坦克是需要加载图片的
self.images = {
'U': pygame.image.load('坦克2/enemy1U.gif'),
'D': pygame.image.load('坦克2/enemy1D.gif'),
'L': pygame.image.load('坦克2/enemy1L.gif'),
'R': pygame.image.load('坦克2/enemy1R.gif'),
}
# 需要定义一个方向
self.direction = self.randDirection()
# 根据方向获取image获取当前的图片
self.image = self.images[self.direction]
# 区域
self.rect = self.image.get_rect()
# 对left以及top进行赋值
self.rect.left = left
self.rect.top = top
# 速度
self.speed = speed
# 移动开关
self.flag = True
def randDirection(self):
num = random.randint(1, 4)
if num == 1:
return 'U'
elif num == 2:
return 'D'
elif num == 3:
return 'L'
elif num == 4:
return 'R'
class Bullet():
def __init__(self):
pass
def move(self):
pass
def displayBullet(self):
pass
class Wall():
def __init__(self):
pass
def displayWall(self):
pass
class Explode():
def __init__(self):
pass
def displayExplore(self):
pass
class Music():
def __init__(self):
pass
# 播放音乐
def play(self):
pass
if __name__ == '__main__':文章来源:https://www.toymoban.com/news/detail-849411.html
Maingame().startgame()文章来源地址https://www.toymoban.com/news/detail-849411.html
到了这里,关于使用python的pygame做一个简易的坦克大战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!