首页 > 其他分享 >飞机大战

飞机大战

时间:2023-12-17 19:00:35浏览次数:22  
标签:__ 飞机 bullet screen 大战 pygame self def

import pygame  # 引用第三方模块
import random # 随机产生数据
import time
from pygame.locals import *

'''
抽象出来一个飞机的基类
'''


class BasePlane(object):
def __init__(self, screen, imageName):
'''
:param screen: 主窗体对象
:param imageName: 加载的图片
'''
self.screen = screen
self.image = pygame.image.load(imageName)
self.bullet_list = [] # 存储的子弹
pass

def display(self):
self.screen.blit(self.image, (self.x, self.y))
# 完善子弹的展示逻辑
needDel = []
for item in self.bullet_list:
if item.judge():
needDel.append(item)
pass
# 删除越界子弹
for i in needDel:
self.bullet_list.remove(i)
pass
for bullet in self.bullet_list:
bullet.display() # 显示子弹位置
bullet.move()
pass


'''
抽象出一个子弹基类
'''


class ComBullet(object):
def __init__(self, x, y, screen, bulletType):
self.x = x
self.y = y
self.type = bulletType
self.screen = screen
if self.type == 'hero':
self.x += 13
self.y -= 20
self.imagePath = 'D:\图片\omoro_alien_05.png'
elif self.type == 'enemy':
self.x = x
self.y += 10
self.imagePath = 'D:\图片\omoro_alien_05.png'
self.imageName = pygame.image.load(self.imagePath)

def move(self):
'''
子弹移动
:return:
'''
if self.type == 'hero':
self.y -= 5
elif self.type == 'enemy':
self.y += 5

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

def judge(self):
'''
判断子弹是否越界
:return:
'''
if self.y > 500 or self.y < 0:
return True
else:
return False


'''
1.实现飞机的显示,并且可以控制飞机的移动【面向对象】
'''


class HeroPlane(BasePlane):
def __init__(self, screen):
'''
:param screen: 主窗体对象
'''
super(HeroPlane, self).__init__(screen, 'D:\图片\person_kintaro_01.png') # 调用父类构造方法
self.x = 150
self.y = 450

pass

def move_left(self):
'''
飞机左移
:return:
'''
if self.x > 0:
self.x -= 10
pass

def move_right(self):
'''
飞机右移
:return:
'''
if self.x < 350 - 40: # 因为图片占据40个像素
self.x += 10
pass

# 发射子弹
def shoot_bullet(self):
# 创建一个新的子弹对象
new_bullet = ComBullet(self.x, self.y, self.screen, 'hero')
self.bullet_list.append(new_bullet)
pass


'''
创建敌机类
'''


class EnemyPlane(BasePlane):
def __init__(self, screen):
super(EnemyPlane, self).__init__(screen, 'D:\图片\omoro_alien_06.png')
self.x = 0
self.y = 0
self.direction = 'right'

def shebullet(self):
'''
敌机随机发射子弹
:return:
'''
num = random.randint(1, 8)
if num == 3:
newBullet = ComBullet(self.x, self.y, self.screen, 'enemy')
self.bullet_list.append(newBullet)

def move(self):
'''
随机移动
:return:
'''
if self.direction == 'right':
self.x += 10
elif self.direction == 'left':
self.x -= 10
if self.x >= 350 - 20:
self.direction = 'left'
elif self.x < 0:
self.direction = 'right'


def key_control(HeroObj):
'''
定义普通函数,用来实现键盘检测
:param HeroObj: 可控制的对象
:return:
'''
# 获取键盘事件
eventList = pygame.event.get()
for event in eventList:
if event.type == QUIT: # 程序退出
print('退出')
exit()
elif event.type == KEYDOWN: # 是否按下按键
if event.key == K_a or event.key == K_LEFT:
HeroObj.move_left() # 调用函数实现左移动
print('飞机左移')
elif event.key == K_d or event.key == K_RIGHT:
HeroObj.move_right()
print('飞机右移')
elif event.key == K_SPACE:
HeroObj.shoot_bullet()
print('发射子弹')


def main():
# 首先创建一个窗口,用来显示内容
screen = pygame.display.set_mode((350, 500), depth=32) # 设定窗口大小
# 设定背景图片
background = pygame.image.load('D:\图片\preview (1).png') # 加载本地图片
# 设置游戏标题
pygame.display.set_caption('阶段总结,飞机大战')
# 载入玩家对象
hero = HeroPlane(screen)
# 创建敌机对象
enemyplane = EnemyPlane(screen)
while (True):
# 设定要显示的内容
screen.blit(background, (0, 0))
# 显示玩家图片
hero.display()
# 显示敌机
enemyplane.display()
# 敌机移动
enemyplane.move()
# 敌机发射
enemyplane.shebullet()
# 获取键盘事件
key_control(hero)
# 更新显示的内容
pygame.display.update()

pygame.time.Clock().tick(5) # 一秒内循环5次
pass


if __name__ == '__main__':
main()

 

标签:__,飞机,bullet,screen,大战,pygame,self,def
From: https://www.cnblogs.com/xuexipythondaydayup/p/17909558.html

相关文章

  • Cocos 飞机大战 (难点分析 制作)
    前言自己也写了3个cocos项目,觉得前面确实有点难,但是熟悉上手之后应该就是好多了,就是熟能生巧吧下面就是我的一个项目分析和难点  就是我们常玩的打飞机先看下效果图我在手机上的截图 就是拖到触屏飞机进行射击和躲避子弹,感觉还行吧哈哈难点 1.就是物体直接......
  • 植物大战僵尸
    #include<iostream>#include<windows.h>usingnamespacestd;HWNDhand=NULL;DWORDpid=0;HANDLEhProcess=NULL;DWORDBaseValue=0;DWORDSunshineAddress;boolstartGame();boolinitSunshine();intgetSunshineValse();voidsetSunshineValue(intvalue);int......
  • 植物大战僵尸外挂2
    #include<iostream>#include<windows.h>usingnamespacestd;/*声明变量*/HWNDhand=NULL;DWORDpid=0;HANDLEhProcess=NULL;DWORDBaseValue=0;/*声明方法/函数*/boolstartGame();intmain(intargc,char**argv){ boolResult=false; Result=startG......
  • 植物大战僵尸外挂1
    #include<iostream>#include<windows.h>usingnamespacestd;/*声明变量*/HWNDhand=NULL;//游戏窗口DWORDpid=0;//游戏进程IDHANDLEhProcess=NULL;//进程对象DWORDBaseValue=0;//游戏数据存放的基础值/*声明方法/函数*/boolstartGame();//初始化游戏数据......
  • 植物大战僵尸0.1
    #include<iostream>#include<windows.h>usingnamespacestd;HWNDhand=NULL;DWORDpid=0;HANDLEhProcess=NULL;DWORDBaseValue=0;boolstartGame();intmain(intargc,char**argv){boolResult=false;Result=startGame();i......
  • 植物大战僵尸
    #include<iostream>#include<windows.h>usingnamespacestd;//声明变量HWNDhand=NULL;//游戏窗口DWORDpid=0;//游戏进程IDHANDLEhProcess=NULL;//进程对象DWORDBaseValue=0;//游戏数据存放的基础值boolstartGame();//初始化游戏数据intmain(){......
  • 植物大战僵尸(初始化游戏数据 )
    #include<iostream>#include<windows.h>usingnamespacestd;/*声明变量*/HWNDhand=NULL;//游戏窗口DWORDpid=0;//游戏进程IDHANDLEhProcess=NULL;//进程对象DWORDBaseValue=0;//游戏数据存放的基础值/*声明方法/函数*/boolstartGame();//初始化游戏数据......
  • 植物大战僵尸(阳光)
    #include<iostream>#include<windows.h>usingnamespacestd;intmain(){intvalue=0;intpid=0;cout<<"输入修改进程ID";cin>>pid;HANDLEhProcess=NULL;DWORDaddress1=0x006A9EC0;DWORDaddress2;......
  • 我国民航飞机维修技术与优化措施——任务书
    一、 论文(设计)方向:1.了解我国民航飞机维修的过程;2.根据有关了解,给出相应的改变措施和建议。二、 主要参考资料: [1]林福智,民航飞机维修技术和方法D数字化用户,2019,25(9):115.[2]周多武.民航飞机维修技术和方法探讨D.军民两用技术与产品,2018(24):208.[3]王峥:基于民航飞机维修技术和方......
  • TSINGSEE青犀航空飞机智能视频监控系统方案亮点及应用
    近日,尘封九年的马航MH370事件传来了最新消息,对于航空失事,大家都倍感痛心。事故的发生是大众不愿看到的,但事情已然发生,事后解决与后续预防也同样重要。航空飞机智能视频监控就可起到很好的协助作用。航空飞机智能视频监控是指在飞行中使用视频监控技术对飞机内部和外部环境进行实......