小飞机(一)
前言
这是个糊弄小孩子的东西,所以在书写的时候,有一些偏向性的东西,譬如思路,譬如对代码的解释程度。
另外,叙述的代码的原版来自github,作者:tasdik。
前段时间玩无人深空,有一幕,在太空之间穿梭,有很多陨石,用飞船可以攻击,然后得到材料,氚,银,铂这些。。。
无人深空.jpg
我们这次要做的跟这个类型一样,也是打陨石的,只是是2d简单版的,效果是这样的。
开始界面.jpg
游戏界面.png
准备
首先说语言,其实起初打算用java实现一遍的,可是想如果用java的话,有很多关于语言的东西就要解释的多一些,而如果是python的话,就会省事很多。宗旨呢就是注重思路,淡化语法。
环境无所谓,推荐一个集成环境,例如pycharm这种。
当然了解python是比较好的,如果不了解也是无所谓的。这都不重要
分析
我们现在要去实现这么样一个效果,步骤是怎样的呢?
通常情况下,我们会:
1.先把这么大小的区域界面先搭建出来。
2.然后,把这些素材放置好
3.让这些素材动起来
4.增加条件(譬如什么是打中,如果超出屏幕)
5.对细节的完善
当然,如果你现在还不打理解第4,5步,也无所谓。前3步是都知道,等我们慢慢顺着他去做,就会发现有不足的地方,这时候就是第4,第5步了。
开始
因为是刚开始,所以我们先做第一步,比较简单
首先导入两个材料包,assets(图片素材),sounds(声音素材),接着我们定义这个界面的大小,我设置成宽480,高600的,当然也可以是别的。
然后导入pygame框架,python里做游戏用的,里面有很多实用的东西
使用时候,先init初始化,结束的时候quit释放掉
#初始化
pygame.init()
#中间是放自己代码的地方
#释放
pygame.quit()
接着我们设置屏幕大小,标题,屏幕的内容
#设置屏幕大小并获取屏幕对象
screen = pygame.display.set_mode((480, 600))
#设置屏幕标题
pygame.display.set_caption("小飞机")
#从素材库中加载主界面图片
main_pic = pygame.image.load(path.join(img_dir, "main.png")).convert()
#按比例将图片缩放成屏幕大小并返回缩放后的图片
main_pic = pygame.transform.scale(main_pic, (WIDTH, HEIGHT), screen)
#将图片绘制到屏幕上
screen.blit(main_pic, (0, 0))
然后我们试着运行,发现屏幕是黑的,闪一下就退了。
屏幕为什么是黑的呢,是因为我们虽然绘制了图片,但是没有刷新,就还是原来那样的黑乎乎的一片,所以要在后面执行
#刷新屏幕
pygame.display.update()
但是,闪退的问题还是没有解决,了解一些电脑的应该知道,我们看到的画面是因为系统在不断刷新的,所以我们的程序要持续,也要不断刷新,所以,我们用一个死循环,把刷新放在里面。这样以后又发现一个问题,就是我们程序虽然不闪退了,但是会失去响应,这是为什么呢,是因为程序不知道我们要干什么也就不响应了,我们要做的就是,获取一下这个程序的事件才可以,至于后续的呢,暂时先捕获一下右上角的退出按钮,这样的我们的程序就可以像其他的一样正常退出了。
running = True
while running:
pygame.display.update()
#得到并遍历程序的事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
然后,我们公布一下完整的代码,当然后续的代码会变多,完整的代码就会放在网盘里面。
#python里一个游戏框架
import pygame
from os import path
#图片加载路径
img_dir = path.join(path.dirname(__file__), 'assets')
#屏幕宽高
WIDTH = 480
HEIGHT = 600
#初始化
pygame.init()
#设置屏幕大小并获取屏幕对象
screen = pygame.display.set_mode((WIDTH, HEIGHT))
#设置屏幕标题
pygame.display.set_caption("小飞机")
#从素材库中加载主界面图片
main_pic = pygame.image.load(path.join(img_dir, "main.png")).convert()
#按比例将图片缩放成屏幕大小并返回缩放后的图片
main_pic = pygame.transform.scale(main_pic, (WIDTH, HEIGHT), screen)
#将图片绘制到屏幕上
screen.blit(main_pic, (0, 0))
running = True
while running:
#刷新屏幕
pygame.display.update()
#得到并遍历程序的事件
for event in pygame.event.get():
#如果是退出事件,结束循环
if event.type == pygame.QUIT:
running = False
#释放
pygame.quit()
效果是下面这样的:
第一步.png