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. element-ui公用模态框自定义样式与scoped样式生效问题解决方案

    //先插如效果图 里面内容均为传进来的.包括取消与确定按钮,因为每个页面的绑定事件不一样. //下面这个图片为初始样式 //拖动模态框指令需要插件.详情看我下一篇,以下是地址 https://www. ...

  2. Codeforces Round #459 (Div. 2)C. The Monster

    C. The Monster time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  3. 题解报告:hdu 1570 A C

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1570 Problem Description Are you excited when you see ...

  4. 227 Basic Calculator II 基本计算器II

    实现一个基本的计算器来计算一个简单的字符串表达式. 字符串表达式仅包含非负整数,+, - ,*,/四种运算符和空格 . 整数除法仅保留整数部分. 你可以假定所给定的表达式总是有效的. 一些例子: &q ...

  5. sdut2355Binary Search Heap Construction

    链接 捣鼓了一下午..按堆建树 写完交 返回TLE..数据不大 感觉不会超了 无奈拿了数据来看什么奇葩数据会超 发现数据跟我输出不一样 看了好久才明白理解错题意了 给出的字符串有两个标签 按前一个来建 ...

  6. Java 线程是什么-渐入佳境

    线程:(一)什么是线程 管哥说:程序中有多个执行流就叫多线程.多线程是多任务的一种特别的形式.好处:单个程序可以创建多个并发执行的程序来完成各自的任务.多线程能满足程序员编写高效率的程序来达到充分利用 ...

  7. CF792C Divide by Three

    思路: dp. 实现: #include <iostream> #include <cstdio> #include <cstring> #include < ...

  8. 微信小程序之多行文本省略号

    最近在捣鼓小程序,期间遇到的问题,踩过的坑,也是在网上各种搜.这里也说下我解决的问题,方便大家. 在小程序首页显示文本列表的时候,为了美观,不希望把所有的文本都显示出来,希望是显示前几行(比如前3行, ...

  9. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...

  10. SQL——时间戳

    mysql 低版本,date.datetime.timestamp 无法精确到毫秒 可以舍弃时间类型字段,用 bigint 来代替,如果用字符串类型代替,还是比较担心排序的时候只是根据第一个字母进行排 ...