HTML5技术

【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例 - 马三小伙儿

字号+ 作者:H5之家 来源:博客园 2015-12-15 12:41 我要评论( )

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构。 这次我们来一起做一个简单的酷跑类游戏综合运用以前学到的知识。 程序下载地址: 访问密码 901

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

 

前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构。

这次我们来一起做一个简单的酷跑类游戏综合运用以前学到的知识。

程序下载地址: 访问密码 901f

源代码网盘地址: 访问密码 c139

github地址:https://github.com/XINCGer/catRunFast

效果图:

 

现在我们来分析一下制作流程:

游戏中一共有嗷大喵,恶龙,火焰,爆炸动画和果实(就是上方蓝色的矩形块)这几种精灵。这里我们使用到了前几期博客中的MyLibrary.py。上述这几个精灵都是 MySprite类实例化的对象。

为了方便管理。我们建立了几个精灵组,并且将一些精灵塞到了里面:

#创建精灵组 group = pygame.sprite.Group() group_exp = pygame.sprite.Group() group_fruit = pygame.sprite.Group() #创建怪物精灵 dragon = MySprite() dragon.load(, 260, 150, 3) dragon.position = 100, 230 group.add(dragon) #创建爆炸动画 explosion = MySprite() explosion.load(,128,128,6) #创建玩家精灵 player = MySprite() player.load(, 100, 100, 4) player.position = 400, 270 group.add(player) #创建子弹精灵 arrow = MySprite() arrow.load(, 40, 16, 1) arrow.position = 800,320 group.add(arrow)

 

在程序开始的时候我们可以看到有一个欢迎界面,为了简单我这里是直接在ps里面做好了图片,然后加载到程序中的:

interface = pygame.image.load()

界面上面还有一个按钮,当鼠标经过的时候,会变成灰底的,因此我们设计一个button类:

简单来说就是预先加载一张正常状态下在的button图片和一个按下状态的button图片,然后判断鼠标的pos是否和button的位置有重合,如果有则显示button被按下时的图片。

关于button的设计我参考了这位博友的教程:,他的教程写的非常不错。

Button(object): def __init__(self, upimage, downimage,position): self.imageUp = pygame.image.load(upimage).convert_alpha() self.imageDown = pygame.image.load(downimage).convert_alpha() self.position = position self.game_start = False def isOver(self): point_x,point_y = pygame.mouse.get_pos() x, y = self. position w, h = self.imageUp.get_size() in_x = x - w/2 < point_x < x + w/2 in_y = y - h/2 < point_y < y + h/2 return in_x and in_y def render(self): w, h = self.imageUp.get_size() x, y = self.position if self.isOver(): screen.blit(self.imageDown, (x-w/2,y-h/2)) else: screen.blit(self.imageUp, (x-w/2, y-h/2)) def is_start(self): if self.isOver(): b1,b2,b3 = pygame.mouse.get_pressed() if b1 == 1: self.game_start = True bg_sound.play_pause() btn_sound.play_sound() bg_sound.play_sound()

可以看到这个button类里面我还添加了一个isStart的方法,他是用来判断是否开始游戏的。当鼠标的位置与button重合,且按下鼠标左键的时候,游戏就开始。

(将game_start变量置为True)然后通过btn_sound.play_sound(),bg_sound.play_sound() 这两句来播放按钮被按下的声音和游戏的背景音乐。

关于pygame中声音的操作,我稍后介绍一下。

 

可以看到程序中还有一个不停滚动的地图,让我们来实现这个滚动地图类:

MyMap(pygame.sprite.Sprite): def __init__(self,x,y): self.x = x self.y = y self.bg = pygame.image.load().convert_alpha() def map_rolling(self): if self.x < -600: self.x = 600 else: self.x -=5 def map_update(self): screen.blit(self.bg, (self.x,self.y)) def set_pos(x,y): self.x =x self.y =y

创建两个地图对象:

#创建地图对象 bg1 = MyMap(0,0) bg2 = MyMap(600,0)

在程序中直接调用update和rolling方法就可以让地图无限的滚动起来了。

bg1.map_update() bg2.map_update() bg1.map_rolling() bg2.map_rolling()

你看明白这个无限滚动地图是如何工作的了吗。首先渲染两张地图背景,一张展示在屏幕上面,一张在屏幕之外预备着(我们暂时看不到),如下图所示:

然后两张地图一起以相同的速度向左移动:

当地图1完全离开屏幕范围的时候,再次将它的坐标置为600,0(这样就又回到了状态1):

这样通过两张图片的不断颠倒位置,然后平移,在我们的视觉中就形成了一张不断滚动的地图了。

 

下面介绍一下如何在pygame中加载并且使用声音:

1.初始化音频模块:

我们要使用的音频系统包含在了pygame的pygame.mixer模块里面。因此在使用音频之前要初始化这个模块:

pygame.mixer.init()

这个初始化模块语句在程序中执行一次就好。

2.加载音频文件:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 网页版扫雷游戏 - 季末的寂寞

    网页版扫雷游戏 - 季末的寂寞

    2017-04-21 13:00

  • 使用Docker分分钟启动常用应用 - 编程玩家

    使用Docker分分钟启动常用应用 - 编程玩家

    2017-04-10 14:00

  • 我,编程和大学 - 外婆的彭湖湾

    我,编程和大学 - 外婆的彭湖湾

    2017-04-09 17:04

  • Html5游戏框架createJS组件--EaselJS - 叶超Luka

    Html5游戏框架createJS组件--EaselJS - 叶超Luka

    2017-03-22 12:01

网友点评