python代码写一个坦克大战
时间: 2023-12-27 07:03:58 浏览: 27
以下是一个简单的坦克大战游戏的代码示例,使用Python语言编写:
```python
import pygame, sys, random
from pygame.locals import *
# 初始化pygame
pygame.init()
# 设置游戏窗口大小和标题
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
DISPLAYSURF = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('Tank Battle')
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BROWN = (153,76,0)
# 定义坦克类
class Tank(pygame.sprite.Sprite):
def __init__(self, x, y, color):
pygame.sprite.Sprite.__init__(self)
self.color = color
self.image = pygame.Surface((30, 40))
self.image.fill(color)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = 5
# 移动坦克
def move(self, direction):
if direction == 'up':
self.rect.y -= self.speed
elif direction == 'down':
self.rect.y += self.speed
elif direction == 'left':
self.rect.x -= self.speed
elif direction == 'right':
self.rect.x += self.speed
# 射击子弹
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.centery, self.color)
all_sprites_list.add(bullet)
bullets_list.add(bullet)
# 定义子弹类
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y, color):
pygame.sprite.Sprite.__init__(self)
self.color = color
self.image = pygame.Surface((10, 10))
self.image.fill(color)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.speed = 7
# 移动子弹
def update(self):
self.rect.y -= self.speed
if self.rect.bottom < 0:
self.kill()
# 创建敌人坦克
def create_enemy_tank():
x = random.randint(50, WINDOW_WIDTH - 50)
y = random.randint(50, WINDOW_HEIGHT - 50)
tank = Tank(x, y, RED)
enemy_tanks_list.add(tank)
all_sprites_list.add(tank)
# 初始化游戏
def game_init():
global player_tank, enemy_tanks_list, bullets_list, all_sprites_list, score
player_tank = Tank(WINDOW_WIDTH / 2 - 15, WINDOW_HEIGHT - 50, GREEN)
enemy_tanks_list = pygame.sprite.Group()
bullets_list = pygame.sprite.Group()
all_sprites_list = pygame.sprite.Group()
all_sprites_list.add(player_tank)
score = 0
# 显示文字
def show_text(text, x, y, font_size):
font = pygame.font.SysFont(None, font_size)
text_obj = font.render(text, True, WHITE)
text_rect = text_obj.get_rect()
text_rect.centerx = x
text_rect.centery = y
DISPLAYSURF.blit(text_obj, text_rect)
# 游戏主循环
def game_loop():
game_init()
# 游戏是否结束
game_over = False
# 是否胜利
win = False
# 敌人坦克的数量
enemy_tank_num = 3
# 创建敌人坦克
for i in range(enemy_tank_num):
create_enemy_tank()
# 游戏主循环
while not game_over:
# 处理事件
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_UP:
player_tank.move('up')
elif event.key == K_DOWN:
player_tank.move('down')
elif event.key == K_LEFT:
player_tank.move('left')
elif event.key == K_RIGHT:
player_tank.move('right')
elif event.key == K_SPACE:
player_tank.shoot()
# 更新游戏界面
all_sprites_list.update()
# 检测子弹是否打中敌人坦克
for bullet in bullets_list:
enemy_tanks_hit_list = pygame.sprite.spritecollide(bullet, enemy_tanks_list, True)
for enemy_tank in enemy_tanks_hit_list:
bullets_list.remove(bullet)
all_sprites_list.remove(bullet)
score += 1
create_enemy_tank()
# 检测敌人坦克是否撞击到玩家坦克
enemy_tanks_hit_list = pygame.sprite.spritecollide(player_tank, enemy_tanks_list, True)
if len(enemy_tanks_hit_list) > 0:
game_over = True
# 绘制背景
DISPLAYSURF.fill(BLACK)
# 绘制分数
show_text('Score: ' + str(score), 70, 20, 30)
# 绘制玩家坦克和敌人坦克
all_sprites_list.draw(DISPLAYSURF)
# 更新屏幕
pygame.display.update()
# 判断胜利条件
if score >= 10:
win = True
game_over = True
# 游戏结束
if win:
show_text('You Win!', WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 50)
else:
show_text('Game Over!', WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2, 50)
# 等待用户退出
while True:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
# 启动游戏
game_loop()
```
运行代码后,即可启动坦克大战游戏。玩家通过上下左右键控制自己的坦克移动,并按空格键发射子弹。击败敌人坦克获得分数,当分数达到10分时,玩家获胜;如果敌人坦克撞击到玩家坦克,则游戏失败。