python小游戏开发(飞机大战)

这篇具有很好参考价值的文章主要介绍了python小游戏开发(飞机大战)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:背景      

1. pygame 模块初识

二.项目设计内容

开发一款飞机大战游戏,要求:

(1)实现飞机的移动、子弹发射,对本次游戏有一个初步的编写及认识。

(2)飞机的持续按键移动和飞机自爆优化。

(3)进行基类的抽取,使代码更具有层次性和简化重复代码。

(4)对判断以及删除越界子弹、敌机发射子弹进行扩展优化。

三.附源代码

四.程序运行效果:

五. 扩展


一:背景      

        这款游戏的名字叫《飞机大战》,是使用Python开发的纵版飞行射击类游戏.Python是一种面向对象的解释型计算机程序设计语言,具有简单易学,可移植,可拓展等特点.并且拥有丰富的资源.在图形处理,数字处理,网络编程等方面有广泛用途.这个游戏利用了Python的pygame模块,射击了子弹,飞机类的相关方法和属性,进行了背景贴图,实现了飞机大战游戏的功能。

此项目主要借助python的第三方库pygame以及面向对象思维进行开发。纯面向过程实现的简单操作可移步到之前发的文章:http://t.csdn.cn/w7dXf

1. pygame 模块初识

1.1游戏的初始化和退出:

方法 含义
pygame.init() 导入并初始化所有pygame模块,使用其他模块之前,必须先调用init方法
pygame.quit() 卸载所有pygame模块,在游戏结束之前调用

1.2补充知识(使用rect 描述飞机大战英雄机的位置)

        1.2.1Rect是用于存储矩形坐标的pygame对象,rect对象有一些虚拟属性,比如top,left,bottom,right这些是用来固定矩形的位置的,还有size,width,height,这些是描述矩形大小,宽高分别是多大。
center为矩形的中心点,其实就是关于横纵坐标的二元组,因此又有centerx,centery两个属性。此外,还有x,y。

1.2.2Rect构造方法:
rect = pygame.Rect( left , top, width, height )

二.项目设计内容

开发一款飞机大战游戏,要求:

(1)实现飞机的移动、子弹发射,对本次游戏有一个初步的编写及认识。
(2)飞机的持续按键移动和飞机自爆优化。
(3)进行基类的抽取,使代码更具有层次性和简化重复代码。
(4)对判断以及删除越界子弹、敌机发射子弹进行扩展优化。

三.附源代码

编程思路:主要使用pygame库,类的创建,函数的调用等等来实现;相关代码如下:

import pygame
from pygame.locals import *
import random

#面向对象实现
#创建玩家英雄飞机
class HeroPlane(object):
    def __init__(self,create):
        '''
        初始化函数
        :param create:创建一个窗口界面
        '''
        #设置飞机的默认位置
        self.x=250
        self.y=625

        #设置要显示内容的窗口
        self.create=create

        #生成玩家飞机图片
        self.imageName='./sucai/飞机_英雄.gif'
        self.image=pygame.image.load(self.imageName)

        #存放子弹列表
        self.bulletList=[]
        pass
    pass
    def moveleft(self):
        '''
        左移动
        :return:
        '''
        if self.x>=0:
            self.x-=30
        pass
    def moveright(self):
        '''
        又移动
        :return:
        '''
        if self.x<=535:
            self.x+=30
            pass
        pass
    def dispaly(self):
        '''
        在主窗口显示飞机
        :return:
        '''
        self.create.blit(self.image,(self.x,self.y))

        #完善子弹的展示逻辑(对于越界的子弹进行捕获删除)
        NeedDelItemList=[]
        for item in self.bulletList:
            if item.judge():     #如果为真(越界)捕获
                NeedDelItemList.append(item)
                pass
            pass
        # 双重遍历
        for i in NeedDelItemList:
            self.bulletList.remove(i)     #将捕获到的子弹进行删除
            pass
        for bullet in self.bulletList:
            bullet.display()          #展示子弹
            bullet.move()            #调用子弹移动的函数
            pass
        pass

    # 定义一个发射子弹函数(行为 动作)
    def FaSheBullet(self):
        # 创建一个新的子弹对象(获取子弹并进行追加到列表)
        NewBullet = Bullet(self.x, self.y, self.create)
        self.bulletList.append(NewBullet)
        pass
    pass

#创建玩家飞机发射的子弹对象类
class Bullet(object):
    def __init__(self,x,y,create):
        '''
        :param x: 子弹默认位置
        :param y:  子弹默认位置
        :param create:   窗口
        '''
        self.x=x+15       #基于飞机的位置对发射的飞机原始位置进行定位调整
        self.y=y-10
        self.create=create
        self.image=pygame.image.load('./sucai/飞机子弹.png')
        pass
    def display(self):
        self.create.blit(self.image,(self.x,self.y))
        pass
    def move(self):
        self.y-=0.5       #控制飞机子弹发射的速度
        pass
    def judge(self):
        '''
        判断子弹是否越界  TRUE为真
        :return:
        '''
        if self.y<0:
            return True
        else:
            return False
        pass
    pass

#创建敌机对象
class EnemyPlane(object):
    def __init__(self,create):
        # 设置敌方飞机的默认位置
        self.x =30
        self.y =-110

        # 设置要显示内容的窗口
        self.create = create

        # 设置一个默认的敌方飞机子弹方向
        self.direction = 'right'

        # 生成敌人飞机图片
        self.imageName = './sucai/敌人.png'
        self.image = pygame.image.load(self.imageName)
        pass
    def display(self):
        self.create.blit(self.image,(self.x,self.y))
        # 存放敌方子弹列表
        self.bulletList=[]
        # 完善子弹的展示逻辑(对于越界的子弹进行捕获删除)
        NeedDelItemList = []
        for item in self.bulletList:
            if item.judge():  # 如果为真(越界)捕获
                NeedDelItemList.append(item)
                pass
            pass
        pass
        # 双重遍历
        for i in NeedDelItemList:
            self.bulletList.remove(i)  # 将捕获到的子弹进行删除
            pass
        for bullet in self.bulletList:
            bullet.display()  # 展示子弹
            bullet.move()  # 调用子弹移动的函数
            pass
        pass
    # 定义一个发射子弹函数(行为 动作)
    def FaSheBullet(self):
        '''
        创建一个敌方发射子弹的函数(行为、动作)
        :return:
        '''
        num = random.randint(1, 5)       #随机发射
        if num == 3:
            newBullet=EnemyBullet(self.x,self.y,self.create)
            # self.bulletList.append(NewBullet)
            self.bulletList.append(newBullet)
        pass
    pass
    def move(self):
        # self.y += 0.5  # 控制敌人飞机子弹发射的速度
        if self.direction == 'right':  # 敌方随机移动
            self.x += 0.2
            pass
        elif self.direction=='left':
            self.x -= 0.2
            pass
        # 越界情况处理
        if self.x > 300:
            self.direction ='left'       #对于越界情况 进行坐标的赋值   而不是判断==
            pass
        elif self.x < -200:
            self.direction ='right'
        pass
    pass

#创建敌方飞机子弹对象
class EnemyBullet(object):
    def __init__(self,x,y,create):
        '''
        :param x: 子弹默认位置
        :param y:  子弹默认位置
        :param create:   窗口
        '''
        self.x =0  # 基于敌方飞机的位置对发射的飞机原始位置进行定位调整
        self.y =0
        self.create = create
        # self.image = pygame.image.load('./sucai/敌人子弹.png')
        self.image=pygame.image.load('./sucai/敌人子弹.png')
        pass
    def display(self):
        # self.create.blit(self.image,(self.x, self.y))
        self.create.blit(self.image,(self.x,self.y))
        pass
    def judge(self):
        '''
        判断子弹是否越界  TRUE为真
        :return:
        '''
        if self.y>700:
            return True
        else:
            return False
        pass
        pass
    pass

#控制键盘的检测
def key_control(HeroPlane):
    #创建键盘事件
    # 获取键盘事件
    eventlist=pygame.event.get()
    # eventlist = pygame.event.get()
    for event in eventlist:
        if event.type == QUIT:
            print('程序退出!')
            exit()
            pass
        elif event.type == KEYDOWN:
            if event.key == K_a or event.key == K_LEFT:
                # A D 键盘按钮为大写
                print('left')  # 左键
                HeroPlane.moveleft()      #直接调用继承的父类中的方法(函数)从而实现对加键盘事件的控制
            elif event.key == K_d or event.key == K_RIGHT:
                print('right')  # 右键
                HeroPlane.moveright()
                pass
            elif event.key == K_SPACE:
                print('空格键:发射飞机子弹')  # 空键
                HeroPlane.FaSheBullet()
            pass
    pass


#面向过程
def main():
    # 创建一个窗口
    create=pygame.display.set_mode((600,700),depth=100)

    # 设定一个背景图
    background=pygame.image.load('./sucai/背景图.jpg')
    # 设计一个小标题
    pygame.display.set_caption('全民飞机大战')

    # 创建一个飞机对象
    hero = HeroPlane(create)

    #创建一个敌人飞机对象
    enemyplane=EnemyPlane(create)


    # 设计背景音乐
    pygame.mixer.init()
    pygame.mixer.music.load('./sucai/全民飞机大战游戏音乐.mp3')
    pygame.mixer.music.set_volume(0.3)       #自定义设置音量
    pygame.mixer.music.play(-1)   #-1表示无限循环

    # 显示玩家对象
    # 循环刷新
    while True:
        #显示背景图片
        create.blit(background,(0,0))

        #显示玩家对象
        # create.blit(hero,(x,y))
        hero.dispaly()

        #显示敌人飞机对象
        enemyplane.display()
        #调用函数
        enemyplane.move()      #随机移动敌机

        enemyplane.FaSheBullet()    #发射子弹
        #获取键盘事件
        key_control(hero)
        # 更新显示内容
        pygame.display.update()
        pass
    # pass
if __name__ == '__main__':
    main()

四.程序运行效果:

python编写飞机大战,玩转python,pygame,python

五. 扩展

本文只针对 pygame 模块中一些简单的功能进行介绍,实际上 pygame 还拥有很多强大的功能,若有兴趣学习的可以参考下述文章:

pygame官网:https://www.pygame.org/news

pygame官网文档:https://www.pygame.org/docs/

最后:今天给大家分享的飞机大战小游戏到这里就结束了,源代码放在上面了,喜欢的小伙伴就拿去练练手吧。

 文章来源地址https://www.toymoban.com/news/detail-604710.html

到了这里,关于python小游戏开发(飞机大战)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用python写(飞机大战小游戏)

    w\\\'cwc下面我们进入详细教程:   一、首先我们先建一个文件夹 planewars(名字随便取):  然后用我们python中的pycharm打开这个文件,我们飞机大战的项目就在这进行 二、我们要写这个小游戏要用到pygame模         补充: Pygame是一个利用SDL库的写就的游戏库,Pygame就是Python中使用

    2024年02月09日
    浏览(51)
  • 使用Python制作的小游戏---飞机大战

    1.pygame模块 1. 熟悉Python面向对象编程的方法和套路 1.敌机模块 2. 地图模块 3. 得分模块 4 .英雄飞机模块 5. 子弹模块 6. 主模块

    2024年02月03日
    浏览(48)
  • pygame飞机大战小游戏(python大作业)

      python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的《Python编程 从入门到实践》中的一个项目,学习模仿。 二、游戏具体介绍 这是一款由辉辉亲自打造的太空对战小游戏。 游戏背景:在广袤无垠的太空里有一群蓝精灵(不是)有一群邪恶的坏人,

    2024年02月11日
    浏览(58)
  • python小游戏毕设 飞机大战设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 飞机大战小游戏设计与实现 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:3分 利用Python制作的一个简易版类\\\"飞机大

    2024年02月10日
    浏览(57)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(54)
  • 前端技术搭建飞机大战小游戏(内含源码)

    上周我们实通过前端基础实现了弹珠游戏,当然很多伙伴再评论区提出了想法,后续我们会考虑实现的,今天还是继续按照我们原定的节奏来带领大家完成一个飞机大战游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的

    2024年02月04日
    浏览(52)
  • python人机大战小游戏代码

    2024年02月14日
    浏览(50)
  • python项目分享 - python坦克大战小游戏

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 坦克大战小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取:

    2024年02月03日
    浏览(46)
  • python小游戏毕设 坦克大战游戏设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 坦克大战小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 《坦克大战》

    2024年02月05日
    浏览(65)
  • 毕业设计 python坦克大战小游戏

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 坦克大战小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取:

    2024年02月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包