Python 之pygame飞机游戏

import pygame
from pygame.locals import *
import time
import random

# 我机
class HeroPlane(object):
    def __init__(self, screen):
        # 设置飞机默认的位置
        self.x = 230
        self.y = 550
        # 设置要显示内容的窗口
        self.screen = screen
        # 用来保存英雄飞机需要的图片名字
        self.imageName = "./feiji/hero.gif"
        # 根据名字生成飞机图片
        self.image = pygame.image.load(self.imageName)
        # 用来保存英雄飞机发射出的所有子弹
        self.bullet = []

        # 爆炸效果用的如下属性
        self.hit = False  # 表示是否要爆炸
        self.bomb_list = []  # 用来存储爆炸时需要的图片
        self.__crate_images()  # 调用这个方法向bomb_list中添加图片
        self.image_num = 0  # 用来记录while True的次数,当次数达到一定值时才显示一张爆炸的图,然后清空,,当这个次数再次达到时,再显示下一个爆炸效果的图片
        self.image_index = 0  # 用来记录当前要显示的爆炸效果的图片的序号

    def __crate_images(self):
        self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n1.png"))
        self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n2.png"))
        self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n3.png"))
        self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n4.png"))

    def bomb(self):
        self.hit = True

    def display(self):
        if self.hit:
            self.screen.blit(self.bomb_list[self.image_index], (self.x, self.y))
            self.image_num += 1
            if self.image_num == 7:
                self.image_num = 0
                self.image_index += 1
            if self.image_index > 3:
                time.sleep(1)
                exit()  # 调用exit让游戏退出
        else:
            self.screen.blit(self.image, (self.x, self.y))
        # 用来存放需要删除的对象信息
        needDelItemList = []
        for b in self.bullet:
            b.display()
            b.move()
            if b.judge():
                needDelItemList.append(b)
        # 删除self.bulletL中需要删除的对象
        for i in needDelItemList:
            self.bullet.remove(i)

    def moveLeft(self):
        self.x -= 10

    def moveRight(self):
        self.x += 10

    def sheBullet(self):
        newBullet = Bullet(self.x, self.y, self.screen)
        self.bullet.append(newBullet)

# 子弹
class Bullet(object):
    def __init__(self, x, y, screen):
        self.x = x + 40
        self.y = y - 20
        self.screen = screen
        self.image = pygame.image.load("./feiji/bullet-3.gif")

    def move(self):
        self.y -= 20

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))

    # 判断子弹是否越界
    def judge(self):
        if self.y < 0:
            return True
        return False

# 敌机
class EnemyPlane(object):

    def __init__(self, screen):
        # 设置飞机默认的位置
        self.x = 0
        self.y = 0
        # 设置要显示内容的窗口
        self.screen = screen
        self.imageName = "./feiji/enemy-1.gif"
        self.image = pygame.image.load(self.imageName)
        # 用来存储敌人飞机发射的所有子弹
        self.bulletList = []
        self.direction = "right"

    def display(self):
        self.screen.blit(self.image, (self.x, self.y))
        # 存储待删除的子弹
        needDelItemList = []
        for b in self.bulletList:
            b.display()
            b.move()
            if b.judge():
                needDelItemList.append(b)
        # 删除self.bulletL中需要删除的对象
        for i in needDelItemList:
            self.bulletList.remove(i)

    def move(self):
        if self.direction == "right":
            self.x += 5
        elif self.direction == "left":
            self.x -= 5
        if self.x > 480 - 50:
            self.direction = "left"
        elif self.x < 0:
            self.direction = "right"

    # 敌机发射子弹
    def shot(self):
        random_num = random.randint(1, 100)
        if random_num == 10 or random_num == 20:
            EnemyNewBullet = EnemyBullet(self.x, self.y, self.screen)
            self.bulletList.append(EnemyNewBullet)

# 敌机子弹
class EnemyBullet(object):
    def __init__(self, x, y, screen):
        self.x = x + 22
        self.y = y + 40
        self.screen = screen
        self.image = pygame.image.load("./feiji/bullet1.png")

    # 移动子弹
    def move(self):
        self.y += 20

    # 显示子弹
    def display(self):
        self.screen.blit(self.image, (self.x, self.y))

    # 判断子弹是否越界
    def judge(self):
        if self.y > 650:
            return True
        return False

# 键盘监听
def key_control(plane):
    # 获取事件,比如按键等
    for event in pygame.event.get():
        # 判断是否是点击了退出按钮
        if event.type == QUIT:
            exit()
        # 判断是否是按下了键
        elif event.type == KEYDOWN:
            # 检测按键是否是a或者left
            if event.key == K_a or event.key == K_LEFT:
                plane.moveLeft()
            # 检测按键是否是d或者right
            elif event.key == K_d or event.key == K_RIGHT:
                plane.moveRight()

            # 检测按键是否是空格键
            elif event.key == K_SPACE:
                plane.sheBullet()
            elif event.key == K_b:
                plane.bomb()

def main():
    # 创建一个游戏窗口
    screen = pygame.display.set_mode((480, 650), 0, 32)
    # 创建背景图片
    background = pygame.image.load("./feiji/background.png")
    # 创建一个飞机对象
    plane = HeroPlane(screen)
    # 创建一个敌人飞机
    enemyPlane = EnemyPlane(screen)
    while True:
        # 将图片放到屏幕上
        screen.blit(background, (0, 0))
        # 显示我的飞机到屏幕
        plane.display()
        # 显示敌机到屏幕
        enemyPlane.display()
        # 移动敌机
        enemyPlane.move()
        # 敌机发射子弹
        enemyPlane.shot()
        # 更新显示
        pygame.display.update()
        # 监听键盘,控制我机
        key_control(plane)
        time.sleep(0.08)
    pass

if __name__ == ‘__main__‘:
    main()

原文地址:https://www.cnblogs.com/yang-2018/p/10888457.html

时间: 2024-08-30 16:14:03

Python 之pygame飞机游戏的相关文章

用Python和Pygame写游戏-从入门到精通(py2exe篇)

这次不是直接讲解下去,而是谈一下如何把我们写的游戏做成一个exe文件,这样一来,用户不需要安装python就可以玩了.扫清了游戏发布一大障碍啊! perl,python,java等编程语言,非常好用,语法优美,功能强大:VB啥的,功能上编写的时候总有那么点不舒服的地方(个人见解),可是用户和受众极多,一个很大的原因就是:VB是微软提供的,可以很方便的编译(伪?)生成exe文件.有了exe,所有的Windows都能方便的使用了. 我们不能指望用户在玩我们的游戏之前都安装一个python和pygam

python学习笔记(七) 类和pygame实现打飞机游戏

python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = score def printinfo(self): print('name is %s, score is %d'%(self.name, self.score)) Student类有两个成员变量,name和score,类的成员函数第一个参数都为self,用来实现成员变量的赋值,__init__是

pygame开发PC端微信打飞机游戏

pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件game.py形式完成,只需要运行python game.py就可以进入游戏. 游戏最终效果截图如下: 2. 知识点 本实验中将介绍在Linux桌面环境下使用Python及pygame快速开发小游戏的方式.可以通过这个游戏入门pygame游戏开发. 3. 参考文档 代码参考 Kill-Console写的P

Python和Pygame游戏开发 pdf

Python和Pygame游戏开发 目录 第1章 安装Python和Pygame 11.1 预备知识 11.2 下载和安装Python 11.3 Windows下的安装说明 11.4 Mac OS X上的安装说明 21.5 Ubuntu和Linux上的安装说明 21.6 启动Python 21.7 安装Pygame 31.8 如何阅读本书 41.9 特色的程序 41.10 下载图形文件和声音文件 41.11 行号和空格 41.12 图书中的文本折行 51.13 在线检查代码 51.14 配套网站

Python制作的射击游戏

如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作为英雄,需要在城堡里抵御獾的进攻. 为了写这个游戏的代码,你将会用Python.好吧,我不是指一条大蟒蛇! Python是一种计算机语言.我们在这篇教程里选择Python是因为这门语言很容易上手,学习起来也很简单和有趣. 如果你是个Python方面的新手,在开始看教程之前你可以看看这本书< Think

python的pygame模拟太阳-地球-月亮-金星等动态示意图代码分析

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6268/ 1.太阳系 2.今天来模拟太阳系的运动的行星,用python3和pygame来制作. 3.第1步: #---第1步---导出模块--- import pygame import sys import math from pygame.locals import * 4.第2步: #---第2步---游戏初始化--- pygame.init() 5.第3步: #---第3步---定义颜色---

13.1-全栈Java笔记:打飞机游戏实战项目|AWT技术|MyGameFrame

简介和项目目标 通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用. 比如:多线程用来实现动画效果.容器实现对于多发炮弹的存取和处理.常用类等等的应用. 寓教于乐,让大家迅速入门,更希望通过喜闻乐见的小游戏,让大家爱上编程,爱上"程序员". 老鸟建议 很多朋友会疑惑:"游戏项目,又不能拿到企业面试中,为什么要讲?" 这是一种太过于功利的想法.就像,我们说:"今天吃个馒头,又不是长高,为什么要吃呢?" 游戏项目的

C语言应用-飞机游戏

在第一次的C语言程序设计课上我们第一次接触到将近200行程序的大型程序.即使现在已经将这个程序分析的十分清楚,但是每次看到这么多的程序还是令我感到头痛不已. 这个大型的程序是一个基础的飞机类型的游戏.虽然比我们现在手机上.电脑上玩的游戏要简陋不止几百倍而且由于它是利用C语言的循环语句进行输出所以在玩的时候总是在不停地闪烁使人有些头晕.但我还是觉得异常有趣. printf这个函数在这个飞机游戏中用来显示和输出整个游戏.发现printf这个函数不仅仅是用来简单的输出,还可以配合getch()这个函数

关于《飞机游戏软件:C语言应用初步感受》的感想

C语言课程设计的第一节课,老师提供了一个C语言的飞机游戏让我们感受. 首先安装c-free,然后是将代码贴进去运行, 界面虽然有点简单,但是真正的游戏,C语言还能做这么有意思的东西,真是没有想到. 这是第一次认为C语言是个神奇的语言,竟然可以编写出游戏来. 用到的语句也很简单. 比如:#include<stdio.h>等,都是以前学过的知识,真的是想要好好学习一下C语言,争取自己编写个小程序出来.