import pygame
from pygame.locals import *
import time
import random
class Base(object):
"""docstring for Base"""
def __init__(self,screen,x,y,image):
self.screen = screen
self.x = x
self.y = y
self.image =pygame.image.load(image) class Basefly(Base):
"""docstring for basefly"""
def __init__(self,screen,x,y,image):
Base.__init__(self,screen,x,y,image)
self.bulletList = []#cunfang zidan
def display(self):
self.screen.blit(self.image,(self.x,self.y))
for temp in self.bulletList:
temp.display()
temp.move()
if temp.judge():
self.bulletList.remove(temp)
class BaseBullet(Base):
"""zidan fulei"""
def __init__(self,screen,x,y,image):
Base.__init__(self,screen,x,y,image)
def display(self):
self.screen.blit(self.image,(self.x,self.y)) class Fly(Basefly):
def __init__(self,screen):
Basefly.__init__(self,screen,160,600,"/home/peng/桌面/image/fly.png")
def moveLeft(self):
self.x -= 7
def moveRight(self):
self.x += 7
def moveUp(self):
self.y -= 7
def moveDown(self):
self.y += 7
def fire(self):
self.bulletList.append(Bullet(self.screen,self.x,self.y))
class Enemy(Basefly):
def __init__(self,screen):
Basefly.__init__(self,screen,60,10,"/home/peng/桌面/image/enemy.PNG")
self.direction = "right"#敌机飞的方向
def move(self):
if self.direction == "right":
self.x += 3
elif self.direction == "left":
self.x -= 3
if self.x >= 465:
self.direction = "left"
elif self.x <= 3:
self.direction = "right" def fire(self):
if random.randint(1,100) == 27 or random.randint(1,100) == 56 or random.randint(1,100)==49:
self.bulletList.append(EnemyBullet(self.screen,self.x,self.y))
class Bullet(BaseBullet):
def __init__(self,screen,x,y):
BaseBullet.__init__(self,screen,x+50,y-50,"/home/peng/桌面/image/blue.jpg")
def move(self):
self.y -= 20
def judge(self):
if self.y < 0:
return True
else:
return False
class EnemyBullet(BaseBullet):
def __init__(self,screen,x,y):
BaseBullet.__init__(self,screen,x+20,y+45,"/home/peng/桌面/image/yellow.jpg")
def move(self):
self.y += 20
def judge(self):
if self.y > 700:
return True
else:
return False def keyController(fly):
for event in pygame.event.get():
if event.type == QUIT:
print("exit")
exit()
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT:
print("left")
fly.moveLeft()
elif event.key == K_d or event.key == K_RIGHT:
print("right")
fly.moveRight()
elif event.key == K_w or event.key == K_UP:
print("up")
fly.moveUp()
elif event.key == K_s or event.key == K_DOWN:
print("down")
fly.moveDown()
elif event.key == K_SPACE:
print("space")
fly.fire()
def main():
#创建一个窗口
screen = pygame.display.set_mode((480,750),0,32)
#创建图片用来填充窗口
background = pygame.image.load("/home/peng/桌面/image/back.png")
#创建飞机对象
fly = Fly(screen)
enemy = Enemy(screen)
while 1:
screen.blit(background,(0,0))
fly.display()
enemy.display()
#敌机移动
enemy.move()
enemy.fire()#敌机发射子弹
pygame.display.update()
keyController(fly)
time.sleep(0.01) if __name__ == '__main__':
main()

运行截图:

ps:如果有不清楚的,欢迎交流指正。

基于pygame框架的打飞机小游戏的更多相关文章

  1. 原生javascript开发仿微信打飞机小游戏

    今天闲来无事,于是就打算教一个初学javascript的女童鞋写点东西,因此为了兼顾趣味性与简易程度,果断想到了微信的打飞机小游戏.. 本来想用html5做的,但是毕竟人家才初学,连jquery都还不 ...

  2. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  3. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  4. 【python】10分钟教你用Python做个打飞机小游戏超详细教程

    更多精彩尽在微信公众号[程序猿声] 我知道你们一定想先看效果如何 00 目录 整体框架 开始之前-精灵类Sprite 子弹类class Bullet 玩家飞机类class Player 敌机类clas ...

  5. [SpriteKit] 系统框架中Cocos2d-x制作小游戏ZombieConga

    概述 使用SpriteKit实现一个简单的游戏, 通过一个游戏来进行SpriteKit的入门, 熟练2D游戏的API, 也可以更好的结合在iOS应用中. 详细 代码下载:http://www.demo ...

  6. Java打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很 ...

  7. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

    在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...

  8. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

    最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...

  9. 基于NopCommerce框架开发的微信小程序UrShop

    Urshop小程序商城 介绍 UrShop小程序商城 2.0发布啦,发布地址https://gitee.com/urselect/urshop UrShop 根据NopCommerce框架开发的,基于 ...

随机推荐

  1. 【题解】Luogu p3047 [USACO12FEB]附近的牛Nearby Cows 树型dp

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

  2. EEPROM工作原理透彻详解

    原文链接点击这里 EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存储芯 ...

  3. VsCode中代码折叠快捷键

    ctrl+K  ctrl+[  折叠本级 ctrl+K  ctrl+]  取消折叠本级 ctrl+K  ctrl+0  折叠全部 ctrl+K  ctrl+J  取消折叠全部

  4. 【进阶之路】深入理解Java虚拟机的类加载机制(长文)

    我们在参加面试的时候,经常被问到一些关于类加载机制的问题,也都会在面试之前准备的时候背好答案,但是我们是否有去深入了解什么是类加载机制呢?这段时间因为一些事情在家看了些书,这次就和大家分享一些关于Ja ...

  5. Java安全之Weblogic内存马

    Java安全之Weblogic内存马 0x00 前言 发现网上大部分大部分weblogic工具都是基于RMI绑定实例回显,但这种方式有个弊端,在Weblogic JNDI树里面能将打入的RMI后门查看 ...

  6. 互联网巨头们的 SRE 运维实践「GitHub 热点速览 v.21.27」

    作者:HelloGitHub-小鱼干 本周大热点无疑是前几天 GitHub 发布的 Copilot,帮你补全代码,给你的注释提出建议,预测你即将使用的代码组件-如此神奇的 AI 技术,恰巧本周微软也开 ...

  7. layui table 使用table放输入框时控制每列的宽度

    <table class="layui-table" lay-filter="demo"> <colgroup> <%--设置每列 ...

  8. AvtiveMQ与SpringBoot结合

    首先来了解下ActivieMQ的应用场景,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构是大型分布式系统不可缺少的中间件 ...

  9. Android系统编程入门系列之界面Activity绘制展示

    上篇文章介绍了界面Activity的启动方式和生命周期,本篇将继续介绍在界面Activity中的内容是如何绘制展示给用户的. 在Android系统上运行新创建的界面Activtiy,给用户展示的是空白 ...

  10. PostgreSQL角色问题

    角色 PostgreSQL使用角色的概念管理数据库访问权限. 根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户. 角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限 ...