这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这次用到的模块是pygame一个很经典的游戏模块,官网提供很多范例,大家有空可以去抄几个学习一下。

具体安装pip intall pygame

进群:548377875   即可获取数十套PDF哦!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

注意:这里有个缺陷就是我们点击退出按钮,窗口是不会关闭的 并且程序会死掉,因为我们用了while True的死循环,所以大家不用担心这种情况,等下面我会会介绍解决办法!!

下面解释一下:pygame.display.set_mode这个函数

这是官网的具体网址这个函数

https://www.pygame.org/docs/ref/display.html#pygame.display.set_mode

官网文档给的文献如下:

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

大概翻译过来:

set_mode(resolution=(0,0),flags=0,depth=0)

Initialize a window or screen for display:就是一个初始化窗口函数,resolution代表着是分辨率,我们上述图片选择的是480*852的图片,所以resolution应该填(480,852),第二个参数flags如果你传递的参数为0,或者无标志参数,他认的为软件驱动窗口,大多数的情况我们选择为0,第三个参数depth表示用于颜色的位数,认为0,我们可以通过调整参数让背景色暗色一点,所以我填了参数32。到这里只是举个例子,后期其他函数不再这样子深入解析,具体你们参考官网的文档,好好看看!这里只是举个例子讲解一下,以后在开发过程中要学会自己,读官方给的文档,以后这种能力能给你带来一辈子的受益,增强自己的学习能力!英语实在不懂的可以考虑谷歌翻译哦!!!!!!!!!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

键盘检测是基于事件的检测,我们通过官网可以查到pygame.event.get()这个函数一个介绍如下:

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

The prevIoUs example here won't work correctly due

to a typo,and will not do what you expect due to

a logical error.

Try the following:

for event in pygame.event.get() :

if event.type == pygame.KEYDOWN :

if event.key == pygame.K_SPACE :

print "Space bar pressed down."

elif event.key == pygame.K_ESCAPE :

print "Escape key pressed down."

elif event.type == pygame.KEYUP :

if event.key == pygame.K_SPACE :

print "Space bar released."

elif event.key == pygame.K_ESCAPE :

print "Escape key released."

所以呐,抄过来就变成自己的拉!所以 自己学会看官方文档才会开发哦!具体代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Date : 2018-04-26 18:02:35

# @Author : zyh (369023466@qq.com)

# @Link : https://blog.csdn.net/qq_19175749

# @Version : $Id$

import os

import pygame

#引入这个保证下面一些事件定义比如QUIT,K_a等值可以被使用 或者你也可以用pygame.QUIT替代,为了方便所以我们直接全部引入

from pygame.locals import *

def main():

#1.创建一个窗口,用来显示内容

screen = pygame.display.set_mode((480,852),24)

#2. 创建一个和窗口大小的图片,用来充当背景

background = pygame.image.load("./feiji/background.png").convert()

#3. 把背景图片放到窗口中显示

while True:

#设定需要显示的背景图

screen.blit(background,(0,0))

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')

#检测按键是否是d或者right

elif event.key == K_d or event.key == K_RIGHT:

print('right')

#检测按键是否是空格键

elif event.key == K_SPACE:

print('space')

#跟新需要显示内容

pygame.display.update()

if __name__ == '__main__':

main()

3、打飞机代码显示、控制玩具飞机

效果图:

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Date : 2018-04-26 18:02:35

# @Author : zyh (369023466@qq.com)

# @Link : https://blog.csdn.net/qq_19175749

# @Version : $Id$

import os

import pygame

#引入这个保证下面一些事件定义比如QUIT,K_a等值可以被使用 或者你也可以用pygame.QUIT替代,为了方便所以我们直接全部引入

from pygame.locals import *

def main():

#1.创建一个窗口,用来显示内容

screen = pygame.display.set_mode((480,24)

#2. 创建一个和窗口大小的图片,用来充当背景

background = pygame.image.load("./feiji/background.png").convert()

#用来创建一个飞机的图片

hero = pygame.image.load("./feiji/hero.gif").convert()

#设置两个值来保存飞机的位置常用都是x,y

x = 0

y = 0

#3. 把背景图片放到窗口中显示

while True:

#设定需要显示的背景图

screen.blit(background,0))

#设定飞机显示的位置

screen.blit(hero,(x,y))

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')

#控制飞机向左移动

x -= 5

#检测按键是否是d或者right

elif event.key == K_d or event.key == K_RIGHT:

print('right')

#控制飞机向右移动

x += 5

#检测按键是否是空格键

elif event.key == K_SPACE:

print('space')

#跟新需要显示内容

pygame.display.update()

if __name__ == '__main__':

main()

飞机项目打算分3次讲,这个是第一部分,是一些扫盲的步骤,教你们如果看着文档开发。希望大家学习的不是这个代码,学习的是如何利用官方文档解决问题!

打飞机代码:敌机发射子弹

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

class EnemyBullet(object):

def __init__(self,x,y,screen):

self.x = x+30

self.y = y+30

self.screen = screen

self.image = pygame.image.load("./feiji/bullet-1.gif").convert()

def move(self):

self.y += 2

def display(self):

self.screen.blit(self.image,(self.x,self.y))

def judge(self):

if self.y>890:

return True

else:

return False

然后,为了使得敌机会发射子弹,可以在EnemyPlane类下添加如下函数sheBullet代码如下:

def sheBullet(self):

num = random.randint(1,100)

if num == 88:

newBullet = EnemyBullet(self.x,self.y,self.screen)

self.bulletList.append(newBullet)

最后,添加发射子弹,也就是在while True里面添加enemyPlane.sheBullet(),如下:

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

效果图如下:

这是我见过最详细的飞机大战教程!完全零基础小学生都会把!

最后代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Date : 2018-04-26 18:02:35

# @Author : zyh (369023466@qq.com)

# @Link : https://blog.csdn.net/qq_19175749

# @Version : $Id$

import os

import pygame

#引入这个保证下面一些事件定义比如QUIT,K_a等值可以被使用 或者你也可以用pygame.QUIT替代,为了方便所以我们直接全部引入

from pygame.locals import *

import random

import time

"""

接下来要做的任务:

1. 实现飞机在你想要的位置显示

2. 实现按键控制飞机移动

3. 实现按下空格键的时候,显示一颗子弹

4.使用面向对象的方式显示飞机,以及控制其左右移动

"""

class HeroPlane(object):

"""docstring for HeroPlane"""

#接收总屏幕句柄 screen

def __init__(self,screen):

#设置飞机认位置,让她处于背景的中间,经过测量大概是(230,600)的位置

self.x = 230

self.y = 600

#设置要显示内容的窗口

self.screen = screen

#用来保存英雄飞机需要的图片名字

self.imageName = './feiji/hero.gif'

#根据名字生成飞机图片

self.image = pygame.image.load(self.imageName).convert()

#用来保存英雄飞机发射出的所有子弹

self.bulletList = []

#设定飞机位置

def display(self):

self.screen.blit(self.image,self.y))

#判断一下子弹的位置是否越界,如果是,那么就要删除这颗子弹

#

#这种方法会漏掉很多需要删除的数据

# for i in self.bulletList:

# if i.y<0:

# self.bulletList.remove(i)

#用来存放需要删除的对象信息

needDelItemList = []

#保存需要删除的对象

for i in self.bulletList:

if i.judge():

needDelItemList.append(i)

#删除self.bulletList中需要删除的对象

for i in needDelItemList:

self.bulletList.remove(i)

#因为needDelItemList也保存了刚刚删除的对象的引用,所以可以删除整个列表,那么

#整个列表中的引用就不存在了,也可以不调用下面的代码,因为needDelItemList是局部变量

#当这个方法调用结束时,这个局部变量也就不存在了

# del needDelItemList

#查看子弹队列是否有子弹,若有则消耗,其实这里是一个典型的生产者与消费者关系,是一个设计模型,当我们按下空格的时候生产一个子弹

#当这里发现队列里面有子弹的时候则去消耗,构成一个消费者与生产者模式

for bullet in self.bulletList:

bullet.display()

bullet.move()

#飞机移动

def moveLeft(self):

self.x -= 10

def moveRight(self):

self.x += 10

#发射子弹,首先要创建子弹类,然侯添加到子弹的list,等于完成装弹过程,自有飞机有子弹才能发射

def sheBullet(self):

#创建时候传递参数,在子弹类已经说明

newBullet = Bullet(self.x,self.screen)

#创建出子弹以后,加入弹夹也就是子弹list的bullet

self.bulletList.append(newBullet)

#抽象一个子弹类,让飞机调用,飞机调用了子弹,相当于飞机装上了子弹

class Bullet(object):

#由于子弹是跟随者飞机发射的,所以我们必须 获取到飞机所在的位置 x,y,然侯还需要游戏窗口的一个总句柄screen

def __init__(self,screen):

self.x = x + 40

self.y = y - 20

self.screen = screen

self.image = pygame.image.load('./feiji/bullet-3.gif').convert()

def move(self):

self.y -= 2

def display(self):

self.screen.blit(self.image,self.y))

def judge(self):

if self.y<0:

return True

else:

return False

class EnemyPlane(object):

def __init__(self,screen):

#设置飞机认的位置

self.x = 0

self.y = 0

#设置要显示内容的窗口

self.screen = screen

self.imageName = "./feiji/enemy-1.gif"

self.image = pygame.image.load(self.imageName).convert()

#用来存储敌人飞机发射的所有子弹

self.bulletList = []

self.direction = "right"

def display(self):

#更新飞机的位置

self.screen.blit(self.image,self.y))

#存放需要删除的对象信息

needDelItemList = []

for i in self.bulletList:

if i.judge():

needDelItemList.append(i)

for i in needDelItemList:

self.bulletList.remove(i)

# del needDelItemList

#更新及这架飞机发射出的所有子弹的位置

for bullet in self.bulletList:

bullet.display()

bullet.move()

def move(self):

#如果碰到了右边的边界,那么就往左走,如果碰到了左边的边界,那么就往右走

if self.direction == "right":

self.x += 2

elif self.direction == "left":

self.x -= 2

if self.x>480-50:

self.direction = "left"

elif self.x<0:

self.direction = "right"

def sheBullet(self):

#这里为了不让敌人机器一下发射无限子弹,所以我们可以采用一个随机数,当随机数等于88的时候就发射子弹,以答案随机的结果

num = random.randint(1,self.screen)

self.bulletList.append(newBullet)

#建立敌人机器子弹类

class EnemyBullet(object):

def __init__(self,self.y))

def judge(self):

if self.y>890:

return True

else:

return False

def main():

#1.创建一个窗口,用来显示内容

screen = pygame.display.set_mode((480,24)

#2. 创建一个和窗口大小的图片,用来充当背景

background = pygame.image.load("./feiji/background.png").convert()

# #用来创建一个飞机的图片

# hero = pygame.image.load("./feiji/hero.gif").convert()

# #设置两个值来保存飞机的位置常用都是x,y

# x = 0

# y = 0

#飞机封装好了以后,上面注释的代码就用不着了,然后引入我们要用的对象生成飞机,这是面向对象的一处体现

heroPlane = HeroPlane(screen)

#4. 创建一个敌人飞机

enemyPlane = EnemyPlane(screen)

#3. 把背景图片放到窗口中显示

while True:

#设定需要显示的背景图

screen.blit(background,0))

#设定飞机显示的位置,调用方法

heroPlane.display()

enemyPlane.move()

enemyPlane.sheBullet()

enemyPlane.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')

#控制飞机向左移动,调用方法

heroPlane.moveLeft()

#检测按键是否是d或者right

elif event.key == K_d or event.key == K_RIGHT:

print('right')

#控制飞机向右移动,调用方法

heroPlane.moveRight()

#检测按键是否是空格键

elif event.key == K_SPACE:

print('space')

heroPlane.sheBullet()

for i in heroPlane.bulletList:

print(i)

#通过延时的方式,来降低这个while循环的循环速度,从而降低了cpu占用率

time.sleep(0.01)

#跟新需要显示内容

pygame.display.update()

if __name__ == '__main__':

main()

代码到这里差不多就结束了,主要还是巩固一下一些python的知识,跟一些模块的应用,跟面向对象的知识,其实这个代码还是可以继续优化的,可以抽象出基类,然后去继承基类,这样子代码还可以被大大的优化。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实