Python小游戏17——飞机大战

  • 运行结果

d8b57dd7ac5249a4ab245c6201c78af7.png

 

bf0a4a6a3756412aab4317f282fd38bc.png

首先,你需要安装Pygame库。如果你还没有安装它,可以使用以下命令来安装:

bash

pip install pygame

 

  • 代码:

python

import pygame

import random

 

# 初始化Pygame

pygame.init()

 

# 屏幕大小

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("飞机大战")

 

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

 

# 飞机类

class Player(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(WHITE)

        self.rect = self.image.get_rect()

        self.rect.centerx = SCREEN_WIDTH // 2

        self.rect.bottom = SCREEN_HEIGHT - 10

        self.speed_x = 0

 

    def update(self):

        self.speed_x = 0

        keystate = pygame.key.get_pressed()

        if keystate[pygame.K_LEFT]:

            self.speed_x = -5

        if keystate[pygame.K_RIGHT]:

            self.speed_x = 5

        self.rect.x += self.speed_x

        if self.rect.right > SCREEN_WIDTH:

            self.rect.right = SCREEN_WIDTH

        if self.rect.left < 0:

            self.rect.left = 0

 

    def shoot(self):

        bullet = Bullet(self.rect.centerx, self.rect.top)

        all_sprites.add(bullet)

        bullets.add(bullet)

 

# 子弹类

class Bullet(pygame.sprite.Sprite):

    def __init__(self, x, y):

        super().__init__()

        self.image = pygame.Surface((10, 20))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.centerx = x

        self.rect.bottom = y

        self.speed_y = -10

 

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.bottom < 0:

            self.kill()

 

# 敌人类

class Enemy(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)

        self.rect.y = random.randrange(-100, -40)

        self.speed_y = random.randrange(1, 8)

 

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.top > SCREEN_HEIGHT + 10:

            self.kill()

 

# 创建精灵组

all_sprites = pygame.sprite.Group()

enemies = pygame.sprite.Group()

bullets = pygame.sprite.Group()

 

# 创建玩家实例并添加到精灵组

player = Player()

all_sprites.add(player)

 

# 创建敌人实例并添加到精灵组

for _ in range(8):

    enemy = Enemy()

    all_sprites.add(enemy)

    enemies.add(enemy)

 

# 游戏主循环

running = True

clock = pygame.time.Clock()

 

while running:

    # 事件处理

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE:

                player.shoot()

 

    # 更新游戏

    all_sprites.update()

 

    # 检查子弹是否击中敌人

    hits = pygame.sprite.groupcollide(enemies, bullets, True, True)

    for hit in hits:

        enemy = Enemy()

        all_sprites.add(enemy)

        enemies.add(enemy)

 

    # 绘制游戏

    screen.fill(BLACK)

    all_sprites.draw(screen)

 

    # 刷新屏幕

    pygame.display.flip()

 

    # 控制帧率

    clock.tick(60)

 

pygame.quit()

 

  • 知识点总结——游戏实现的关键技术

Pygame模块的使用:Pygame是一个用于创建视频游戏的Python库,它提供了图像、声音、事件处理等功能。通过使用Pygame模块,可以很方便地实现《飞机大战》小游戏的图像显示、声音播放、事件监听等功能。

面向对象编程:在《飞机大战》小游戏的实现中,采用了面向对象编程的思想。通过将游戏元素(如英雄飞机、敌机、子弹等)封装成类,可以更方便地管理它们的状态和行为,并实现代码的复用和扩展。

碰撞检测:碰撞检测是游戏实现中的一个重要环节。在《飞机大战》小游戏中,需要检测英雄飞机与敌机、子弹与敌机之间的碰撞情况,并根据碰撞结果进行相应的处理(如扣除生命值、播放动画和音效等)。

事件监听与处理:游戏需要监听玩家的操作(如键盘按键)和系统的事件(如窗口关闭),并根据事件进行相应的处理。例如,当玩家按下方向键时,需要改变英雄飞机的位置;当窗口关闭时,需要退出游戏等。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460588.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国标GB28181软件EasyGBS国标GB28181网页直播平台在邮政快递场景中的应用

随着电子商务的迅猛发展&#xff0c;邮政快递行业迎来了前所未有的发展机遇&#xff0c;但同时也面临着诸多挑战。如何在保障货物安全、提高运输效率的同时&#xff0c;实现全面的监控和管理&#xff0c;成为邮政快递企业亟需解决的问题。国标GB28181网页直播平台EasyGBS作为一…

MFC工控项目实例二十七添加产品参数

承接专栏《MFC工控项目实例二十六创建数据库》 在型号参数界面添加三个参数试验时间、最小值、最大值。变量为double m_edit_time; double m_edit_min; double m_edit_max; 1、在SEAL_PRESSURE.h中添加代码 class CProductPara { public:union{struct{...double m_edit_min;…

java项目之智能学习平台系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智能学习平台系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记

Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记 这是新国立和新加坡管理大学发表在ECCV2024上的一篇image restoration的文章&#xff0c;提出了一个新的网络结构ECMA&#xff0c;从实验结果上看在超分&#xff0c;去噪&#xff0c;去模糊…

STEAM教育是什么?从学科融合到创造力培养的全新教育模式

近年来&#xff0c;“STEAM教育”成为教育界的热门词汇。随着技术和科学的发展&#xff0c;传统的单一学科教育已难以满足未来社会对创新型人才的需求。STEAM教育因其跨学科的特点&#xff0c;成为培养学生综合素质和创新能力的有效方式。那么&#xff0c;什么是STEAM教育&…

SystemC学习(3)— APB_SRAM的建模与测试

SystemC学习&#xff08;3&#xff09;— APB_SRAM的建模与测试 一、前言 二、APB_SRAM建模 编写APB_SRAM模型文件apb_sram.h文件如下所示&#xff1a; #ifndef __APB_SRAM_H #define __APB_SRAM_H#include "systemc.h"const int ADDR_SIZE 32; const int DATA_…

Spring Boot Configuration和AutoConfiguration加载逻辑和加载顺序调整

在spring中&#xff0c; AutoConfiguration也是一个种Configuration&#xff0c;只是AutoConfiguration是不能使用proxy的。 而且spring对于两者的加载顺序也不是一视同仁&#xff0c;是有顺序的。spring会先加载SpringBootApplication可达的且标注了Configuration的类&#x…

CodeS:构建用于文本到 SQL 的开源语言模型

发布于&#xff1a;2024 年 10 月 29 日 #RAG #Text2 SQL #NL2 SQL 语言模型在将自然语言问题转换为 SQL 查询&#xff08;文本到 SQL &#xff09;的任务中显示出良好的性能。然而&#xff0c;大多数最先进的 &#xff08;SOTA&#xff09; 方法都依赖于强大但闭源的大型语言…

社区交流系统设计与实现

社区交流系统设计与实现 1. 系统概述 社区交流系统是一个基于PHP和SQL的Web应用程序&#xff0c;旨在为用户提供一个互动交流的平台。该系统允许用户注册、发布帖子、回复帖子、查看其他用户的帖子和回复&#xff0c;以及管理个人资料&#xff0c;提高用户之间的互动和信息共享…

什么是字节序、大小端、高低字节、高低地址?

目录 1. 什么是字节序&#xff08;Endianness&#xff09;&#xff1f; 2. 什么是大小端&#xff08;Big-Endians and Little-Endian&#xff09;&#xff1f; 3. 什么时候需要用到大小端的概念&#xff1f; 4. 如何确认系统的大小端模式&#xff1f; 5. 什么是大小端定义…

为什么 C 语言数组是从 0 开始计数的?

C 语言等大多数编程语言的数组从 0 开始而不从 1 开始&#xff0c;有两个原因&#xff1a; 第一&#xff1a;地址计算更方便 C 语言从 0 开始的话&#xff0c;array[i] 的地址就正好是&#xff1a; (array i) 如果是从 1 开始的话&#xff0c;就是 (array i - 1) 多一次计…

锁升级及线程池相关

锁升级 在JVM底层实现锁的过程中&#xff0c;有三类锁&#xff1a;偏斜锁、轻量级锁、重量级锁 在Java6之前&#xff0c;synchronized的实现完全依靠重量级锁&#xff08;系统内的互斥锁&#xff09;&#xff0c;从用户态转为内核态非常消耗资源。在Java6之后&#xff0c;提供…

vue3+less使用主题定制(多主题定制)可切换主题

假如要使用两套主题&#xff1a;蓝色、红色 例如&#xff1a; 首先确保自己的vue3项目有less&#xff0c;这边不多做接入解释 1、在src目录下建一个styles文件夹&#xff0c;在syles文件夹下面新建两个less文件&#xff1a;theme.less和variables.less&#xff1b; theme.le…

Java面试经典 150 题.P80. 删除有序数组中的重复项 II(004)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums)…

【QNAP威联通NAS系统恢复进阶教程】如果 .conf 和 md9 无法自动组装,如何恢复 NAS?

创作立场&#xff1a;原创不易&#xff0c;拒绝搬运~ hello大家好&#xff0c;我是你们的老伙伴&#xff0c;稳重的大王~ 从本期开始&#xff0c;大王将在日常教程中&#xff0c;分享一些QNAP系统故障的排除以及解决办法&#xff0c;进阶教程需要具备一定的linux基础&#xf…

【JavaEE】【多线程】进阶知识

目录 一、常见的锁策略1.1 悲观锁 vs 乐观锁1.2 重量级锁 vs 轻量级锁1.3 挂起等待锁 vs 自旋锁1.4 普通互斥锁 vs 读写锁1.5 可重入锁 vs 不可重入锁1.6 不公平锁 vs 公平锁 二、synchronized特性2.1 synchronized的锁策略2.2 synchronized加锁过程2.3 其它优化措施 三、CAS3.…

玄机-应急响应- Linux入侵排查

一、web目录存在木马&#xff0c;请找到木马的密码提交 到web目录进行搜索 find ./ type f -name "*.php" | xargs grep "eval(" 发现有三个可疑文件 1.php看到密码 1 flag{1} 二、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 被md5加密的…

沈阳乐晟睿浩科技有限公司抖音小店运营创新

在当今这个数字化迅猛发展的时代&#xff0c;电子商务已经成为推动经济增长的重要引擎。而在电商的广阔舞台上&#xff0c;短视频与直播带货的崛起无疑是最为耀眼的明星之一。作为这一领域的佼佼者&#xff0c;抖音小店凭借其庞大的用户基础和独特的算法优势&#xff0c;吸引了…

使用Python和Parsel库爬取CSDN博客文章专栏并生成Markdown链接列表的导航

引言 今天&#xff0c;我将分享如何使用Python的requests和parsel库来爬取CSDN博客的文章&#xff0c;并生成一个Markdown格式的链接列表导航页。 我在整理这个专栏Linux基础操作合集的文章合集时&#xff0c;发现想要给这个专栏的文章做个导航合集页很麻烦&#xff0c;虽然直…

哪个牌子的宠物空气净化器好?口碑好的宠物空气净化器推荐!

哪个牌子的宠物空气净化器好&#xff1f;作为一名家电测评博主&#xff0c;我发现市面上宠物空气净化器的牌子越来越多了&#xff0c;很多厂家都看中了宠物行业的红利&#xff0c;想来分一杯羹&#xff0c;这就导致很多技术不成熟的产品流入了市场。今年我测试了50多台宠物空气…