Python之游戏开发-飞机大战

想要代码文件,可以加我微信:nickchen121

#!/usr/bin/env python
# coding: utf-8 import pygame
import time
import random
from pygame.locals import * class Base(object):
def __init__(self, x, y, imageName):
self.x = x
self.y = y
self.imageName = imageName
self.image = pygame.image.load(self.imageName).convert() def display(self):
screen.blit(self.image, (self.x, self.y)) class Plane(Base):
def __init__(self, screen, x, y, imageName, planeName):
Base.__init__(self, x, y, imageName)
self.screen = screen
self.bulletList = []
self.planeName = planeName def display(self):
Base.display(self) class EnemyPlane(Plane):
def __init__(self, screen):
Plane.__init__(self, screen, 0, 0, "./feiji/enemy-3.gif", "Enemy")
self.directioin = "right" # right表示向右 left表示向左
self.speed = random.randint(1, 5) def move(self):
if self.directioin == "right":
self.x += self.speed
elif self.directioin == "left":
self.x -= self.speed
# 到达另外一个边界时,需要反转方向
if self.x > 480:
self.directioin = "left"
elif self.x < 0:
self.directioin = "right" def shoot(self):
shootFlagList = [2, 6]
shootFlag = random.randint(1, 100)
if shootFlag in shootFlagList:
self.bulletList.append(Bullet(self.screen, self.planeName, self.x, self.y))
# print("x:%d,y:%d"%(self.x, self.y)) def display(self):
Plane.display(self)
# print(self.bulletList) for bullett in self.bulletList:
if bullett.y <= 700:
bullett.display()
bullett.move()
global hero
# 以中点为心
if ((bullett.x - hero.x - 40) ** 2 + (
bullett.y - hero.y - 40) ** 2) ** 0.5 < 40 and bullett.baozhaflag == 0:
bullett.baozhaflag = 1
global score
if score > 20:
score -= 20
else:
score = 0
global flagg
flagg = 1
print(hero.x, hero.y)
imageName = "./feiji/hero_blowup_n3.gif"
im = hero.image
hero.image = pygame.image.load(imageName).convert()
print("END")
else:
self.bulletList.remove(bullett) class playerPlane(Plane):
def __init__(self, screen):
Plane.__init__(self, screen, 230, 600, "./feiji/hero.gif", "player")
self.speed = 20 def display(self):
Plane.display(self)
# print(self.bulletList) for bullett in self.bulletList:
if bullett.y >= 0:
bullett.display()
bullett.move()
global enemy
if ((enemy.x + 40 - bullett.x) ** 2 + (
enemy.y + 80 - bullett.y) ** 2) ** 0.5 < 40 and bullett.baozhaflag == 0:
bullett.baozhaflag = 1
global escore
if escore > 0:
escore -= 20
global flagge
flagge = 1
print(enemy.x, enemy.y)
imageName = "./feiji/enemy2_down1.gif"
im = enemy.image
enemy.image = pygame.image.load(imageName).convert()
print("END")
else:
self.bulletList.remove(bullett) def moveRight(self):
if self.x >= 0 and self.x <= 420:
self.x += self.speed def moveLeft(self):
if self.x <= 480 and self.x >= 20:
self.x -= self.speed def sheBullet(self):
bui = Bullet(self.screen, "player", self.x + 40, self.y - 4)
self.bulletList.append(bui) # 导弹类
class Bullet(Base):
def __init__(self, screen, bulletName, x, y):
self.bulletName = bulletName
imageName1 = "./feiji/bullet-1.gif"
self.baozhaflag = 0
if bulletName == "player":
imageName1 = "./feiji/bullet-3.gif" Base.__init__(self, x, y, imageName1) def move(self):
if self.bulletName == "player":
self.y -= 2
else:
self.y += 2 def display(self):
Base.display(self) if __name__ == '__main__':
score = 200
escore = 100
# 1.创建一个窗口
screen = pygame.display.set_mode((480, 700), 0, 32)
# 2.创建一个图片
background = pygame.image.load("./feiji/background.png").convert() color_red = (255, 0, 0)
color_green = (0, 255, 0)
color_blue = (0, 0, 255)
print(pygame.font.get_fonts())
pygame.font.init()
# font = pygame.font.SysFont(None, 48) # 使用系统字体
fontObj3 = pygame.font.SysFont('arial', 20) # 加粗
fontObj3.set_bold(True) # 斜体
fontObj3.set_italic(True) # 文字具有蓝色背景
textSurfaceObj3 = fontObj3.render("敌方血量:" + str(score), True, color_red, color_blue)
textRectObj3 = textSurfaceObj3.get_rect()
textRectObj3.center = (60, 510) # 文字具有蓝色背景
textSurfaceObj2 = fontObj3.render("我方血量:" + str(escore), True, color_red, color_blue)
textRectObj2 = textSurfaceObj2.get_rect()
textRectObj2.center = (60, 10) # 创建玩家飞机
# hero = pygame.image.load("./feiji/hero.gif").convert()
global flagg
flagg = 0
flagge = 0
global hero
hero = playerPlane(screen)
global enemy
enemy = EnemyPlane(screen)
# 3.图片到背景去
imm = hero.image
imme = enemy.image
while True:
screen.blit(background, (0, 0))
textSurfaceObj3 = fontObj3.render("Me :" + str(score), True, color_red, color_blue)
textRectObj3 = textSurfaceObj3.get_rect()
textRectObj3.center = (60, 510) # 文字具有蓝色背景
textSurfaceObj2 = fontObj3.render("Enemy :" + str(escore), True, color_red, color_blue)
textRectObj2 = textSurfaceObj2.get_rect()
textRectObj2.center = (60, 10) screen.blit(textSurfaceObj3, textRectObj3)
screen.blit(textSurfaceObj2, textRectObj2)
# screen.blit(hero, (x, 600))
# hero.display()
# 获取事件,比如按键等
for event in pygame.event.get(): # 判断是否是点击了退出按钮
if event.type == QUIT:
print("exit")
exit()
# 判断是否是按下了键
elif event.type == KEYDOWN:
# 检测按键是否是a或者left
if event.key == K_a or event.key == K_LEFT:
print('left')
hero.moveLeft() # 检测按键是否是d或者right
elif event.key == K_d or event.key == K_RIGHT:
print('right')
hero.moveRight() # 检测按键是否是空格键
elif event.key == K_SPACE:
print('space')
hero.sheBullet() # 更新需要显示的内容 hero.display()
if flagg == 1:
hero.image = imm
flagg = 0 # 让敌机自己移动以及发射子弹
enemy.move()
enemy.shoot()
enemy.display()
if flagge == 1:
enemy.image = imme
flsgge = 0
pygame.display.update()
time.sleep(0.01)

Python之游戏开发-飞机大战的更多相关文章

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

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

  2. Python小游戏之 - 飞机大战 !

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

  3. 500行代码,教你用python写个微信飞机大战

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右 ...

  4. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  5. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

  6. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  7. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  8. 微信demo小游戏:飞机大战从无到有

    微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...

  9. IOS学习之路五(SpriteKit 开发飞机大战小游戏一)

    参考SpriteKit 创建游戏的教程今天自己动手做了一下,现在记录一下自己怎么做的,今天之做了第一步,一共有三个部分. 第一步,项目搭建. 项目所用图片资源:点击打开链接 1.在Xcode打开之后, ...

随机推荐

  1. iOS 计算字符串显示宽高度

    ObjC(Category of NSString): - (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size{ ...

  2. InputFilter在过滤空格时重复输入的问题

    正确做法:editText.setFilters(new InputFilter[] { new InputFilter() { @Override public CharSequence filte ...

  3. ROS学习笔记八:基于Qt搭建ROS开发环境

    1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...

  4. Hdu 5361 In Touch (dijkatrs+优先队列)

    题目链接: Hdu 5361  In Touch 题目描述: 有n个传送机排成一排,编号从1到n,每个传送机都可以把自己位置的东西传送到距离自己[l, r]距离的位置,并且花费c,问从1号传送机到其他 ...

  5. js中实现json格式的转换

    function person(id,name,age){ this.id=id; this.name=name; this.age=age; } var p=new person(1001,'tom ...

  6. Java中static修饰符

    public class StaticTest { static int i ; static int m=30; int j ; int k=25; static{ i=10; System.out ...

  7. 11 DOM基础

    1.css   标签 js       元素 dom    节点,元素节点,属性节点,文本节点 2.dom浏览器支持率 ie      10% chrome   60% FF       99% 3. ...

  8. java中字节和字符的转换操作

    package com.ywx.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputSt ...

  9. js控制页面跳转,清缓存,强制刷新页面

    单看标题,必定满脸蒙13. 其实,想表达的仅仅是,在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...

  10. 认识MySQL Replication

    MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 In ...