主頁 >  其他 > 用Python寫了一個「擁抱梅西」的小游戲

用Python寫了一個「擁抱梅西」的小游戲

2023-06-21 08:18:35 其他

大家好,歡迎來到 Crossin的編程教室 ! 

最近有個小伙兒因為在比賽中沖進場地擁抱梅西而出名了, 

這種行為當然不可取,他也為此付出了代價,但要說我沒有一丁點羨慕和佩服那是不可能的,

于是,我也尬蹭一下這個熱點,用Python寫了一個「擁抱梅西」的小游戲,

游戲效果是這樣的: 

 游戲規則很簡單:

  1. 不要被攔截的作業人員追上

  2. 抱到梅西(接觸一定時長)

  3. 定時會增加攔截的作業人員

  4. 可以反復擁抱

  5. 被追上后游戲結束,顯示堅持的時間和擁抱的次數

代碼已上傳,獲取請訪問:python666.cn/c/9

運行說明

代碼使用了游戲框架 pygame-zero 進行開發,之前我們也有發過基于這個框架的游戲:

羊了個羊,但是Python簡(li)單(pu)版

如果你對于此框架還不熟悉,可以看下這篇介紹:

PONG - 100行代碼寫一個彈球游戲

因此運行代碼前需先安裝模塊:

pip install pgzero

用此框架代碼看起來與一般代碼稍有不同,它更像一個配置腳本,其中會出現很多未定義的方法和變數,因此在很多編輯器里會提示有錯,但其實是可以運行的,無需手動增加 import,這也是為什么你會看到我視頻里的代碼截圖有大量的下劃線,

pgzero有兩種方式運行,一種是通過命令列的 pgzrun 命令;另一種是直接在編輯器中運行,參見官方檔案:

https://pygame-zero.readthedocs.io/zh_CN/latest/ide-mode.html

本代碼用的是第二種直接運行的方式(需新版pgzero),可直接在IDE中執行,

有部分讀者反饋此代碼在spyder等一些編輯器中無法運行,類似情況可以嘗試第一種傳統方法,即把最后一行代碼 pgzrun.go() 去掉,然后直接在命令列該目錄下運行: 

pgzrun iMessi.py

代碼簡介

如果你對代碼的核心邏輯其實比較容易理解,

  • 對于「玩家」來說,就是根據上下左右按鍵,變換位置坐標;

  • 對于「作業人員」來說,就是根據自身和玩家的相對位置算出移動的方向,不斷靠近,如果碰上了就游戲結束

  • 對于「梅西」來說,就是判斷是否與玩家碰上,并記錄碰上的持續時間

判斷是否“碰上”很簡單,就是計算一下兩個坐標的距離是否小于一定值,

至于角色的移動,粗略的做法是,計算出x軸方向和y軸方向上的速度,然后在update函式中,將原坐標位置加上速度值,得到新的坐標位置,

但在我這次的代碼中,為了讓跑動更“絲滑”,沒有選擇直接改變速度,而是根據玩家的按鍵計算出加速度,然后在update函式中,將原速度值加上加速度值,得到新的速度,再用新的速度去計算新的坐標位置,

# 加速
self.speedx += self.fx * self.acc
self.speedy += self.fy * self.acc
# 限制最高速度
d = (self.speedx**2 + self.speedy**2)**0.5 / self.speed_max
if d > 1:
    self.speedx /= d
    self.speedy /= d
# 更新坐標
self.x += self.speedx
self.y += self.speedy

有了這樣的設定之后,還有個好處就是可以增加游戲的可玩性,比如你可以設定一種最高速度比玩家快,但是加速度比較小的「作業人員」,玩家就需要通過不停地變換方向來擺脫,

代碼中另一個比較復雜的地方是“轉向”的細節處理,同樣為了更加絲滑,我沒有選擇直接根據計算出的方向來改變角色貼圖方向,而是將計算出的方向作為“目標方向”,然后根據角色當前實際方向與目標方向的偏差,決定是向順時針還是逆時針方向旋轉,直到兩個方向小于一定閾值,

# 跑動方向
if keyboard.left:
    self.fx = -1
elif keyboard.right:
    self.fx = 1
else:
    self.fx = 0
if keyboard.up:
    self.fy = -1
elif keyboard.down:
    self.fy = 1
else:
    self.fy = 0
# 計算目標方向角度
directs = ((135, 180, -135), (90, None, -90), (45, 0, -45))
direct = directs[self.fx + 1][self.fy + 1]
if direct is None:
    self.angle_dest = self.angle
else:
    self.angle_dest = direct        
# 貼圖旋轉
if abs(self.angle - self.angle_dest) < 5 or abs(self.angle - self.angle_dest) > 355:
    self.angle = self.angle_dest
else:
    if (0 < self.angle - self.angle_dest < 180) or (
        self.angle - self.angle_dest < -180):
        self.angle -= 500 * dt
    else:
        self.angle += 500 * dt

 這段會牽扯一點初中幾何的知識,想要理清的話建議在紙上畫一畫,

最后,是關于這個游戲的一個小視頻,給大家圖一樂:

歡迎大家關注+三連~

代碼已上傳,獲取請訪問:python666.cn/c/9

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555696.html

標籤:其他

上一篇:從0到1構造自定義限流組件

下一篇:返回列表

標籤雲
其他(161399) Python(38243) JavaScript(25509) Java(18250) C(15238) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7259) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 用Python寫了一個「擁抱梅西」的小游戲

    大家好,歡迎來到 Crossin的編程教室 ! 最近有個小伙兒因為在比賽中沖進場地擁抱梅西而出名了。 這種行為當然不可取,他也為此付出了代價。但要說我沒有一丁點羨慕和佩服那是不可能的。 于是,我也尬蹭一下這個熱點,用Python寫了一個「擁抱梅西」的小游戲。 游戲效果是這樣的: 游戲規則很簡單: 不 ......

    uj5u.com 2023-06-21 08:18:35 more
  • 從0到1構造自定義限流組件

    在系統高可用設計中,介面限流是一個非常重要環節,一方面是出于對自身服務器資源的保護,另一方面也是對依萊澩的一種保護措施。比如對于 Web 應用,我限制單機只能處理每秒 1000 次的請求,超過的部分直接回傳錯誤給客戶端。雖然這種做法損害了用戶的使用體驗,但是它是在極端并發下的無奈之舉,是短暫的行為... ......

    uj5u.com 2023-06-21 08:17:26 more
  • 【Podman Desktop】配置鏡像源加速

    ## 配置Podman desktop鏡像源加速 1. 打開阿里云`https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors`,復制里面的加速地址 ![image](https://img2023.cnblogs.com/blog/308 ......

    uj5u.com 2023-06-21 08:17:18 more
  • 我是如何寫題解的

    在演算法競賽中,寫題解是我們不可或缺的一部分。它不僅能夠幫助我們整理思路、總結經驗,還可以與他人分享我們的解題思路和代碼實作。然而,寫一篇較完備的題解往往非常繁瑣,需要手動復制粘貼題目鏈接、題號和AC代碼,這不僅費時費力,還容易分散我們的注意力,因為我們寫題解的核心內容是對題目的理解以及怎么解決這個問 ......

    uj5u.com 2023-06-21 08:17:13 more
  • 以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!

    摘要:近日,華為云開發者日HDC.Cloud Day在成都成功舉行,活動匯聚了20余位技術大牛和行業專家,與開發者們共同探討AI時代下的軟體開發革命、產教融合發展新趨勢。 本文分享自華為云社區《以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!》,作者:華為云社區精選 。 華為云開發者日是面向全 ......

    uj5u.com 2023-06-21 08:16:45 more
  • Burp+Xray的聯動使用

    Burp+Xray的聯動使用 步驟如下, 1)首先,我們啟動Xray的url監聽功能,我們設定監聽地址為127.0.0.1,埠為7777。監聽的報告輸出到xray檔案夾根目錄下的proxy_test.html。 輸入以下命令后,xray的監聽就開始了。 .\xray_windows_amd64.e ......

    uj5u.com 2023-06-21 08:16:20 more
  • 學習抽象概念案例,虛數和復數

    # 從哲學角度思考虛擬的東西有必要嗎? 人類可能是唯一一個能夠構想出不存在的事物的物種,這個能力對我們來講非常重要。 說實話,虛數其實不好理解,因為這個數是之前的數學家虛構、想象出來的。那么這種虛構的數一定是抽象的,就像我們說的負數,你就很難說它存在或者不存在,當你說“我有-1個蘋果”,那么這個-1 ......

    uj5u.com 2023-06-21 08:10:42 more
  • Apache Superset 身份認證繞過漏洞(CVE-2023-27524)

    Apache Superset是一個開源的資料可視化和資料探測平臺,它基于Python構建,使用了一些類似于Django和Flask的Python web框架。提供了一個用戶友好的界面,可以輕松地創建和共享儀表板、查詢和可視化資料,也可以集成到其他應用程式中。 ......

    uj5u.com 2023-06-21 08:04:59 more
  • 以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!

    摘要:近日,華為云開發者日HDC.Cloud Day在成都成功舉行,活動匯聚了20余位技術大牛和行業專家,與開發者們共同探討AI時代下的軟體開發革命、產教融合發展新趨勢。 本文分享自華為云社區《以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!》,作者:華為云社區精選 。 華為云開發者日是面向全 ......

    uj5u.com 2023-06-21 08:03:21 more
  • 用Python寫了一個「擁抱梅西」的小游戲

    大家好,歡迎來到 Crossin的編程教室 ! 最近有個小伙兒因為在比賽中沖進場地擁抱梅西而出名了。 這種行為當然不可取,他也為此付出了代價。但要說我沒有一丁點羨慕和佩服那是不可能的。 于是,我也尬蹭一下這個熱點,用Python寫了一個「擁抱梅西」的小游戲。 游戲效果是這樣的: 游戲規則很簡單: 不 ......

    uj5u.com 2023-06-21 08:02:38 more