猫史档案馆


【pygame:薯架】教你用pygame开发游戏 Season2 Part1

用户:天上的流星_tianqiVirus天上的流星_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文件夹下建立我们的图片

center_image

center_image(怎么会是这个)

转换为pygameSurface

mainCat = pygame.image.load("assets/image/cat/1.png")

center_image

哦等等,我们这次玩玩面向对象

请将代码改为

center_image

class mainCat:
	def __init__(self):
		self.image = pygame.image.load("assets/image/cat/1.png")

这里__init__即初始化

然后,我们给mainCat这个类弄一个实例

请在循环前加上这行代码

myCat = mainCat()

我知道这个面向对象比较难理解,我一开始可不知道这个是什么

如果你懂面向对象是什么,那你读这篇就没问题

如果你不懂,请去学习,我推荐去菜鸟教程学,或者看我上一季的帖子

这样,myCat里有了image这个变量,我们再把它显示出来center_image

	screen.blit(myCat.image,(0,0))

我还是那句老话,注意缩进

还有,大家看到blit里第一项是myCat.image

大家可以理解为图形化里的私有变量,也就是说是myCat这个实例私有的,要加myCat.

同时我们不知道猫的具喵置要放在哪里,所以我们暂定为零坐标

center_image

太大了

这里我教大家一个缩放图片的方法

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

center_image

better

为了更好控制猫的坐标,我们给它也加上xy变量

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( 

center_image结果看起来很杂乱,这是应为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的看看我以前的帖子

center_image

好多了

接下来我们加上上升的代码

根据游戏思路

检测鼠标按下的代码我介绍过,请看我以前的代码

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:天上的流星

本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途

 


回复

上一页1 页 / 共 1下一页
Leo韩Leo韩

沙发

点赞0


评论


天上的流星_tianqiVirus天上的流星_tianqiVirus

估计没人知道我为什么要保持原飞机大战的开头

点赞0


评论