'''
新手刚学python,仿着老师敲的代码。
1、敌方飞机只能左右徘徊(不会往下跑)并且不会发射子弹。
2、正在研究怎么写计分。
3、也参考了不少大佬的代码,但也仅仅只是参考了。
加油!
'''

import pygame
from pygame.locals import *
import time

# 子弹类
class Bullet(object):
# 初始化子弹属性:xy坐标、窗口、子弹图片
def __init__(self, screen_temp, x, y):
self.x = x--18
self.y = y-15
self.screen = screen_temp
self.image = pygame.image.load("zd.png")
# 子弹显示
def display(self):
self.screen.blit(self.image, (self.x, self.y))
# 子弹移动,y -= 10
def move(self):
self.y -= 10
# 判断子弹是否越界
def judge(self):
if self.y < 0:
return True
else:
return False

# 玩家飞机类
class Aircraft_obj(object):
# 初始化玩家飞机属性:坐标、窗口、子弹列表对象
def __init__(self, screen_temp):
self.x = 190
self.y = 650
self.screen = screen_temp
self.image = pygame.image.load("FeiJi.jpeg")
self.bullet_list = []
# 显示玩家飞机图片,for循环显示发射子弹,如越界则删除子弹
def display(self):
self.screen.blit(self.image, (self.x, self.y))
for bullet in self.bullet_list:
bullet.display()
bullet.move()
if bullet.judge():
self.bullet_list.remove(bullet)
# 玩家飞机移动
def move_left(self):
if self.x < 10:
pass
else:
self.x -= 10
def move_right(self):
if self.x > 480-100-10:
pass
else:
self.x += 10
def move_up(self):
if self.y < 10:
pass
else:
self.y -= 10
def move_down(self):
if self.y > 650:
pass
else:
self.y += 10
# 将子弹储存在发射列表中
def fire(self):
self.bullet_list.append(Bullet(self.screen, self.x, self.y))
# 敌机类
class EnemyPlane(object):
# 初始化敌机属性:坐标、窗口、图片、移动反向、是否爆炸、爆炸图片列表
def __init__(self, screen_temp, x, y):
self.x = x
self.y = y
self.screen = screen_temp
self.image = pygame.image.load("DiJi.jpg")
self.direction = 'right'
self.hit = False
self.bomb_lists = []
self.__crate_images()
self.image_num = 0
self.image_index = 0
# 敌机左右移动
def move(self):
if self.hit == True:
pass
else:
if self.direction == 'right':
self.x += 5
elif self.direction == 'left':
self.x -= 5
if self.x > 420-50:
self.direction = 'left'
elif self.x < 0:
self.direction = 'right'
# 添加爆炸图片列表
def __crate_images(self):
self.bomb_lists.append(pygame.image.load("baozha.png"))
self.bomb_lists.append(pygame.image.load("baozha.png"))
self.bomb_lists.append(pygame.image.load("baozha.png"))
self.bomb_lists.append(pygame.image.load("baozha.png"))
# 判断是否爆炸
def blast(self, x1, x2, y):
if((x1>=self.x and x2<=self.x+51) or x2==self.x or x1==self.x+51) and y<39:
self.hit = True
# 显示爆炸效果或正常图片,利用循环和sleep()暂停让用户看清
def display(self):
if self.hit == True:
self.screen.blit(self.bomb_lists[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:
# 暂停1秒
time.sleep(1)
exit()
else:
self.screen.blit(self.image, (self.x, self.y))
# 检查键盘输入函数
def key_control(aircraft_temp):
for event in pygame.event.get():
# 退出
if event.type == QUIT:
print("exit")
exit()
# 键盘按下事件
elif event.type == KEYDOWN:
# 按下a或←,调用玩家飞机向左移动方法
if event.key == K_a or event.key == K_LEFT:
print("left")
aircraft_temp.move_left()
# 按下d或→,,调用玩家飞机发射子弹方法
elif event.key == K_d or event.key == K_RIGHT:
print("right")
aircraft_temp.move_right()

elif event.key == K_w or event.key == K_UP:
print("up")
aircraft_temp.move_up()
# 按下d或→,,调用玩家飞机发射子弹方法
elif event.key == K_s or event.key == K_DOWN:
print("down")
aircraft_temp.move_down()

# 按下空格,调用玩家飞机发射子弹方法
elif event.key == K_SPACE:
print("space")
aircraft_temp.fire()
# 得分系统
def score():
pass

# 主函数
def main():
pygame.init()
pygame.display.set_caption("飞机大战")
screen = pygame.display.set_mode((420,700), 0, 32)
background = pygame.image.load('bj.png')

# 创建玩家飞机对象
aircraft = Aircraft_obj(screen)
enemy = EnemyPlane(screen,0,0)
enemy2 = EnemyPlane(screen,100,0)

# 游戏音效
sound = pygame.mixer.Sound("时光洪流.mp3")
sound.play()
pygame.mixer.music.load("时光洪流.mp3")
pygame.mixer.music.play(-1, 0.0)

while True:
screen.blit(background, (0, 0))
aircraft.display()
# 遍历子弹,找到坐标,判断是否与敌机相逢
for bullet in aircraft.bullet_list:
x1 = bullet.x
x2 = bullet.x+22
y1 = bullet.y
enemy.blast(x1, x2, y1)
enemy.display()
enemy2.display()
enemy.move()
enemy2.move()
pygame.display.update()
key_control(aircraft)
# 暂停0.01秒
time.sleep(0.01)
main()



python飞机大战的更多相关文章

  1. Python飞机大战实例有感——pygame如何实现“切歌”以及多曲重奏?

    目录 pygame如何实现"切歌"以及多曲重奏? 一.pygame实现切歌 初始化路径 尝试一 尝试二 尝试三 成功 总结 二.如何在python多线程顺序执行的情况下实现音乐和音 ...

  2. python 飞机大战 实例

    飞机大战 #coding=utf-8 import pygame from pygame.locals import * import time import random class Base(ob ...

  3. python飞机大战简单实现

    小游戏飞机大战的简单代码实现: # 定义敌机类 class Enemy: def restart(self): # 重置敌机的位置和速度 self.x = random.randint(50, 400 ...

  4. python飞机大战代码

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

  5. 小甲鱼python基础教程飞机大战源码及素材

    百度了半天小甲鱼python飞机大战的源码和素材,搜出一堆不知道是什么玩意儿的玩意儿. 最终还是自己对着视频一行行代码敲出来. 需要的同学点下面的链接自取. 下载

  6. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  7. 一、利用Python编写飞机大战游戏-面向对象设计思想

    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...

  8. Python版飞机大战

    前面学了java用java写了飞机大战这次学完python基础后写了个python版的飞机大战,有兴趣的可以看下. 父类是飞行物类是所有对象的父类,setting里面是需要加载的图片,你可以换称自己的 ...

  9. Python之游戏开发-飞机大战

    Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...

随机推荐

  1. Noip模拟58 2021.9.21(中秋祭&&换机房祭)

    第一次在学校过中秋节,给家里人视频电话,感觉快回家了很开心, 然后还吃了汉堡喝饮料非常爽,颓废了一会儿还换了新机房,$Linux2.0$非常dei,少爷机也非常快, 发现好像测评机又成了老爷机,这就是 ...

  2. 万能构造解决Rolle中值问题

    只要原函数是两个函数的乘积形式,皆可此构造.

  3. Nginx(三):Linux环境(Ubuntu)下Nginx的安装

    Nginx 是一位俄罗斯人 Igor Sysoev(伊戈尔·塞索斯夫)编写的一款高性能HTTP和反向代理服务器. Nginx 主要是有C编写的,安装Nginx需要GCC编译器(GNU Compiler ...

  4. 清除行列 牛客网 程序员面试金典 C++ Python

    清除行列 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的 ...

  5. Python 类似 SyntaxError: Non-ASCII character '\xc3' in file

    Python 类似 SyntaxError: Non-ASCII character '\xc3' in file 产生这个问题的原因: python 的默认编码文件是ACSII,而编辑器将文件保存为 ...

  6. hdu 2189 来生一起走(DP)

    题意: 有N个志愿者.指挥部需要将他们分成若干组,但要求每个组的人数必须为素数.问不同的方案总共有多少.(N个志愿者无差别,即每个组的惟一标识是:人数) 思路: 假设N个人可分为K组,将这K组的人数从 ...

  7. Typora 快捷方式

    1.标题编写 方法一:几个#号 代表几级标题  (共6级) 方法二:ctrl +1 .2.3.4.5.6 2.如何编写子标题 第一种:无序子标题(无序列表) *号  +  空格书写标题文本   (输入 ...

  8. 黑客是如何利用DNS域传送漏洞进行渗透与攻击的?

    一.DNS域传送 DNS :Domain Name System 一个保存IP地址和域名相互映射关系的分布式数据库,重要的互联网基础设施,默认使用的TCP/UDP端口号是53 常见DNS记录类型: 1 ...

  9. swoole、swoft环境配置

    一.服务器环境 1.lnmp wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf ...

  10. 什么是SimpleNVR流媒体服务器软件?

    SimpleNVR是一款新兴流媒体服务器应用软件,占用内存少,无插件.跨平台,应用非常广泛,操作简单易上手,同时还支持一键观看,十分便捷.另外,跟其他一般流媒体服务器不同,SimpleNVR支持开发者 ...