tkinter飛機大戰測試程式by李興球

scratch發表於2020-10-30

Python

""
   tkinter飛機大戰測試程式by李興球
   本程式需要gameturtle模組0.2版支援。
   利用標籤對敵機和子彈進行分組,也用了顏色對敵機進行了分組。
"""
from gameturtle import *
from random import randint

bimage = Image.new("RGBA",(10,10),color=(255,255,255)) # 用來做子彈的影像
eimage = Image.new("RGBA",(20,40),color=(255,123,0))   # 用來做敵機的影像

root = Tk()                                       # 建視窗
cv = Canvas(width=800,height=600,bg='blue')       # 織畫布
cv.pack()                                         # 放畫布

# 紅色大方塊代表玩家飛機
player = GameTurtle(cv,Image.new("RGBA",(100,50),color='red'))

bullets=[]
enemis=[]
counter = 0

while True:
    mx,my = cv.mouse_pos()                        # 滑鼠指標

    if player.isalive():player.goto(mx,my)        # 沒死則移到滑鼠指標

    counter = counter + 1
    if counter % 10 == 0 and player.isalive() :   # 一定機率產生子彈
        GameTurtle(cv,bimage,pos=(mx,my),heading=-90,tag='zidan')
        x,y = randint(0,800),0
        GameTurtle(cv,eimage,pos=(x,y),heading=90,tag='diren') # 產生敵人

    bullets= group(cv,'zidan')                    # 所有的子彈
    [b.fd(10) for b in bullets]                   # 所有子彈移動
    [b.kill() for b in bullets if b.out_canvas()] # 超出畫布自刪

    enemis= group(cv,'diren')                     # 所有的敵人
    [e.fd(1) for e in enemis]                     # 所有敵人向下移動
    # 超出畫布範圍或者碰到子彈則刪除
    [e.kill() for e in enemis if e.out_canvas() or e.collide_tag('zidan')]
    if  player.isalive():
        if player.collide_color((255,123,0)):player.kill()
    cv.update()
    time.sleep(0.01)
本作品採用《CC 協議》,轉載必須註明作者和本文連結
python精靈模組

相關文章