pythonGame-实现简单的坦克大战

通过python简单复现坦克大战游戏。

使用到的库函数:
import turtle
import math
import random
import time
游戏源码:
import turtle
import math
import random
import time

# 设置屏幕
screen = turtle.Screen()
screen.setup(800, 600)
screen.title("坦克游戏")
screen.bgcolor("lightgreen")
screen.tracer(0)

# 创建玩家坦克
tank = turtle.Turtle()
tank.shape("square")
tank.color("green")
tank.shapesize(stretch_wid=3, stretch_len=5)
tank.penup()

# 炮管
cannon = turtle.Turtle()
cannon.shape("triangle")
cannon.color("dark green")
cannon.shapesize(stretch_wid=0.5, stretch_len=2)
cannon.penup()

# 创建敌人坦克
enemy = turtle.Turtle()
enemy.shape("square")
enemy.color("red")
enemy.shapesize(stretch_wid=3, stretch_len=5)
enemy.penup()
enemy.goto(random.randint(-350, 350), random.randint(-250, 250))

# 子弹列表
player_bullets = []
enemy_bullets = []

# 分数
score = 0
score_display = turtle.Turtle()
score_display.hideturtle()
score_display.penup()
score_display.goto(-380, 260)
score_display.color("black")

# 移动函数
def move_forward():
    move(10)

def move_backward():
    move(-10)

def move(distance):
    x = tank.xcor()
    y = tank.ycor()
    angle = tank.heading()
    x += math.cos(math.radians(angle)) * distance
    y += math.sin(math.radians(angle)) * distance
    tank.goto(x, y)
    update_cannon()

def turn_left():
    tank.left(10)
    update_cannon()

def turn_right():
    tank.right(10)
    update_cannon()

def update_cannon():
    x = tank.xcor()
    y = tank.ycor()
    angle = tank.heading()
    cannon.goto(x + math.cos(math.radians(angle)) * 30, y + math.sin(math.radians(angle)) * 30)
    cannon.setheading(angle)

# 发射子弹
def fire():
    fire_bullet(cannon, player_bullets)

def enemy_fire():
    fire_bullet(enemy, enemy_bullets)

def fire_bullet(shooter, bullet_list):
    bullet = turtle.Turtle()
    bullet.shape("circle")
    bullet.color("black")
    bullet.shapesize(0.5)
    bullet.penup()
    bullet.speed(0)
    bullet.goto(shooter.xcor(), shooter.ycor())
    bullet.setheading(shooter.heading())
    bullet_list.append(bullet)

# 更新子弹位置
def update_bullets():
    update_bullet_group(player_bullets)
    update_bullet_group(enemy_bullets)

def update_bullet_group(bullet_list):
    for bullet in bullet_list:
        bullet.forward(5)
        if bullet.xcor() > 400 or bullet.xcor() < -400 or bullet.ycor() > 300 or bullet.ycor() < -300:
            bullet.hideturtle()
            bullet_list.remove(bullet)
        elif bullet in player_bullets and bullet.distance(enemy) < 40:
            bullet.hideturtle()
            player_bullets.remove(bullet)
            respawn_enemy()
            update_score(1)
        elif bullet in enemy_bullets and bullet.distance(tank) < 40:
            bullet.hideturtle()
            enemy_bullets.remove(bullet)
            update_score(-1)

# 随机移动敌人
def move_enemy():
    x = enemy.xcor() + random.randint(-5, 5)
    y = enemy.ycor() + random.randint(-5, 5)
    x = max(-350, min(350, x))
    y = max(-250, min(250, y))
    enemy.goto(x, y)
    if random.random() < 0.02:  # 2%的机会发射子弹
        enemy_fire()

# 重生敌人
def respawn_enemy():
    enemy.goto(random.randint(-350, 350), random.randint(-250, 250))

# 更新分数
def update_score(points):
    global score
    score += points
    score_display.clear()
    score_display.write(f"得分: {score}", font=("Arial", 16, "normal"))

# 键盘绑定
screen.listen()
screen.onkeypress(move_forward, "Up")
screen.onkeypress(move_backward, "Down")
screen.onkeypress(turn_left, "Left")
screen.onkeypress(turn_right, "Right")
screen.onkeypress(fire, "space")

# 初始化分数显示
update_score(0)

# 主游戏循环
while True:
    update_bullets()
    move_enemy()
    screen.update()
    time.sleep(0.01)

turtle.done()
运行效果:

虽然比较简单,但是涉及了很多基础元素,可以作为兴趣学习下,即拿即用哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值