python项目--飞机大战(第一阶段--未加子弹版)

在这里插入图片描述

import tkinter
import time
import random as rd
class plane1():
    #移动量
    #px代表图像的锚点,height代表图像的高度
    def __init__(self, px, py, height, width):
        self.pl1x = 0
        self.pl1y = 0
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义小飞机的图像
        self.imgpy1 = tkinter.PhotoImage(file="../img/飞机1.gif")

    # 小飞机移动
    def pl1_move(self):
        window_canvas.move("hero", self.pl1x, self.pl1y)
        self.pl1x = 0
        self.pl1y = 0
        window_canvas.after(100, self.pl1_move)
#飞机2的类
class plane2():
    #移动量
    #px代表图像的锚点,height代表图像的高度
    def __init__(self, px, py, height, width):
        self.pl2x = 0
        self.pl2y = 1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义小飞机的图像
        self.imgpy2 = tkinter.PhotoImage(file="../img/飞机2.gif")

    #小飞机移动
    def pl2_move(self):

        window_canvas.move("feiji2", self.pl2x, self.pl2y)
        # self.pl2y +=1
        window_canvas.after(100, self.pl2_move)

#飞机3的类
class plane3():
    #移动量
    def __init__(self, px, py, height, width):
        self.pl3x = 0
        self.pl3y = 1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义小飞机的图像
        self.imgpy3 = tkinter.PhotoImage(file="../img/飞机3.gif")

    #小飞机移动
    def pl3_move(self):

        window_canvas.move("feiji3", self.pl3x, self.pl3y)
        # self.pl3y +=1
        window_canvas.after(100, self.pl3_move)

#飞机4的类
class plane4():
    #移动量
    def __init__(self, px, py, height, width):
        self.pl4x = 1
        self.pl4y = 1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义飞机4的图像
        self.imgpy4 = tkinter.PhotoImage(file="../img/飞机4.gif")

    #飞机4移动
    def pl4_move(self):
        self.px +=self.pl4x
        self.py +=self.pl4y
        #进行碰壁检测
        if self.px >= 450:
            self.pl4x = -self.pl4x
            # print(self.pl4x)
        elif self.px <= 35:
            self.pl4x = -self.pl4x
            # print(self.pl4x)
        window_canvas.move("feiji4", self.pl4x, self.pl4y)
        # self.pl4y +=1
        window_canvas.after(100, self.pl4_move)
#天空类
class sky1():
    #移动量
    def __init__(self, px, py, height, width):
        self.skyx = 0
        self.skyy = 1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义天空的图像
        self.imgsky = tkinter.PhotoImage(file="../img/beijing.gif")

    #天空移动
    def sky1_move(self):

        self.py += self.skyy
        if self.py - 300 >= 600:
            self.py = -300
            window_canvas.move('bg', 0, -1197)

            print("123")
        else:
            window_canvas.move("bg", self.skyx, self.skyy)
            # self.skyy +=1
        window_canvas.after(100, self.sky1_move)
#天空类
class sky2():
    #移动量
    def __init__(self, px, py, height, width):
        self.sky2x = 0
        self.sky2y = 1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #定义天空的图像
        self.imgsky2 = tkinter.PhotoImage(file="../img/beijing.gif")

    #天空移动
    def sky2_move(self):

        self.py += self.sky2y
        if self.py - 300 >= 600:
            self.py = -300
            window_canvas.move('bg2', 0, -1197)

            print("345")
        else:
            window_canvas.move("bg2", self.sky2x, self.sky2y)
            # self.sky2y +=1
        window_canvas.after(100, self.sky2_move)
#子弹类
class Bullet():
    def __init__(self, px, py, height, width):
        self.bulletx = 0
        self.bullety = -1
        self.px = px
        self.py = py
        self.height = height
        self.width = width
        #bullet_list.append(self)
        # self.hero_x = hero_x
        # self.hero_y = hero_y

        self.img_bullet = tkinter.PhotoImage(file="../img/zidan.gif")
    def Bullet_move(self):

        window_canvas.move("zidan", self.bulletx, self.bullety)
        # self.pl2y +=1
        window_canvas.after(100, self.Bullet_move)



if __name__ == '__main__':
    root_window = tkinter.Tk()
    #设置窗口不可拉伸
    root_window.resizable(width=False, height=False)
    #创建画布
    window_canvas = tkinter.Canvas(root_window,width=480, height=600)
    window_canvas.pack()

    root_window.title('飞机大战')
    #在画布上画一个图片
    #要注意,photoimage只支持GIF格式的图片
    #画出背景
    # bg_img = tkinter.PhotoImage(file="../img/beijing.gif")
    # window_canvas.create_image(240, 300, anchor=tkinter.CENTER, image=bg_img, tags='bg')
    #天空实例化
    def sky_ss():
        sky_s = sky1(240, 300, 600, 480)
        window_canvas.create_image(sky_s.px, sky_s.py, anchor=tkinter.CENTER, image=sky_s.imgsky,
                                   tags='bg')
        sky_s.sky1_move()

    #天空实例化
    def sky2_ss():
        sky2_s = sky2(240, -300, 600, 480)
        window_canvas.create_image(sky2_s.px, sky2_s.py, anchor=tkinter.CENTER, image=sky2_s.imgsky2,
                                   tags='bg2')
        sky2_s.sky2_move()
    # 画出主飞机
    hero = plane1(250, 550, 30, 30)
    # 移动量
    def set_right(e):
        hero.pl1x += 5
    def set_left(e):
        hero.pl1x -= 5
    def set_up(e):
        hero.pl1y -= 5
    def set_down(e):
        hero.pl1y += 5
    #按键绑定
    root_window.bind('<Key-Left>',set_left)
    root_window.bind('<Key-Right>',set_right)
    root_window.bind('<Key-Up>',set_up)
    root_window.bind('<Key-Down>',set_down)
    def hero_s():

        window_canvas.create_image(hero.px, hero.py, anchor=tkinter.CENTER, image=hero.imgpy1,
                                   tags='hero')
        hero.pl1_move()
    #小飞机实例化
    def smallplane_s():
        smallplane = plane2(rd.randint(20,500),-30,20,20)
        window_canvas.create_image(smallplane.px, smallplane.py, anchor=tkinter.CENTER, image=smallplane.imgpy2, tags='feiji2')
        smallplane.pl2_move()
    #大飞机实例化
    def bigplane_s():
        bigplane = plane3(rd.randint(20,500), -30, 20, 20)
        window_canvas.create_image(bigplane.px, bigplane.py, anchor=tkinter.CENTER, image=bigplane.imgpy3,
                                   tags='feiji3')
        bigplane.pl3_move()
    #奖励飞机实例化
    def goodplane_s():
        goodplane = plane4(rd.randint(20,500), -30, 20, 20)
        window_canvas.create_image(goodplane.px, goodplane.py, anchor=tkinter.CENTER, image=goodplane.imgpy4,
                                   tags='feiji4')
        goodplane.pl4_move()
    #子弹实例化
    bullet = Bullet(240, 270, 10, 10)
    window_canvas.create_image(bullet.px, bullet.py, anchor=tkinter.CENTER, image=bullet.img_bullet,
                               tags='zidan')
    bullet.Bullet_move()
    #定义列表
    #子弹
    l_bullet = []

    for i in range(0,30):
        a = 'bullet'+str(i)
        b = Bullet(240, 270, 10, 10)
        l_bullet.append(b)
    def bullet_s():
        for i in l_bullet:
            #time.sleep(1)
            window_canvas.create_image(i.px, i.py, anchor=tkinter.CENTER, image=bullet.img_bullet,
                                       tags='zidan')
            i.Bullet_move()



    #
    # def photo():
    #     #
    #     # #画蜜蜂
    #     # bg_img_feiji4 = tkinter.PhotoImage(file="../img/飞机4.gif")
    #     # window_canvas.create_image(50, 50, anchor=tkinter.CENTER, image=bg_img_feiji4, tags='feiji4')
    #
    #     #让蜜蜂动起来
    #     ap_move()
    #     root_window.mainloop()
    # photo()

    #函数调用部分
    sky2_ss()
    sky_ss()
    smallplane_s()
    bigplane_s()
    goodplane_s()
    hero_s()
    bullet_s()
    root_window.mainloop()

部分素材图片:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42739047/article/details/84448090