父亲节礼物:用Python编写一个小型游戏

news2024/9/21 5:30:46

名字:阿玥的小东东

学习:Python、C/C++

主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主

目录

安装必要的库

绘制游戏界面

添加游戏元素

为游戏添加交互性

结论

一、父亲节的来历简介

二、父亲节的由来


父亲节是一个向父亲们表达感激和尊敬的节日。在这个特别的日子里,为什么不给您的父亲一个特殊的礼物?您可以使用Python编写一个小型游戏,展示您的编程技能和对父亲的敬爱之情。

在本文中,我们将介绍如何使用Python编写一个简单的射击游戏。

安装必要的库

要编写这个游戏,我们需要安装pygame库。您可以使用以下命令在终端中安装它:

pip install pygame

当然,在安装 Pygame 包之前,您需要先确保已经安装好了 Python 和 pip。

绘制游戏界面

在游戏中,我们需要一个窗口来显示游戏内容。我们可以使用pygame中的display模块来创建窗口。以下是初始化Pygame,创建窗口和设置背景的基本代码:

import pygame

# 初始化 Pygame
pygame.init()

# 创建游戏窗口
screenWidth = 800
screenHeight = 600
screen = pygame.display.set_mode((screenWidth, screenHeight))

# 设置背景颜色
backgroundColor = (255, 255, 255)
screen.fill(backgroundColor)

# 设置游戏标题
pygame.display.set_caption("射击游戏")

在此代码中,我们首先在程序中导入了pygame模块。然后,我们使用pygame.init()函数初始化Pygame。接下来,我们创建了一个名为screen的窗口,并设置了其宽度和高度。我们还设置了窗口的背景颜色,并将其命名为backgroundColor。

最后,我们设置了游戏窗口的标题为“射击游戏”。

添加游戏元素

在我们的游戏中,我们需要添加一些元素,例如玩家和敌人。在此示例中,我们将创建一个简单的射击游戏,其中玩家可以在一个方块内移动并射击来袭的敌人。

我们可以使用pygame中的Rect类来创建这些元素。以下是添加玩家和敌人的代码:

# 创建玩家
playerSize = 50
player = pygame.Rect(screenWidth // 2 - playerSize // 2, screenHeight - playerSize, playerSize, playerSize)

# 创建敌人
enemySize = 50
enemyPosition = [random.randint(0, screenWidth - enemySize), 0]
enemyList = [pygame.Rect(enemyPosition[0], enemyPosition[1], enemySize, enemySize)]
enemySpeed = 10

# 绘制玩家和敌人
playerColor = (0, 0, 255)
pygame.draw.rect(screen, playerColor, player)

enemyColor = (255, 0, 0)
pygame.draw.rect(screen, enemyColor, enemyList[0])

在此代码中,我们首先创建了一个名为player的玩家。我们使用screenWidth和screenHeight变量来计算玩家的初始位置,该位置位于窗口的底部中央。我们还创建了一个名为enemyPosition的列表来存储敌人的位置。使用Rect类创建敌人。

然后,我们定义了enemyList,其初始化为一个包含一个敌人的列表。我们还为敌人设置了enemySpeed,该变量将控制敌人的下落速度。

在代码的最后部分,我们绘制了玩家和敌人,使用pygame.draw.rect()函数来绘制矩形,使用颜色变量对它们进行着色。

为游戏添加交互性

现在,我们已经创建了游戏元素,我们需要为游戏添加交互性。在我们的射击游戏中,玩家可以使用箭头键移动,按下空格键射击。敌人将在屏幕上从上往下移动,玩家必须射击敌人以保留生命值和提高得分。

以下是为游戏添加交互性的代码:

# 游戏循环
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_LEFT:
                player.x -= 50
            elif event.key == pygame.K_RIGHT:
                player.x += 50
            elif event.key == pygame.K_SPACE:
                # 创建子弹
                bullet = pygame.Rect(player.x + playerSize // 2, player.y - 10, 5, 10)
                bulletColor = (0, 0, 0)
                bulletList.append(bullet)
    
    # 移动敌人
    for enemy in enemyList:
        enemy.y += enemySpeed

        # 检查是否撞到了玩家
        if enemy.colliderect(player):
            pygame.quit()
            sys.exit()
        
        # 检查是否超出屏幕范围
        if enemy.y > screenHeight:
            enemyList.remove(enemy)
    
    # 移动子弹
    for bullet in bulletList:
        bullet.y -= 20

        # 检查是否击中敌人
        for enemy in enemyList:
            if enemy.colliderect(bullet):
                enemyList.remove(enemy)
                bulletList.remove(bullet)
    
        # 检查是否超出屏幕范围
        if bullet.y < 0:
            bulletList.remove(bullet)
    
    # 绘制玩家和敌人
    screen.fill(backgroundColor)
    pygame.draw.rect(screen, playerColor, player)
    
    for enemy in enemyList:
        pygame.draw.rect(screen, enemyColor, enemy)
    
    # 绘制子弹
    for bullet in bulletList:
        pygame.draw.rect(screen, bulletColor, bullet)

    # 更新屏幕
    pygame.display.update()

在此代码中,我们使用了pygame.event.get()函数来检查是否发生了事件。如果事件类型是QUIT,我们将退出游戏。如果事件类型是KEYDOWN,我们检查是否按下了箭头键或空格键,如果是,我们将移动玩家或创建一个新子弹。

我们还使用循环来移动敌人和子弹。如果敌人被子弹击中或超出屏幕范围,我们将从相应的列表中删除它们。

最后,我们绘制玩家、敌人和子弹,并使用pygame.display.update()函数更新屏幕。

结论

恭喜你,您已经完成了一个简单的射击游戏!在父亲节这个特殊的日子里,您可以将这个游戏作为礼物送给您的父亲,或者与他一起玩这个游戏,这是一种表达您对他的爱和感激的方式。

希望这个小型游戏的开发过程对您的Python编程技能有所提高。在未来的编程过程中,在Pygame的基础上,你可以尽情发挥创意,创造出更加有趣和充满挑战的游戏。

 

一、父亲节的来历简介

其实在世界上的第一个父亲节是出现在1910年的美国,是由布鲁斯多德夫人一直倡导的,她居住在美国华盛顿州斯波坎,多德夫人的母亲在生育第六个孩子时,因难产而死,多德夫人的父亲威廉·斯马特先生曾参加过南北战争,他在妻子过世后,独自一人在华盛顿州东部的一个乡下农场,承担起抚养、教育六个孩子的重任,多德夫人在家中排行老二,亦是家里唯一的女孩,女性的细心特质,让她更能体会父亲的辛劳,斯马特先生白天辛劳地工作,晚上回家还要照料家务与每一个孩子的生活,经过几十年的辛苦,儿女们终于长大成人,当子女们盼望能让斯马特先生好好安享晚年之际,斯马特先生却因多年的过度劳累于1909年辞世。这也是父亲节的由来,在之后,每到了父亲节的时候,子女就会通过一些方式来表达对父亲的感激和尊敬之情。

二、父亲节的由来

在中国也是有属于自己的父亲节,这个节日的起源是来自于民国时期,主要的起源是在1945年8月8日,上海发起了庆祝父亲节的活动,市民立即响应,抗日战争胜利后,上海市各界名流,联名请上海市政府转呈中央政府,定“爸爸”谐音的8月8日为全国性的父亲节,在父亲节这天,人们佩戴鲜花,表达对父亲的敬重和思念。每年的8月8日,遂成为全国性质的法定“父亲节”。是日,子女佩花以作纪念——父亲健在者,佩以红花;逝世者,佩以白花。④相关的推广工作也随后展开。譬如,作为“父亲节”的首倡者之一,1946年8月7日,颜惠庆被邀请去“青年会”做关于“父亲节”的演讲,“谈了不同社会中父亲的地位和责任”。次日,他又在日记中写道:“报上满载关于‘父亲节’的报道”。之后,每次一到父亲节的时候,大部分子女都会给父亲送上祝福,这一天对每一位父亲也很宽容,是属于所有父亲的节日。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

taskAffinity、launchMode 与 flag

1、官方文档 public static final int FLAG_ACTIVITY_CLEAR_TASK 如果在传递给 的意向中设置&#xff0c;则 此标志将导致与 在活动开始之前要清除的活动。即活动 成为原本为空的任务和任何旧活动的新根 都完成了。这只能与 结合使用。Context.startActivity()FLAG_ACTIVITY_NE…

Kubernetes Blog 更新:DaoCloud 为数字世界寻找全局最优解

“ 近日&#xff0c;一篇名为《「DaoCloud 道客」与 Kubernetes--为数字世界寻找全局最优解》的博文&#xff0c;在 Kubernetes 的全球官网上线&#xff08;链接&#xff1a;https://kubernetes.io/case-studies/daocloud/&#xff09;&#xff0c;下面一起来了解一下具体内容…

ArcEngine二次开发0——入门(下载 部署 组件学习)

折腾一下ArcGIS Engine二次开发。 目录 1、开发环境配置2、部署一个ArcGIS Engine应用程序3、ArcObject组件学习4、报错及解决4、其他 1、开发环境配置 参考&#xff1a;https://blog.csdn.net/H48662654/article/details/113384150 &#xff08;使用ArcEngine前&#xff0c;…

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现SO-ELM蛇群算法优化极限学习机时间序列预测 1.data为单变量时间…

拿捏指针(三)--- 对指针的高级认识(高级)

函数指针 函数指针的定义 通过对 对指针的基本认识 和 对指针的进阶认识 我们知道&#xff0c;整型指针是指向整型的指针&#xff0c;数组指针是指向数组的指针&#xff0c;其实&#xff0c;函数指针就是指向函数的指针。 和学习数组指针一样&#xff0c;学习函数指针我们也需…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…

【Linux】进程优先级

目录 进程优先级什么叫做优先级&#xff1f;Linux优先级更改优先级 进程优先级 什么叫做优先级&#xff1f; cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近&#xff0c;被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上&#xff0c;一名中国“狂热少年”冲进球场&#xff0c;成功拥抱了梅西&#xff0c;甚至摆出了拍照姿势。拥抱后在球场狂奔&#xff0c;还有大马丁击了掌&#xff0c;最后…

C++学习之STL vector

Vector是什么&#xff1f; 问chatgpt看看是什么回答&#xff1f; ChatGPT&#xff1a; C中的vector是标准库&#xff08;STL&#xff09;提供的一种动态数组容器。它能够在运行时根据需要自动调整大小&#xff0c;并且可以存储不同类型的元素。 使用vector&#xff0c;您可…

Java虚拟机——HotSpot的算法实现细节

根节点枚举 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。固定可作为GC Roots的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;栈帧的本地变量表&#xff09;中。当Java应用很大的时候&#xff0c;类和常量数量很多…

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串&#xff1b;3.4.2 双端队列 &#xff08;链表&#xff09; list &#xff1a;有序&#xff08;插入有序&#xff09;&#xff1b;3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中&#xff0c;首先看到的是dubbo的集群容错模式&#xff0c;以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义&#xff0c;就是可用性优先&#xff0c;遍历所有的invokers&#xff0c;选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行&#xff0c;攻击者通常会控制网络中许多终端或服务器&#xff0c;这些终端或服务器同时向被攻击目标发送大量的请求&#xff0c;被攻击目标无法判断这些请求来源的合法性&#xff0c;因此会无法正常处理这些请求&#xff0c;而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee&#xff08;蒂姆伯纳斯李&#xff09; (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符&#xff08;器&am…

Fiddler如何比较两个接口请求?

进行APP测试时&#xff0c;往往会出现Android和iOS端同一请求&#xff0c;但执行结果不同&#xff0c;这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…

【计网】第一章 计算机网络概述

文章目录 计算机网络概述一、计算机网络在信息时代中的作用二、互联网概述2.1 互连网概念2.2 网络的网络2.3 互连网基础结构发展的三个阶段2.4 互连网的标准化工作 三、互联网的组成3.1 互联网的边缘部分3.2 互联网的核心部分3.2.1 基础概念3.2.2 电路交换3.2.3 报文交换3.2.4 …

全网最全的以太坊ERC4626协议解析-ERC4626 - yield-bearing vaults

收益性存款 ERC4626 协议是一种用于代币化保险库的标准&#xff0c;它可以优化和统一收益保险库的技术参数。收益保险库是指使用不同策略来为用户提供最佳收益的合约&#xff0c;例如借贷市场、聚合器或本身具有利息的代币。ERC4626 协议提供了一个标准的 API&#xff0c;用于表…