pycharm小游戏飞机射击

news/2024/11/2 8:13:47/

导入pygame模块

下载成功

 

 图片略显粗糙

 

 

python
 复制
import pygame
import random

# 初始化 pygame
pygame.init()

# 屏幕大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# 颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 飞机速度
PLANE_SPEED = 5

# 子弹速度
BULLET_SPEED = 10

# 敌机速度
ENEMY_SPEED = 3

# 初始化屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("飞机射击游戏")

# 游戏时钟
clock = pygame.time.Clock()

# 加载飞机图片
plane_image = pygame.image.load("plane.png")
plane_rect = plane_image.get_rect()
plane_rect.x = (SCREEN_WIDTH - plane_rect.width) / 2
plane_rect.y = SCREEN_HEIGHT - plane_rect.height

# 加载子弹图片
bullet_image = pygame.image.load("bullet.png")
bullet_list = []

# 敌机列表
enemy_list = []

# 得分
score = 0

# 游戏结束标志
game_over = False

# 生成敌机函数
def generate_enemy():
    enemy_image = pygame.image.load("enemy.png")
    enemy_rect = enemy_image.get_rect()
    enemy_rect.x = random.randint(0, SCREEN_WIDTH - enemy_rect.width)
    enemy_rect.y = -enemy_rect.height
    enemy_list.append([enemy_image, enemy_rect])

# 游戏主循环
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True

    keys_pressed = pygame.key.get_pressed()
    if keys_pressed[pygame.K_LEFT] and plane_rect.x > 0:
        plane_rect.x -= PLANE_SPEED
    if keys_pressed[pygame.K_RIGHT] and plane_rect.x < SCREEN_WIDTH - plane_rect.width:
        plane_rect.x += PLANE_SPEED
    if keys_pressed[pygame.K_SPACE]:
        bullet_rect = bullet_image.get_rect()
        bullet_rect.x = plane_rect.x + plane_rect.width / 2 - bullet_rect.width / 2
        bullet_rect.y = plane_rect.y
        bullet_list.append([bullet_image, bullet_rect])

    # 移动子弹
    for bullet in bullet_list:
        bullet[1].y -= BULLET_SPEED
        if bullet[1].y < 0:
            bullet_list.remove(bullet)

    # 移动敌机
    for enemy in enemy_list:
        enemy[1].y += ENEMY_SPEED
        if enemy[1].y > SCREEN_HEIGHT:
            enemy_list.remove(enemy)

        # 检测子弹与敌机的碰撞
        for bullet in bullet_list:
            if enemy[1].colliderect(bullet[1]):
                enemy_list.remove(enemy)
                bullet_list.remove(bullet)
                score += 10

        # 检测敌机与飞机的碰撞
        if plane_rect.colliderect(enemy[1]):
            game_over = True

    # 生成敌机
    if random.randint(0, 100) < 5:
        generate_enemy()

    # 绘制背景
    screen.fill(BLACK)

    # 绘制飞机
    screen.blit(plane_image, plane_rect)

    # 绘制子弹
    for bullet in bullet_list:
        screen.blit(bullet[0], bullet[1])

    # 绘制敌机
    for enemy in enemy_list:
        screen.blit(enemy[0], enemy[1])

    # 显示得分
    font = pygame.font.SysFont(None, 36)
    text = font.render("Score: " + str(score), 1, WHITE)
    screen.blit(text, (10, 10))

    # 刷新屏幕
    pygame.display.flip()

    # 控制游戏帧率
    clock.tick(60)

# 退出游戏
pygame.quit()

请注意,上述代码中需要您准备飞机、子弹和敌机的图片,并将文件名修改为代码中的相应名称。这个游戏实现了飞机的控制、子弹的发射、敌机的生成和碰撞检测等功能。


http://www.ppmy.cn/news/1543809.html

相关文章

8.3.2 前向分步算法与 AdaBoost

由前向分步算法可以推导出 AdaBoost&#xff0c;用定理叙述这一关系。   定理 8.3  AdaBoost 算法是前向分步加法算法的特例。 这时&#xff0c;模型是由基本分类器组成的加法模型&#xff0c;损失函数是指数函数。   证明 前向分步算法学习的正加法模型&#xff0c;当基…

自动驾驶---理想汽车智驾进展

1 背景 自媒体---“电车通”从2024年初开始推出智能化评测相关栏目&#xff0c;尤其是针对智能驾驶这一功能做了大量的实测工作&#xff1b;根据综合表现&#xff0c;给测试车型给出了能够直观展示其能力的评分。当评测的对象达到一定数量后&#xff0c;对整个国内车市智驾能力…

小张求职记二:完善简历

金色的夕阳将校园染上一层温暖的橘色&#xff0c;操场上&#xff0c;足球队员们挥洒着汗水&#xff0c;欢笑声在空气中回荡&#xff0c;远处的图书馆里&#xff0c;学生们埋头苦读&#xff0c;偶尔传出翻书的声音。一切都是那么美好&#xff0c;仿佛时间都静止在了这美好的时刻…

红队-shodan搜索引擎篇

如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.shodan原理与功能的介绍 Shodan Search Engine 它是专门搜网络设备的,只要联网的,只要有IP地址的都可以称为网络设备 1.shodan&#x…

从0攒一个分布大数据/人工智能/数据库 处理引擎

以下各组件部署方式&#xff1a;嵌入模式 vs 独立服务模式 组件选型&#xff1a; 分布式网络通信: brpc, zmq ...分布式高可靠存储用于存元信息: zk, etcd, braft分布式状态保存用于存储数据: memory/disk storage(shuffle,sort): rocksdbpartition_manage单机计算引擎: Grap…

ICPC区域赛成都站【赛后回顾+总结】

传送门 前言赛后总结赛后回顾赛后感悟 前言 首先&#xff0c;这是本人本赛季第一场XCPC区域赛&#xff0c;也是本人算竞生涯中第一场XCPC区域赛&#xff08;之前只打过邀请赛和省赛&#xff09;。 赛后总结 然后赛后总结一下&#xff1a;我队天崩开局&#xff0c;我队出师不利…

一文速通C++17 std::any

std::any 概念 值类型 一般来说&#xff0c;C是一门类型绑定和类型安全的语言。 值对象&#xff1a;被声明为确定的类型&#xff0c;并且不能改变自身的类型。类型&#xff1a;定义了所有可能的操作、也定义了对象的行为。 std::any是一种在保证类型安全的基础上还能改变自…

精准帮扶:SpringBoot扶贫管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了精准扶贫管理系统的开发全过程。通过分析精准扶贫管理系统管理的不足&#xff0c;创建了一个计算机管理精准扶贫管理系统的方案。文章介绍了精准扶贫管理系统的系…