一、前引
#已經學習完了:
#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()