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. python爬虫爬取腾讯招聘信息 (静态爬虫)

    环境: windows7,python3.4 代码:(亲测可正常执行) import requests from bs4 import BeautifulSoup from math import c ...

  2. 《windows核心编程系列》四谈谈进程的建立和终止

    第二部分:工作机理 第一章:进程 上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了.首先要给大家介绍的是进程内核对象.进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关 ...

  3. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package).   1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...

  4. 简单水题 POJ 2291 Rotten Ropes

    题目传送门 /* 我校oj的源题,看懂题意就很水,贴出来省的再敲:) */ #include <cstdio> #include <algorithm> #include &l ...

  5. 题解报告:hdu 1284 钱币兑换问题(简单数学orDP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很 ...

  6. Android偏好设置(4)设置默认值

    Setting Default Values The preferences you create probably define some important behaviors for your ...

  7. NSUserDefaults保存用户名和密码

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...

  8. RMAN-06564错误的原因及解决办法

    今日在进行数据库恢复时,遭遇RMAN-06564错误,如下: RMAN> restore spfile from autobackup; Starting restore at 01-NOV-1 ...

  9. mysql自动获取时间日期

    实现方式: 1.将字段类型设为  TIMESTAMP  2.将默认值设为  CURRENT_TIMESTAMP 举例应用: 1.MySQL 脚本实现用例 --添加CreateTime 设置默认时间 C ...

  10. poj2718 Smallest Difference

    思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...