Level2_12小球與擋板(移動+反彈)

一、前引


#已經學習完了:
#1.數據結構:集合、元組、字典
#2.函數
#3.類和對象
#4.繼承與多態

#1.規劃編程項目:
#(1)你想做什么什么樣功能的項目?
# 接小球游戲,碰到擋板時自動反彈
#(2)功能有哪些?
# 自由運動的小球
# 小球觸碰到勢必會發生反彈
# 鍵盤左右移動擋板
# 小球觸碰到擋板會發生反彈。
#(3)如何實現它的功能?
# 類Ball:初始化小球,小球自由移動,觸邊反彈等功能;
# 類Board:初始化擋板,擋板左右移動,觸碰擋板反彈;
# 類Game:創建小球,擋板對象,小球一直在空間運動。

# 用偽代碼==轉化==>實際代碼

#(4)你的時間規劃?開始時間,結束時間。
# 30分鐘,設計項目和偽代碼實踐
# 40分鐘,球移動/碰撞反彈
# 20分鐘,擋板移動/碰撞反彈


二、偽代碼:創建小球+擋板對象

#偽代碼:類似于流程圖,用在程序的一開始,用來描寫和幫助寫出程序。

#------------------------------------------------------
#1.(注釋)
# 游戲效果:
# 小球在空中自由的運動,當碰到左右移動的擋板時會發生反彈

# (1)導入模塊
# (2)運動的小球
# (3)擋板,可以讓小球反彈
# (4)創建小球和擋板對象,運行游戲
?

#2.偽代碼:

# 導入模塊
# 運動的小球
# class Ball():
#???? def __init__(self): #小球基本屬性
#???????? pass
#
#???? def move(self): #小球自由移動
#???????? pass
#
#???? def checkbound(self): #檢測小球觸邊反彈。
#???????? pass
#
# # 擋板,可以讓小球反彈
# class Board():
#???? def __init__(self): #擋板基本屬性
#???????? pass
#
#???? def go_left(self): #左移
#???????? pass
#
#???? def go_right(self): #右移
#???????? pass
#
#???? def collide(self,ball):? #擋板與球發生碰撞,接著反彈
#???????? pass
# #游戲運行
# class Game():
#???? def __init__(self):
#???????? pass
#???? def run(self):
#???????? pass
#
# game=Game()

#3.預制代碼(創建了小球對象和擋板對象)
#turtle.Pen()是一個方法

## 游戲效果:
# 小球在空中自由的運動,當碰到左右移動的擋板時會發生反彈
# 導入模塊
import turtle
# 運動的小球
class Ball(turtle.Pen):def __init__(self): #小球基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("circle")def move(self): #小球自由移動passdef checkbound(self): #檢測小球觸邊反彈。pass# 擋板,可以讓小球反彈
class Board(turtle.Pen):def __init__(self): #擋板基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("square")#正方形self.shapesize(1,5,1)#設置擋板的長度# stretch_wid:垂直方向的拉伸比例(寬度方向)# stretch_len:水平方向的拉伸比例(長度方向)# outline:形狀的輪廓寬度self.goto(0,-200) #擋板的初始位置。def go_left(self): #左移passdef go_right(self): #右移passdef collide(self,ball):? #擋板與球發生碰撞,接著反彈pass
#游戲運行
class Game():def __init__(self):turtle.Screen().setup(600,600)self.ball = Ball() #小球對象self.board = Board() #擋板對象passdef run(self):passgame=Game()input()

三、小球墻面反彈

#(4)小球移動效果。
## 游戲效果:
# 小球在空中自由的運動,當碰到左右移動的擋板時會發生反彈

# 導入模塊
import turtle
# 運動的小球
class Ball(turtle.Pen):def __init__(self): #小球基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("circle")self.spd=10,5#元組 值(10, 5),賦值給 self.spd-------------------------------------------------1def move(self): #小球自由移動#self.goto(self.xcor()+10, self.ycor()-5)#出錯1self.goto(self.xcor()+self.spd[0], self.ycor()+self.spd[1])#上面元祖的第一個、第二個----修改2def checkbound(self): #檢測小球觸邊反彈if self.xcor()>300 or self.xcor()<-300:#-x---------------------------------------------3self.spd=-self.spd[0],self.spd[1]#水平取反,反彈
# if self.xcor()>300 or self.xcor()<-300: #錯誤修改2
#???? self.xcor()-10
#???? self.ycor()+5if self.ycor()>300 or self.ycor()<-300:#yself.spd=self.spd[0],-self.spd[1]
# if self.ycor()>300 or self.ycor()<-300: #錯誤修改2
#???? self.xcor()+10
#???? self.ycor()-5# 擋板,可以讓小球反彈
class Board(turtle.Pen):def __init__(self): #擋板基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("square")#正方形self.shapesize(1,5,1)#設置擋板的長度self.goto(0,-200) #擋板的初始位置。def go_left(self): #左移passdef go_right(self): #右移passdef collide(self):? #擋板與球發生碰撞,接著反彈pass
#游戲運行
class Game():def __init__(self):turtle.Screen().setup(600,600)self.ball = Ball() #小球對象self.board = Board() #擋板對象def run(self):while True: #球斜著飛(右上角)-----------------------------------4self.ball.move()self.ball.checkbound()game=Game()
game.run()input()

四、小球擋板反彈

(5)小球擋板反彈。
游戲效果:
小球在空中自由的運動,當碰到左右移動的擋板時會發生反彈

# 導入模塊
import turtle
# 運動的小球
class Ball(turtle.Pen):def __init__(self): #小球基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("circle")#self.spd=10,5#修改======================================2self.spd=-1,-5def move(self):#self.goto(self.xcor()+10, self.ycor()-5)#出錯1self.goto(self.xcor()+self.spd[0], self.ycor()+self.spd[1])#修改1def checkbound(self): #檢測小球觸邊反彈if self.xcor()>300 or self.xcor()<-300:self.spd=-self.spd[0],self.spd[1]
# if self.xcor()>300 or self.xcor()<-300: #錯誤修改2
#     self.xcor()-10
#     self.ycor()+5if self.ycor()>300 or self.ycor()<-300:self.spd=self.spd[0],-self.spd[1]
# if self.ycor()>300 or self.ycor()<-300: #錯誤修改2
#     self.xcor()+10
#     self.ycor()-5# 擋板,可以讓小球反彈
class Board(turtle.Pen):def __init__(self): #擋板基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("square")#正方形self.shapesize(1,5,1)#設置擋板的長度,# stretch_wid, stretch_len, outline,# 像素,每個單位對應 20 個像素,# 因此:擋板的寬度(水平方向)是 5 * 20 = 100 個像素self.goto(0,-200) #擋板的初始位置。def go_left(self): #左移passdef go_right(self): #右移passdef collide(self,ball):  #擋板與球發生碰撞,接著反彈====================================================1if (-210<=ball.ycor()<=-190and abs(self.xcor()-ball.xcor())<50):   #abs是差的絕對值 擋板的寬度為 100,因此 50 是其一半的寬度ball.spd=ball.spd[0],-ball.spd[1]#0=x,1=y#游戲運行
class Game():def __init__(self):turtle.Screen().setup(600,600)self.ball = Ball() #小球對象self.board = Board() #擋板對象def run(self):while True: #球斜著飛(右上角)self.ball.move()self.ball.checkbound()self.board.collide(self.ball)#調用方法#=========================================2game=Game()
game.run()input()

五、小球擋板移動_小球完整

import turtle# 運動的小球
class Ball(turtle.Pen):def __init__(self):  # 小球基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("circle")self.spd = -1, -5def move(self):self.goto(self.xcor() + self.spd[0], self.ycor() + self.spd[1])def checkbound(self):  # 檢測小球觸邊反彈if self.xcor() > 300 or self.xcor() < -300:self.spd = -self.spd[0], self.spd[1]if self.ycor() > 300 or self.ycor() < -300:self.spd = self.spd[0], -self.spd[1]# 擋板,可以讓小球反彈
class Board(turtle.Pen):def __init__(self):  # 擋板基本屬性turtle.Pen.__init__(self)self.penup()self.speed(0)self.shape("square")  # 正方形self.shapesize(1, 5, 1)  # 設置擋板的長度self.goto(0, -200)  # 擋板的初始位置。# 事件監聽screen = turtle.Screen()screen.onkey(self.go_left, "Left")screen.onkey(self.go_right, "Right")screen.listen()def go_left(self):  # 左移x = self.xcor()  # 獲取當前擋板的x坐標if x > -275:  # 限制擋板的左邊界self.setx(x - 20)  # 向左移動20像素def go_right(self):  # 右移x = self.xcor()  # 獲取當前擋板的x坐標if x < 275:  # 限制擋板的右邊界self.setx(x + 20)  # 向右移動20像素def collide(self, ball):  # 擋板與球發生碰撞,接著反彈if (-210 <= ball.ycor() <= -190) and (abs(self.xcor() - ball.xcor()) < 50):  # abs是差的絕對值ball.spd = ball.spd[0], -ball.spd[1]# 游戲運行
class Game():def __init__(self):turtle.Screen().setup(600, 600)self.ball = Ball()  # 小球對象self.board = Board()  # 擋板對象def run(self):while True:  # 球斜著飛(右上角)self.ball.move()self.ball.checkbound()self.board.collide(self.ball)  # 調用方法game = Game()
game.run()input()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87570.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87570.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87570.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win11 2025開機禁用微軟賬號登錄,改本地用戶登錄,品牌預裝機福音

今天開箱了品牌商出廠系統一臺華為筆記本&#xff0c;開機提示連接wifi并需要登錄微軟賬號&#xff0c;其中過程實在緩慢&#xff0c;而且老是提示自動更新&#xff0c;速度太慢了&#xff0c;等的花都謝了&#xff0c;進到桌面大概得要30-40分鐘&#xff0c;還不如本地用戶登錄…

【嵌入式ARM匯編基礎】-ELF文件格式內部結構詳解(三)

ELF文件格式內部結構詳解(三) 文章目錄 ELF文件格式內部結構詳解(三)12、動態部分和動態加載13、依賴加載(需要)14、程序重定位14.1 靜態重定位14.2 動態重定位14.3 全局偏移表 (GOT)14.4 過程鏈接表 (PLT)12、動態部分和動態加載 ELF 文件格式中的 .dynamic 部分用于指…

HTML知識復習2

文章目錄 HTML5簡介什么是HTML5HTML5優勢 新增語義化標簽新增布局標簽新增狀態標簽新增列表標簽新增文本標簽 新增表單功能表單控件新增屬性input新增屬性值 新增多媒體標簽視頻標簽音頻標簽 HTML5兼容性處理 HTML5簡介 什么是HTML5 HTML5 是新一代的 HTML 標準&#xff0c;2…

棧(Stack)和隊列(Queue)

文章目錄 前言1. 棧(Stack)1.1 什么是棧1.2 棧的常用操作1.3 棧的模擬實現1.4 棧的應用場景1.4.1 元素序列處理1.4.2 字符串反轉1.4.3 括號匹配1.4.4 逆波蘭表達式求值1.4.5 棧的壓入、彈出序列1.4.6 最小棧1.4.7 遞歸轉循環 1.5 概念區分1.5.1 數據結構中的棧1.5.2 JVM中的虛擬…

5G MEC四大核心挑戰技術解析報告

一、MEC園區部署挑戰:數據本地化與低時延接入 痛點深度解析 數據不出園區:工業質檢、醫療影像等敏感業務需數據在本地閉環處理。但運營商基站與企業MEC間若經公網繞行,時延超50ms且存在泄露風險。L2網絡局限:傳統L2接入網無法實現基站→UPF的智能路由,導致業務流繞行城域…

【硬核拆解】英偉達Blackwell芯片架構如何重構AI算力邊界?

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 一、Blackwell誕生的算力危機&#xff08;2025現狀&#xff09; graph TD A[2025年AI算力需求] --> B[千億參數模型訓練能耗…

【深度學習模塊】圖像的相對位置編碼

這個是一個常用的模塊&#xff0c;就是我們可以對輸入的特征嵌入位置編碼。 位置編碼&#xff08;Positional Encoding&#xff09;是一種將空間位置信息嵌入到特征中的方法&#xff0c;通常用于幫助模型更好地理解特征的空間關系。 這里介紹的這個是相對位置編碼&#xff0c;…

osg加入實時光照SilverLining 天空和3D 云

OSG系列文章目錄 文章目錄 OSG系列文章目錄一、前言官網的介紹&#xff1a; 二、編譯官網例子 一、前言 osg本身也可以加入動態云&#xff0c;但是效果有點差強人意&#xff0c;這里我們使用sundog公司的動態云&#xff1a;SilverLining 天空和 3D 云。 官網的介紹&#xff1…

spring-ai-alibaba 1.0.0.2 學習(十二)——聊天記憶擴展包

學習spring-ai時提到過&#xff0c;spring-ai除了內置的InMemoryChatMemoryRepository&#xff0c;還提供jdbc、cassandra、neo4j三個擴展包。 而spring-ai-alibaba則提供了jdbc、redis、elasticsearch三個擴展包。 兩者都提供了jdbc擴展包&#xff0c;有什么區別呢&#xff…

c語言-指針(數組)練習2

題目&#xff1a;將數組中n個元素按逆序存放并打印出來&#xff0c;使用函數封裝與指針 思路&#xff1a; 1.定義一個數組arr[5]和用于存放數組大小&#xff08;數組大小通過sizeof關鍵字來進行計算&#xff09;的變量len&#xff1b; 2.創建三個函數initArr、printArr、rev…

Redis服務器

Redis&#xff0c;一款Key-Value型內存數據庫 常用于網站開發場景 Redis服務器只發布了Linux版本 Redis服務器安裝&#xff0c;2種辦法 自動安裝 apt install redis-server手動編譯安裝 從官網下載源碼&#xff0c;編譯&#xff0c;部署 1 安裝redis apt install redis-s…

LeetCode 第91題:解碼方法

題目描述&#xff1a; 一條包含字母A-Z的消息通過以下映射進行了編碼 1-A ...... 26-Z 要特別注意&#xff0c;11106可以映射為AAJF或KJF 06不是一個合法編碼 給你一個只含數字的非空字符串s&#xff0c;請計算并返回解碼方法的總數。如果沒有合法的方法解碼整個字符串&#xf…

Rocky Linux 9 源碼包安裝Mysql8

Rocky Linux 9 源碼包安裝Mysql8 大家好我是星哥&#xff0c;之前介紹了&#xff0c;Rocky Linux 9 源碼包安裝Mysql5.7。 本文將介紹如何在Rocky Linux 9操作系統上&#xff0c;從源碼一步步安裝MySQL 8&#xff0c;為您提供一個穩定、高效且可控的數據庫解決方案。 為什么…

AI小智項目全解析:軟硬件架構與開發環境配置

AI小智項目全解析&#xff1a;軟硬件架構與開發環境配置 一、項目整體架構 AI小智是一款基于ESP32的智能物聯網設備&#xff0c;集成了語音交互、邊緣計算等功能。整體系統架構如下&#xff1a; 終端設備&#xff1a;ESP32模組作為核心通信方式&#xff1a; WebSocket實現實…

設計模式之上下文對象設計模式

目錄 一、模式介紹 二、架構設計 三、Demo 示例 四、總結 一、模式介紹 上下文對象&#xff08;Context Object&#xff09;模式 最早由《Core J2EE Patterns》第二版提出&#xff0c;其核心目標是在多層或多組件間共享與當前作用域&#xff08;如一次請求、一次會話、一次…

@Linux服務器加域退域

文章目錄 **一、加入Active Directory域****1. 準備工作****2. 配置步驟****步驟1&#xff1a;驗證網絡和DNS****步驟2&#xff1a;發現域****步驟3&#xff1a;加入域****步驟4&#xff1a;配置SSSD&#xff08;可選&#xff09;****步驟5&#xff1a;配置sudo權限&#xff08…

鴻蒙系統(HarmonyOS)4.2 設備上實現無線安裝 APK 并調試

在鴻蒙系統&#xff08;HarmonyOS&#xff09;4.2 設備上實現無線安裝 APK 并調試的步驟與 Android 類似&#xff0c;但需注意鴻蒙系統的特殊設置。以下是詳細操作指南&#xff1a; 鴻蒙系統特殊準備 開啟開發者選項&#xff1a; - 設置 > 關于手機 > 連續點擊"H…

MyBatis時間戳查詢實戰指南

在 MyBatis 中通過時間戳&#xff08;Timestamp&#xff09;作為查詢條件&#xff0c;需注意數據庫時間類型與 Java 類型的映射。以下是具體實現方式&#xff1a; 一、Java 實體類與數據庫字段映射 實體類定義 使用 java.sql.Timestamp 或 java.time.LocalDateTime&#xff08;…

【Verilog硬件語言學習筆記4】FPGA串口通信

串口通信是系統設計中比較基部分&#xff0c;其原理其實也很通俗易懂。單次建立通信會傳輸8個bit&#xff0c;其時序也很簡單&#xff0c;這里就不再贅述了。其對應的實例代碼如下所示&#xff1b; 首先是接受部分&#xff08;因為我的變量命名也很規范&#xff0c;通俗易懂&a…

Go 語言安裝教程(Windows 系統)

2025年07月02日 準備工作 確認系統為 Windows 7 及以上版本&#xff08;推薦 Windows 10/11&#xff09;。64 位系統選擇 amd64 版本安裝包&#xff0c;32 位系統選擇 386 版本。確保安裝目錄&#xff08;默認 C:\Program Files\Go\&#xff09;有至少 1GB 空間。 下載安裝包…