【致敬世界杯】球迷(我)和足球的故事

news2024/9/23 19:27:43

目录

一、第一次接触足球

二、回味无穷的2018世界杯

三、致敬世界杯

3.1 源代码

3.2 思路

3.3 关于图片


一、第一次接触足球

踢足球是一项优秀的运动,它可以锻炼身体,增强团队合作精神,并为人们带来快乐和满足感。回忆起小学时候第一次接触足球,我还记得那种兴奋和激动。

那时候,我们都迫不及待地想要尝试这项运动。我们认真地练习,提高自己的技术,并与其他同学一起组成足球队。我们踢足球时,感受到了无限的乐趣和快乐。

在涿州市组织的足球比赛中,我们全力以赴,努力争取胜利。当球进入对方球门时,我们欢呼雀跃,为自己的胜利感到欣慰。即使那次输了比赛,我们也从中吸取教训,继续努力,不断提高自己的实力。

时隔多年,对我来说,踢足球依然是一项重要的运动。我们依然喜欢踢球,依然享受它带来的快乐。回忆起小学时候第一次接触足球,我们仍然感到那份激动和兴奋。踢足球不仅仅是一项运动,它更是一种生活方式,一种对自我挑战和进步的坚持。它让我们拥有了健康的身体和灵魂,让我们拥有了丰富多彩的人生。 



小学时候第一次接触足球,对我们来说是一次重要的经历。我们在踢球的过程中,不仅学会了技术,还培养了勇气和毅力。我们在踢球的过程中,不仅体验到了快乐,还懂得了团队合作的重要性。踢足球让我们更健康,更有活力,更加坚强。

虽然现在我已经长大,但我们依然记得那份对足球的热爱。我们依然喜欢踢球,依然享受它带来的快乐。小学时候第一次接触足球,是我们人生中一次重要的转折点,它改变了我们的生活,让我们成为了更健康的人。

二、回味无穷的2018世界杯

2018年世界杯足球赛在俄罗斯举行,期间,全球最优秀的足球运动员展示了他们顶尖的技术和体能,带给球迷们无限乐趣。

在比赛中,球员们展示了各种各样的技术,从传球到射门再到防守,无一不体现出他们的高水平。例如,葡萄牙队的C罗在比赛中展示了他出色的传球和射门能力,帮助队友制造得分机会并取得进球;英格兰队的斯通斯则展示了他出色的防守能力,在比赛中多次抢断和铲球,有效地防守了对手的进攻。



此外,球员们还展示了出色的协作能力和意识,他们能够与队友配合完成比赛任务,提高队伍的整体实力。例如,法国队在比赛中表现出色,球员们能够轻松地在场上传递球,有效地利用队友的优势,最终夺得了本届世界杯的冠军。

总的来说,2018年世界杯足球赛展示了球员们顶尖的技术和体能,让观众们沉浸在精彩的比赛中,获得无限的乐趣。

三、致敬世界杯

3.1 源代码

为了致敬世界杯,我写pyglet了一个足球小游戏,源代码如下:

import pyglet
from pyglet.window import key


class Player:
    def __init__(self, x, y):
        # 创建球员的图片
        self.image = pyglet.image.load("ball.png")

        # 创建球员的精灵
        self.sprite = pyglet.sprite.Sprite(self.image)

        # 设置球员的精灵的位置
        self.sprite.x = 0
        self.sprite.y = 0

        # 设置球员的速度
        self.vx = 10
        self.vy = 10

    def update(self):
        # 更新球员的位置
        self.sprite.x += self.vx
        self.sprite.y += self.vy

        # 限制球员的移动范围,不能超出屏幕
        if self.sprite.y < 0:
            self.sprite.y = 0
        elif self.sprite.y > 600:
            self.sprite.y = 600


class SoccerGame(pyglet.window.Window):
    def __init__(self):
        # 调用父类的构造函数,创建一个 800x600 的窗口
        super().__init__(800, 600)

        # 设置窗口的标题
        self.set_caption("足球游戏")

        # 加载资源
        self.load_resources()

        # 创建球员
        self.player1 = Player(100, 300)
        self.player2 = Player(700, 300)

        # 创建游戏时钟
        self.clock = pyglet.clock.Clock()

        # 初始化得分
        self.score1 = 0
        self.score2 = 0

    def load_resources(self):
        # 加载背景图片
        self.background = pyglet.image.load("background.png")

        # 加载球的图片
        self.ball_image = pyglet.image.load("ball.png")

        # 创建球的精灵
        self.ball_sprite = pyglet.sprite.Sprite(self.ball_image)

        # 设置球的位置和速度
        self.ball_sprite.x = 400
        self.ball_sprite.y = 300

        self.ball_vx = 0
        self.ball_vy = 0

    def on_key_press(self, symbol, modifiers):

        # 球员1按键处理
        if symbol == key.W:
            self.player1.vy = 5
        elif symbol == key.S:
            self.player1.vy = -5
        # 球员2按键处理
        if symbol == key.UP:
            self.player2.vy = 5
        elif symbol == key.DOWN:
            self.player2.vy = -5

    def on_key_release(self, symbol, modifiers):

        # 球员1按键处理
        if symbol == key.W:
            self.player1.vy = 0
        elif symbol == key.S:
            self.player1.vy = 0

        # 球员2按键处理
        if symbol == key.UP:
            self.player2.vy = 0
        elif symbol == key.DOWN:
            self.player2.vy = 0

    def update(self):

        # 更新球员的状态
        self.player1.update()
        self.player2.update()
        # 更新球的位置
        self.ball_sprite.x += self.ball_vx
        self.ball_sprite.y += self.ball_vy

        # 处理球与球员之间的碰撞
        if self.ball_sprite.x < 100:
            # 球员1和球之间的碰撞
            if self.ball_sprite.y >= self.player1.sprite.y and self.ball_sprite.y <= self.player1.sprite.y + 100:
                # 反弹
                self.ball_vx = -self.ball_vx
                self.ball_vy = (self.ball_sprite.y -
                                self.player1.sprite.y - 50) / 10
            else:
                # 进球
                self.score2 += 1
                self.reset_ball()

        elif self.ball_sprite.x > 700:
            # 球员2和球之间的碰撞

            if self.ball_sprite.y >= self.player2.sprite.y and self.ball_spr.y <= self.player2.sprite.y + 100:
                # 反弹
                self.ball_vx = -self.ball_vx
                self.ball_vy = (self.ball_sprite.y -
                                self.player2.sprite.y - 50) / 10
            else:
                # 进球
                self.score1 += 1
                self.reset_ball()
        # 处理球与墙壁之间的碰撞
        if self.ball_sprite.y < 0:
            self.ball_vy = -self.ball_vy
        elif self.ball_sprite.y > 600:
            self.ball_vy = -self.ball_vy

    def reset_ball(self):

        # 重置球的位置和速度
        self.ball_sprite.x = 400
        self.ball_sprite.y = 300
        self.ball_vx = 0
        self.ball_vy = 0

    def on_draw(self):

        # 绘制背景
        self.background.blit(0, 0)
        # 绘制球员
        self.player1.sprite.draw()
        self.player2.sprite.draw()

        # 绘制球
        self.ball_sprite.draw()

        # 绘制得分
        self.label1.text = str(self.score1)
        self.label1.draw()
        self.label2.text = str(self.score2)
        self.label2.draw()

    def run(self):

        # 设置每秒更新的帧数
        pyglet.clock.schedule_interval(self.update, 1/60)

# 开始游戏循环
pyglet.app.run()
game = SoccerGame()
game.run()

3.2 思路

上面的代码是一个使用Pyglet开发的足球小游戏。它创建了一个SoccerGame类,该类包含所有游戏相关的逻辑,包括游戏窗口、球员、球和游戏循环。

首先,在SoccerGame的__init__方法中,我们创建了游戏窗口,并在窗口中添加了两个球员和一个球。我们还为每个球员定义了键盘事件处理函数,用于处理玩家控制球员的输入。

然后,我们定义了一个update方法,它在每一帧中被调用,用于更新游戏的状态。这个方法更新了球员的位置,并处理球与球员之间的碰撞。

如果球进了球门,它会增加对应玩家的得分,并重置球的位置和速度。

最后,我们定义了一个on_draw方法,它在每一帧中被调用,用于绘制游戏的界面。它

绘制了球员、球和玩家的得分。 为了运行游戏,我们调用SoccerGame的run方法,它会设置每秒更新的帧数,并开始游戏循环。

综上所述,这个足球游戏使用Pyglet作为开发工具,通过模拟球员和球之间的碰撞来实现游戏逻辑。通过运行这个游戏,玩家可以通过键盘控制球员移动,并尝试踢进对手的球门。

当球进了球门,对应玩家的得分会增加,并重置球的位置和速度。

此外,这个游戏还通过处理球与墙壁之间的碰撞来模拟真实的足球游戏。

当球撞到墙壁时,它会反弹,改变方向。 总之,通过使用Pyglet模块,我们可以轻松地开发一个简单的足球游戏。 除了上述功能之外,这个游戏还可以进行扩展和改进。

例如,我们可以添加更多的球员和球门,让游戏更加真实。我们也可以为游戏添加声音效果,让游戏更加有趣。

3.3 关于图片

这个小游戏中,需要四张图片,图片名称及用途如下:

  1. ball.png:这个是足球图片,不用太大;

  2. background.png:这张是球场图片,大小为800x600;

  3. player.png:这张是球员图片。

以上这些图片我没有余力在网上寻找了,大家可以到爱给网上寻找自己喜欢的图片。

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

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

相关文章

OpenCV和RTSP的综合研究

一、RTSP是什么&#xff1f;用来干什么&#xff1f; RTSP&#xff08;Real Time Streaming Protocol&#xff09;&#xff0c;RFC2326&#xff0c;实时流传输协议&#xff0c;是TCP/IP协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和RealNetworks公司提交的IET…

四旋翼无人机学习第14节--PCB Editor简单绘制封装-1

文章目录1 前言1.1 网络获取1.2 封装软件生成1.3 立创商城封装转化1 前言 在之前的博客中&#xff0c;我们绘制了封装所需的焊盘&#xff0c;有了焊盘我们就可以绘制封装啦。当然封装的获取有很多途径&#xff0c;下面我来总结一下。 1.1 网络获取 (有需要的可以下载哦&…

华为eNSP模拟器配置MSTP多实例生成树

传统的stp、rstp有其必然的缺陷 1.统一局域网内所有的vlan共享一个生成树&#xff0c;无法在vlan间实现数据流量的负载均衡。 2.链路利用率低&#xff0c;被阻塞的冗余链路不承载任何流量&#xff0c;造成了带宽的浪费&#xff0c;还可能造成部分vlan报文无法转发。MSTP在它们…

计算机毕业设计springboot+vue基本微信小程序的学习资料共享小程序

项目介绍 前台为用户使用的,包括下面一些功能&#xff1a; ① 资料发布&#xff1a;用户可以将想要共享的资料发布到小程序,供他人购买。 ②搜索 &#xff1a;分为按名称搜索和分类搜索,用户可选择其中一种方式,检索自己所需要的资料。 ③ 查看资料详情&#xff1a;用户可以…

学委必备小工具——筛选未提交人数【python小工具】

问题描述 作为一个学委&#xff0c;通常的任务就是收取班级作业&#xff0c;然后向老师报告当前未交人员的名单 JS版本&#xff1a;实现以一个表格数据查询另一个表格【JS】 之前我已经尝试通过用JS实现了&#xff0c;本质上差别其实也不是很大&#xff0c;只是对于JS来说&…

Java基础之《netty(11)—netty模型》

一、简单说明 1、工作原理示意图 netty主要基于主从Reactors多线程模型做了一定的改进&#xff0c;其中主从Reactor多线程模型有多个Reactor。 2、说明 &#xff08;1&#xff09;BossGroup线程维护selector&#xff0c;只关注Accept事件。 &#xff08;2&#xff09;当接收到…

[附源码]Node.js计算机毕业设计出版社样书申请管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

第十一章 特征选择与稀疏学习

11.1 子集搜索与评价 我们将属性称为特征&#xff0c;对当前学习任务有用的属性称为相关特征、没什么用的属性称为无关特征。还有一类特征称为冗余特征&#xff0c;它们所包含的信息能从其他特征中推演出来&#xff0c;冗余特征在很多时候不起作用&#xff0c;去除它们会减轻学…

redis之如何应对并发访问问题

写在前面 本文一起看下Redis的并发访问控制。 1&#xff1a;单线程的Redis为什么会有并发问题 我们知道&#xff0c;Redis是单线程的&#xff0c;为什么还是会有并发问题呢&#xff1f;没错&#xff0c;如果是单命令操作的话肯定没有并发问题&#xff0c;但考虑事务的场景&a…

nodejs+vue人事管理系统30n9o

开发语言&#xff1a;nodejs 框架&#xff1a;Express 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;VS code 浏览器&#xff1a;谷歌浏览器 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 …

使用VS2019开发调试Android动态库

1. 环境准备 1.1 安装JDK&#xff1a;jdk1.8.0_112 1.2 安装Android SDK SDK可以安装指定的platforms和ndk-bundle。为了兼容性考虑&#xff0c;单独安装了版本比较老的android-ndk-r10b 1.3 安装VS2019 安装VS2019并选择&#xff1a;使用C的移动开发。 1.4 连接开发手机…

基于Java+Mysql实现(web)大型企业管理系统【100010019】

第一章 系统概述 包括用户管理、权限管理、软件项目管理、软件模块管理、测试用例管理、测试任务分配、bug管理等功能。实现公司不同部门间团队协作&#xff0c;管理人员也能够更加有效的把控系统开发的进度。 本实验综合应用JavaWeb编程中的Servlet&#xff0c;JSP&#xff…

spring——Spring自动装配(基于注解)——前提了解——Spring的@Autowired注解为什么用在接口上 (转载)...

大家都知道Service注入的是实现类serviceImpl&#xff0c;那使用时怎么能获取到接口&#xff0c;而且还能调用到实现类的方法。 接口&#xff1a; public interface TestService{ public String test(); }实现类&#xff1a; Service public class TestServiceImpl imp…

Netty_04_消息协议设计与实战(实践类)

文章目录一、前言二、整体运行&#xff1a;先启动服务端&#xff0c;然后启动客户端&#xff0c;发送三条消息三、客户端和服务端3.1 客户端(重要)3.2 服务端(重要)3.3 编码和解码(了解即可)四、尾声一、前言 源码下载&#xff1a;https://www.syjshare.com/res/XEE10LTG 二、…

【Linux修炼】10.进程地址空间

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 进程地址空间本节目标1. 回顾C/C地址空间1.1 提出问题1.2 见问题产生的现象1.3 解释现象2. 虚拟地址空间2.1 感性理解虚拟地址空间 2.2 如何“画饼”2.3 地址空间的区域划分3. 进程地址空间与内存的关系3.1 虚拟地址和物理…

LabVIEW编程LabVIEW开发 ADAM-4056 DO模块例程与相关资料

LabVIEW编程LabVIEW开发 ADAM-4056 DO模块例程与相关资料 ​ADAM-4056SO是具有12通道自源型携带Modbus协议隔离数字输出模块。具有如下特点&#xff1a; ADO源电源故障检测 输入/输出类型&#xff1a;源式输出 12通道 数字输出&#xff1a;VCC&#xff1a; 1~35伏直流电&a…

基于Java+Mysql实现(WEB)宿舍管理系统【100010016】

数据库实践课程之宿舍管理系统 一、系统需求分析 1.1 系统描述 随着社会的发展以及教育水平的提高&#xff0c;当今社会在校生的数量越来越庞大&#xff0c;使用传统的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天&#xff0c;使用数据库技术对学生的…

Go 实现希尔排序算法及图解

耐心和持久胜过激烈和狂热。 哈喽大家好&#xff0c;我是陈明勇&#xff0c;今天分享的内容是使用 Go 实现希尔排序算法。如果本文对你有帮助&#xff0c;不妨点个赞&#xff0c;如果你是 Go 语言初学者&#xff0c;不妨点个关注&#xff0c;一起成长一起进步&#xff0c;如果本…

游戏开发51课 性能优化9

4.5 光照模型&#xff08;Lighting/Illumination Model&#xff09; 4.5.1 Flat Shading&#xff08;平面着色&#xff09; 根据表面法向量计算光照&#xff0c;并应用到整个面片上。速度最快&#xff0c;效果最差&#xff0c;容易暴露物体的多边形本质&#xff08;下图&…

微服务框架 SpringCloud微服务架构 29 ES 集群 29.4 分布式新增和查询流程

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.4 分布式新增和查询流程29.4.1 ES集群的分布式存储29.4.2 总…