python 烏龜和魚遊戲(物件導向例項)

2021-09-09 07:32:01 字數 3555 閱讀 5669

pygame

遊戲程式設計:按以下要求定義乙個烏龜類和魚類並嘗試編寫遊戲

假設遊戲場景為範圍(x,y)為0<=x<=10,0<=y<=10

遊戲生成1只烏龜和10條魚

它們的移動方向均隨機

烏龜的最大移動能力為2(它可以隨機選擇1還是2移動),魚兒的最大移動能力是1

當移動到場景邊緣,自動向反方向移動

烏龜初始化體力為100(上限)

烏龜每移動一次,體力消耗1

當烏龜和魚座標重疊,烏龜吃掉魚,烏龜體力增加20

魚暫不計算體力

當烏龜體力值為0(掛掉)或者魚兒的數量為0遊戲結束

import random

class turtle(object):

# 建構函式什麼時候執行? =---*****建立物件時執行

def __init__(self): # self指的是例項化的物件;

# 烏龜的屬性: x,y軸座標和體力值

# 烏龜的x軸, 範圍1,10

self.x = random.randint(1, 10)

self.y = random.randint(1, 10)

# 烏龜初始化體力為100

self.power = 100

# 類的方法:

def move(self):

# 烏龜的最大移動能力為2,[-2, -1, 0, 1, 2]

move_skill = [-2, -1, 0, 1, 2]

# 計算出烏龜的新座標(10, 12)

new_x = self.x + random.choice(move_skill)

new_y = self.y + random.choice(move_skill)

# 對於新座標進行檢驗, 是哦否合法, 如果不合法, 進行處理

self.x = self.is_vaild(new_x)

self.y = self.is_vaild(new_y)

# 烏龜每移動一次,體力消耗1

self.power -= 1

def is_vaild(self, value):

"""判斷傳進來的x軸座標或者y軸座標是否合法?

1). 如果合法, 直接返回傳進來的值;

2). value<=0; *****> abs(value);

3). value > 10 *****=> 10-(value-10);

:param value:

:return:

"""if 1 <= value <= 10:

return value

elif value < 1:

return abs(value)

else:

return 10 - (value - 10)

def eat(self):

"""當烏龜和魚座標重疊,烏龜吃掉魚,烏龜體力增加20

:return:

"""self.power += 20

class fish(object):

# 建構函式什麼時候執行? =---*****建立物件時執行

def __init__(self):

# 魚的屬性: x, y軸座標

# 魚的x軸, 範圍1,10

self.x = random.randint(1, 10)

self.y = random.randint(1, 10)

# 類的方法:

def move(self):

# 魚的最大移動能力為1,[ -1, 0, 1]

move_skill = [-1, 0, 1]

# 計算出魚的新座標(10, 12)

new_x = self.x + random.choice(move_skill)

new_y = self.y + random.choice(move_skill)

# 對於新座標進行檢驗, 是否合法, 如果不合法, 進行處理

self.x = self.is_vaild(new_x)

self.y = self.is_vaild(new_y)

def is_vaild(self, value):

"""判斷傳進來的x軸座標或者y軸座標是否合法?

1). 如果合法, 直接返回傳進來的值;

2). value<=0; *****> abs(value);

3). value > 10 *****=> 10-(value-10);

:param value:

:return:

"""if 1 <= value <= 10:

return value

elif value < 1:

return abs(value)

else:

return 10 - (value - 10)

def main():

# 建立乙個烏龜;

turtle = turtle()

print(turtle.x, turtle.y)

# for迴圈建立10個魚

# fishs =

# for i in range(10):

# 建立10個魚物件;

fishs = [fish() for i in range(10)]

# 遊戲開始

while true:

# 判斷遊戲是否結束?( 當烏龜體力值為0(掛掉)或者魚兒的數量為0遊戲結束)

if turtle.power <= 0:

print("烏龜沒有體力了, game over......")

break

elif len(fishs) == 0:

print("魚被吃光, game over......")

break

else:

# 遊戲沒有結束. 烏龜和魚隨機移動

flag=0

turtle.move()

# 魚移動

for fish in fishs:

fish.move()

# 判斷魚是否被烏龜吃掉?

# 當烏龜和魚座標重疊,烏龜吃掉魚,烏龜體力增加20

if turtle.x == fish.x and turtle.y == fish.y:

flag=1

turtle.eat()

# 刪除被烏龜吃掉的魚

fishs.remove(fish)

print("魚被烏龜吃掉, 還剩%d條魚....." % (len(fishs)))

print("烏龜的最新體力為%s" % (turtle.power))

# 烏龜跟10個魚都比較結束後, 沒有發現吃到乙個魚, 才執行, 跟for是一塊的;

if flag==0 :else

print("烏龜沒有吃到魚,最新體力為%s" % (turtle.power))

# pygame

if __name__ == "__main__":

print("遊戲開始".center(30, "*"))

main()

python學習筆記 烏龜吃魚小遊戲

遊戲規則 1.遊戲背景為10 10 2.遊戲會自動生成1個烏龜和10條魚 3.它們移動方向隨機 4.烏龜最大移動能力為2 2,1,1,2 5.魚最大移動能力為1 1,1 6.當移動到場景邊界,自動反方向移動 7.烏龜初始化體能為100 200為上限 每移動一次消耗體能1 8.當烏龜和魚的座標重合,代...

魚c筆記 Python物件導向程式設計

ooa 物件導向分析 oop 物件導向程式設計 ood 物件導向設計 關於self python的self相當於c 的this指標。由同乙個類可以生成無數的物件,當乙個物件的方法被呼叫的時候,物件會將自身作為第乙個引數傳遞給self引數,接受到這個self引數時,python就知道是哪個物件在呼叫方...

python 物件導向 python是物件導向嗎

python是一種物件導向 解釋型計算機程式語言,由guido van rossum於1989年底發明,第乙個公開發行版發行於1991年,python 源 同樣遵循 gpl gnu general public license 協議。python語法簡潔而清晰,具有豐富和強大的類庫。但實際上面向過程...