用户:天上的流星_tianqiVirus查看:0 回复:2 评论:0 创建时间:2019-06-28T11:03:36
教你用pygame开发游戏
今日游戏:飞机大战(自创)
这一篇我没有标注“零基础向”,如果你看不懂的话请看我以前的帖子
我们的暑假要来了
所以我们来玩玩薯架
游戏基本思路如
下:
1,猫在天上飞,会不断掉下来,需要按鼠标来跳,每次跳会消耗能量(我可能描述得不清楚,总之类似于flappy bird)
2,猫会不断往前飞
3,吃到薯条加分
4,吃到番茄酱加能量
5,能量用完就嗝屁了
老样子,先弄基本的代码,如果不知道代码是什么意思就看看我以前的帖子
import pygame
import random
import sys
pygame.init()
screen = pygame.display.set_mode([800,600])
pygame.display.set_caption("Potato Cat")
keepGoing=True
while keepGoing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
pygame.display.update()
pygame.quit()
这个讲的是猫嘛,主角肯定要登场啊
先在你的源代码文件夹下建assets文件夹,在assets文件夹下建image文件夹,在image文件夹下建cat文件夹
在cat文件夹下建立我们的图片
(怎么会是这个)
转换为pygameSurface
mainCat = pygame.image.load("assets/image/cat/1.png")
哦等等,我们这次玩玩面向对象
请将代码改为
class mainCat:
def __init__(self):
self.image = pygame.image.load("assets/image/cat/1.png")
这里__init__即初始化
然后,我们给mainCat这个类弄一个实例
请在循环前加上这行代码
myCat = mainCat()
我知道这个面向对象比较难理解,我一开始可不知道这个是什么
如果你懂面向对象是什么,那你读这篇就没问题
如果你不懂,请去学习,我推荐去菜鸟教程学,或者看我上一季的帖子
这样,myCat里有了image这个变量,我们再把它显示出来
screen.blit(myCat.image,(0,0))
我还是那句老话,注意缩进
还有,大家看到blit里第一项是myCat.image
大家可以理解为图形化里的私有变量,也就是说是myCat这个实例私有的,要加myCat.
同时我们不知道猫的具喵置要放在哪里,所以我们暂定为零坐标
太大了
这里我教大家一个缩放图片的方法
a = pygame.transform.喵oothscale(pygameSurface,(int,int))
pygameSurface是什么大家都知道的,后面的两个int分别代表缩放后的长宽
大家还可以把喵ooth拿掉,有喵ooth的为平滑缩放,没有的反之
改动类mainCat的代码
class mainCat:
def __init__(self):
self.image = pygame.transform.喵oothscale(pygame.image.load("assets/image/cat/1.png"),(32,32))
better
为了更好控制猫的坐标,我们给它也加上x和y变量
class mainCat:
def __init__(self):
self.image = pygame.transform.喵oothscale(pygame.image.load("assets/image/cat/1.png"),(32,32))
self.x = 100
self.y = 50
有了变量就用啊
所以请改动blit代码
screen.blit(myCat.image,(myCat.x,myCat.y))
此处运行效果就不展示了
我们的设定是猫不断掉落,而点击鼠标可以上升
所以我们先在类中设置一个实时更新数据的函数,包括掉落,即y坐标增加
class mainCat:
def __init__(self):
self.image = pygame.transform.喵oothscale(pygame.image.load("assets/image/cat/1.png"),(32,32))
self.x = 100
self.y = 50
self.jump = 0
def catUpdate(self):
self.jump+=0.01
self.y+=self.jump
这里jump代表下降或这上升的速度,+1就表示下降1
不像__init__,这个可不会自动运行,所以我们得在循环内加入代码
与myCat.image同理,这个要加上myCat.
while keepGoing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
myCat.catUpdate()
screen.blit(myCat.image,(myCat.x,myCat.y))
pygame.display.update(
结果看起来很杂乱,这是应为pygame不会在每次循环中帮我们自动清空
所以我们自己设定个背景,这样每次都会覆盖上去了
while keepGoing:
screen.fi喵))
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
myCat.catUpdate()
screen.blit(myCat.image,(myCat.x,myCat.y))
pygame.display.update()
这里介绍一个新的方法:fill
fill内的数据是一个列表或元组,里面有3个变量,分别为rgb值,不懂rgb的看看我以前的帖子
好多了
接下来我们加上上升的代码
根据游戏思路
检测鼠标按下的代码我介绍过,请看我以前的代码
while keepGoing:
screen.fi喵))
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
myCat.jump=-1.5
myCat.catUpdate()
screen.blit(myCat.image,(myCat.x,myCat.y))
pygame.display.update()
这里jump要减去而不是加上1.5原因我教过
这样,猫的跳跃效果就做出来了
总之,我们这次的任务就完成了
最终代码如下
import pygame
import random
import sys
pygame.init()
screen = pygame.display.set_mode([800,600])
pygame.display.set_caption("Potato Cat")
class mainCat:
def __init__(self):
self.image = pygame.transform.喵oothscale(pygame.image.load("assets/image/cat/1.png"),(32,32))
self.x = 100
self.y = 50
self.jump = 0
def catUpdate(self):
self.jump+=0.01
self.y+=self.jump
keepGoing=True
myCat = mainCat()
while keepGoing:
screen.fi喵))
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
myCat.jump=-1.5
myCat.catUpdate()
screen.blit(myCat.image,(myCat.x,myCat.y))
pygame.display.update()
pygame.quit()
想要继续学习pygame和游戏制作的请关注
id:天上的流星
本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途