用AI写游戏3——python实现坦克大战1

用python实现一个坦克大战小游戏,屏幕大小宽高1000x800px 敌人有10个坦克,会发射子弹,会随机自由移动,碰撞到屏幕边界会反弹, 我方是一个黄颜色坦克,能发子弹,能移动,子弹集中敌人坦克就爆炸消失,并得到10分,所有坦克消灭后游戏胜利,我方被敌人坦克子弹击中则爆炸消失,游戏结束。

1、KIMI实现

实现效果:
在这里插入图片描述
实现一个完整的坦克大战小游戏需要使用Python的图形库,比如pygame。以下是一个简单的实现代码,满足你的基本需求。请注意,这个代码是一个基础版本,你可以根据需要进一步优化和扩展。

安装依赖

在运行代码之前,请确保安装了pygame库:

pip install pygame

代码实现

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 设置屏幕大小
SCREEN_WIDTH, SCREEN_HEIGHT = 1000, 800
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("坦克大战")

# 颜色定义
BLACK = (0, 0, 0)
YELLOW = (255, 255, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)

# 坦克和子弹的大小
TANK_SIZE = 50
BULLET_SIZE = 10
TANK_SPEED = 5
BULLET_SPEED = 10

# 我方坦克
class PlayerTank:
    def __init__(self):
        self.rect = pygame.Rect(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2, TANK_SIZE, TANK_SIZE)
        self.color = YELLOW
        self.bullets = []

    def move(self, dx, dy):
        self.rect.x += dx
        self.rect.y += dy
        # 边界检测
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH
        if self.rect.top < 0:
            self.rect.top = 0
        if self.rect.bottom > SCREEN_HEIGHT:
            self.rect.bottom = SCREEN_HEIGHT

    def shoot(self):
        bullet = pygame.Rect(self.rect.centerx, self.rect.top, BULLET_SIZE, BULLET_SIZE)
        self.bullets.append(bullet)

    def update_bullets(self):
        for bullet in self.bullets[:]:
            bullet.y -= BULLET_SPEED
            if bullet.bottom < 0:
                self.bullets.remove(bullet)

# 敌方坦克
class EnemyTank:
    def __init__(self):
        self.rect = pygame.Rect(random.randint(0, SCREEN_WIDTH - TANK_SIZE),
                                random.randint(0, SCREEN_HEIGHT - TANK_SIZE),
                                TANK_SIZE, TANK_SIZE)
        self.color = RED
        self.direction = random.choice(['up', 'down', 'left', 'right'])
        self.bullets = []

    def move(self):
        if self.direction == 'up':
            self.rect.y -= TANK_SPEED
            if self.rect.top < 0:
                self.direction = 'down'
        elif self.direction == 'down':
            self.rect.y += TANK_SPEED
            if self.rect.bottom > SCREEN_HEIGHT:
                self.direction = 'up'
        elif self.direction == 'left':
            self.rect.x -= TANK_SPEED
            if self.rect.left < 0:
                self.direction = 'right'
        elif self.direction == 'right':
            self.rect.x += TANK_SPEED
            if self.rect.right > SCREEN_WIDTH:
                self.direction = 'left'

    def shoot(self):
        if random.randint(0, 100) < 5:  # 5%的概率发射子弹
            bullet = pygame.Rect(self.rect.centerx, self.rect.top, BULLET_SIZE, BULLET_SIZE)
            self.bullets.append(bullet)

    def update_bullets(self):
        for bullet in self.bullets[:]:
            bullet.y += BULLET_SPEED
            if bullet.top > SCREEN_HEIGHT:
                self.bullets.remove(bullet)

# 游戏主逻辑
def main():
    clock = pygame.time.Clock()
    player = PlayerTank()
    enemies = [EnemyTank() for _ in range(10)]
    score = 0
    font = pygame.font.Font(None, 36)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    player.shoot()

        keys = pygame.key.get_pressed(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值