用python来做一个小小的飞机大战软件,(有点长但是很有用)

用python来做一个小小的飞机大战软件,(有点长但是很有用),第1张

目录

要用的头文件

初始化部分

游戏运行的主体

完整代码



要是有完善的我会及时发出来的

开始界面

 点击开始游戏会进入游戏了

点击退出会退出游戏

 飞机的图片是来自于百度,自己用画图软件扣下来

要用的头文件
import pygame,sys  #引入pygame库
import pygame.freetype  #用于后面胜利字体
初始化部分

将飞机,子d初始化,以及将屏幕初始化
可能大家会问那些飞机的图片应该放在哪里就放在代码所在的目录的

如下图 

可能大家输入的时候会出现一种情况

.jpg后面没有(分辨率)这种情况

解决方法:用画图软件处理一下并保存就可以使用了

size = width, height = 700, 900     #用size去存储分辨率易于修改
speed = [1, 0]                      #敌机的速度设置,可自行调整
BLACK = 0, 0, 0                     #记录黑色的数据
screen = pygame.display.set_mode(size) #初始化屏幕size就是上面的size

pygame.display.set_caption("飞机大战")   #标题名称

aplane = pygame.image.load("mainplane.jpg")   #自己的飞机图片导入

plane2 =pygame.image.load("plane22.jpg")      #敌机图片导入

zd = pygame.image.load("zd.png")             #子d的图片导入

fps = 300                                   #刷新率
fclock = pygame.time.Clock()
kill =1                                    #记录击中次数
aplanemave = aplane.get_rect()            #用于接受动作
aplanemave.bottom = 700                  #初始化位置
aplanemave.right = 400
#如上
plane2_move = plane2.get_rect()

zd_move = zd.get_rect()

GOLD = 255, 251, 0
游戏运行的主体


因为不只只是只动一次所以用while循环,所以需要用一个来退出循环如右上角的红叉叉

while True:
    for event in pygame.event.get():       #接收 *** 作
        if event.type == pygame.QUIT:      #点右上角的叉叉即是退出游戏
            sys.exit()
        elif event.type ==pygame.KEYDOWN:  #接收键盘的事件飞机的上下左右和开火事件
            if event.key == pygame.K_LEFT:
                aplanemave = aplanemave.move(-40,0)
            elif event.key ==pygame.K_RIGHT:
                aplanemave = aplanemave.move(40,0)
            elif event.key == pygame.K_UP:
                aplanemave  = aplanemave.move(0,-40)
            elif event.key ==pygame.K_DOWN:
                aplanemave = aplanemave.move(0,40)
            elif event.key == pygame.K_SPACE:       #初始化子d位置
                zd_move.right = (aplanemave.right+aplanemave.left)/2
                zd_move.bottom = (aplanemave.bottom+aplanemave.top)/2


            if zd_move.right<=plane2_move.right and zd_move.left>plane2_move.left:#击中
                kill =kill +1
                print(kill)

    plane2_move = plane2_move.move(speed)#敌机运动左右移动
    if zd_move.top >=-100:
                zd_move = zd_move.move(0, -40)
    if plane2_move.left < 0 or plane2_move.right > width:
        speed[0] =- speed[0]
    """
    将所有的元素投到屏幕上
    """
    screen.fill("grey")#设置背景色

    screen.blit(zd, zd_move)
    screen.blit(plane2, plane2_move)

    screen.blit(aplane, aplanemave)
    pygame.display.update()
    fclock.tick(fps)
    if kill>=30:
        break;

GOLD = 255, 251, 0
f1 = pygame.freetype.Font('msyh.ttc', 36) #微软雅黑
f1rect = f1.render_to(screen, (150,450), "恭喜你赢了,谢谢您的这次体验,from PH", fgcolor=GOLD, size=20)#初始化文字
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.display.update()

因为字体文件我把它调到根目录了使用就要在代码的地方放一个msyh.ttc文件

完整代码

1,没有开始菜单的代码

import pygame,sys  #引入pygame库
import pygame.freetype  #用于后面胜利字体
pygame.init()           #初始化pygame

"""
初始化部分将飞机,子d初始化,以及将屏幕初始化
"""

size = width, height = 700, 900     #用size去存储分辨率易于修改
speed = [1, 0]                      #敌机的速度设置,可自行调整
BLACK = 0, 0, 0                     #记录黑色的数据
screen = pygame.display.set_mode(size) #初始化屏幕size就是上面的size

pygame.display.set_caption("飞机大战")   #标题名称

aplane = pygame.image.load("mainplane.jpg")   #自己的飞机图片导入

plane2 =pygame.image.load("plane22.jpg")      #敌机图片导入

zd = pygame.image.load("zd.png")             #子d的图片导入

fps = 300                                   #刷新率
fclock = pygame.time.Clock()
kill =1                                    #记录击中次数
aplanemave = aplane.get_rect()            #用于接受动作
aplanemave.bottom = 700                  #初始化位置
aplanemave.right = 400
#如上
plane2_move = plane2.get_rect()

zd_move = zd.get_rect()

GOLD = 255, 251, 0
"""
游戏运行的主体因为不只只是只动一次所以用while循环所以需要用一个来退出循环 
"""
while True:
    for event in pygame.event.get():       #接收 *** 作
        if event.type == pygame.QUIT:      #点右上角的叉叉即是退出游戏
            sys.exit()
        elif event.type ==pygame.KEYDOWN:  #接收键盘的事件飞机的上下左右和开火事件
            if event.key == pygame.K_LEFT:
                aplanemave = aplanemave.move(-40,0)
            elif event.key ==pygame.K_RIGHT:
                aplanemave = aplanemave.move(40,0)
            elif event.key == pygame.K_UP:
                aplanemave  = aplanemave.move(0,-40)
            elif event.key ==pygame.K_DOWN:
                aplanemave = aplanemave.move(0,40)
            elif event.key == pygame.K_SPACE:       #初始化子d位置
                zd_move.right = (aplanemave.right+aplanemave.left)/2
                zd_move.bottom = (aplanemave.bottom+aplanemave.top)/2


            if zd_move.right<=plane2_move.right and zd_move.left>plane2_move.left:#击中
                kill =kill +1
                print(kill)

    plane2_move = plane2_move.move(speed)#敌机运动左右移动
    if zd_move.top >=-100:
                zd_move = zd_move.move(0, -40)
    if plane2_move.left < 0 or plane2_move.right > width:
        speed[0] =- speed[0]
    """
    将所有的元素投到屏幕上
    """
    screen.fill("grey")#设置背景色

    screen.blit(zd, zd_move)
    screen.blit(plane2, plane2_move)
    
    screen.blit(aplane, aplanemave)
    pygame.display.update()
    fclock.tick(fps)
    if kill>=30:
        break;

GOLD = 255, 251, 0
f1 = pygame.freetype.Font('msyh.ttc', 36) #微软雅黑
f1rect = f1.render_to(screen, (150,450), "恭喜你赢了,谢谢您的这次体验,from PH", fgcolor=GOLD, size=20)#初始化文字
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.display.update()

有开始菜单的代码

import pygame, sys  # 引入pygame库
import pygame.freetype  # 用于后面胜利字体
import tkinter as tk

pygame.init()  # 初始化pygame


"""
初始化部分将飞机,子d初始化,以及将屏幕初始化
"""

size = width, height = 700, 900  # 用size去存储分辨率易于修改
speed = [1, 0]  # 敌机的速度设置,可自行调整
BLACK = 0, 0, 0  # 记录黑色的数据
screen = pygame.display.set_mode(size)  # 初始化屏幕size就是上面的size

pygame.display.set_caption("飞机大战")  # 标题名称

aplane = pygame.image.load("mainplane.jpg")  # 自己的飞机图片导入

plane2 = pygame.image.load("plane22.jpg")  # 敌机图片导入

zd = pygame.image.load("zd.png")  # 子d的图片导入

button1 = pygame.image.load("select1.png")

button2 = pygame.image.load("select2.png")
button3 = pygame.image.load("select3.png")
button1_react = button1.get_rect()
button2_react = button2.get_rect()
button3_react = button3.get_rect()
button1_react.left = 220
button1_react.top = 200
button2_react.left = 220
button2_react.top = 400
button3_react.left = 220
button3_react.top = 600
fps = 300  # 刷新率
fclock = pygame.time.Clock()
kill = 1  # 记录击中次数
aplanemave = aplane.get_rect()  # 用于接受动作
aplanemave.bottom = 700  # 初始化位置
aplanemave.right = 400
# 如上
plane2_move = plane2.get_rect()

zd_move = zd.get_rect()

GOLD = 255, 251, 0
"""
游戏运行的主体因为不只只是只动一次所以用while循环所以需要用一个来退出循环 
"""
while True:
    i = 1
    for event in pygame.event.get():  # 接收 *** 作
        if event.type == pygame.QUIT:  # 点右上角的叉叉即是退出游戏
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if ((event.pos[0] >= button1_react.left) and (event.pos[1] <= button1_react.bottom) and (
                    event.pos[0] <= button1_react.right) and (event.pos[1] >= button1_react.top)):
                i = 0
            elif ((event.pos[0] >= button3_react.left) and (event.pos[1] <= button3_react.bottom) and (
                    event.pos[0] <= button3_react.right) and (event.pos[1] >= button3_react.top)):
                sys.exit()

    screen.blit(button1, button1_react)
    screen.blit(button2, button2_react)
    screen.blit(button3, button3_react)
    pygame.display.update()
    fclock.tick(fps)
    if i == 0:
        break

while True:
    for event in pygame.event.get():  # 接收 *** 作
        if event.type == pygame.QUIT:  # 点右上角的叉叉即是退出游戏
            sys.exit()
        elif event.type == pygame.KEYDOWN:  # 接收键盘的事件飞机的上下左右和开火事件
            if event.key == pygame.K_LEFT:
                aplanemave = aplanemave.move(-40, 0)
            elif event.key == pygame.K_RIGHT:
                aplanemave = aplanemave.move(40, 0)
            elif event.key == pygame.K_UP:
                aplanemave = aplanemave.move(0, -40)
            elif event.key == pygame.K_DOWN:
                aplanemave = aplanemave.move(0, 40)
            elif event.key == pygame.K_SPACE:  # 初始化子d位置
                zd_move.right = (aplanemave.right + aplanemave.left) / 2
                zd_move.bottom = (aplanemave.bottom + aplanemave.top) / 2

            if zd_move.right <= plane2_move.right and zd_move.left > plane2_move.left:  # 击中
                kill = kill + 1
                print(kill)

    plane2_move = plane2_move.move(speed)  # 敌机运动左右移动
    if zd_move.top >= -100:
        zd_move = zd_move.move(0, -40)
    if plane2_move.left < 0 or plane2_move.right > width:
        speed[0] = - speed[0]
    """
    将所有的元素投到屏幕上
    """
    screen.fill("grey")  # 设置背景色

    screen.blit(zd, zd_move)
    screen.blit(plane2, plane2_move)

    screen.blit(aplane, aplanemave)
    pygame.display.update()
    fclock.tick(fps)
    if kill >= 30:
        break;

GOLD = 255, 251, 0
f1 = pygame.freetype.Font('msyh.ttc', 36)  # 微软雅黑
f1rect = f1.render_to(screen, (100, 450), f"恭喜你赢了刚刚击中了{kill}次飞机,谢谢您的这次体验,from PH", fgcolor=GOLD, size=20)  # 初始化文字
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.display.update()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/923240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存