python制作galgame引擎(二)

2013年1月27日 | 分类: Python | 标签:

  上一篇主要涉及的其实是我个人的一些初期目标,以及解决方式。虽然提了提Parser类的实现,但是代码毕竟不是主要讨论的对象。而且很明显的,上一篇几乎与galgame制作无关……

  这一篇主要讨论的实现,中心目标是实现一个“能显示背景图片,播放背景音乐,如同galgame般显示文本”的试验程序。称之为试验程序的主要原因是:它的代码可能很乱,命名也是随意命名的,无视耦合……这部分代码只用来显示相关代码是否正常运行——不过说起来,大多数人都是这样做的?

  上一篇忘了说,这个项目已经完成的部分我已经上传至github(最近应该没问题了吧?),有兴趣的欢迎围观和clone,branch也是大大欢迎的。地址是这个:项目地址

  关于git已经github的使用,有需要的话,请看一下这篇博客 git教学,或者看看官方的文档。

  不多说了,接下来是正文部分。

   

  上一篇中,通过Parser类,可以得到三个变量,分别是背景图片的名字,背景音乐的名字,和剧情文本的内容,但是我不准备引用这三个变量。原因是,文件读入的文字,会受操作系统的文字编码影响。当然一般来说是没问题的,但是若是编写跨平台的程序时,就会很麻烦。最终完成的程序是能够跨平台运行的,文字编码这部分当然使得我很是困扰,这部分说长不长,说短不短,我留到最后来说说。

  后面的内容涉及了许多pygame的内容,官方文档很棒,eyehere的系列文章也相当棒,没接触过pygame的建议都去看看。eyehere

  下面这几个变量已经是所要处理的全部内容了……相当简单,名字是随意写的。

backgound = ‘test.jpg’

bgm = ‘sanae.wav’

text = u’博主正在下一盘大棋……’

   

  完成上文那个简单目标的代码如下

# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
from sys import exit

background = 'test.jpg'
bgm = 'sanae.wav'
text = u'博主正在下一盘大棋……'

##以下三行几乎是定式,至少我都有用
pygame.init()
screen = pygame.display.set_mode((800,600),0,32)
clock = pygame.time.Clock()

##标题栏上的名字,或许你习惯写成游戏的名字?
pygame.display.set_caption('Sanae')

##这个是把图片转成surface,surface是pygame中一个很重要的概念
background = pygame.image.load(background).convert()

##读入bgm
pygame.mixer.music.load(bgm)

##载入字体,我这里用的是hksn,你可以随便下,雅黑很不错。记住是要能显示中文的
font = pygame.font.Font("hksn.ttf",20)
##把text内容转成surface,True那个是字体平滑还是什么的,最后那个是颜色
text_surface = font.render(text,True,(0,0,255))

##初始化一个供绑定的TextRect
TextRect = pygame.Surface((200,200))
##白色填充
TextRect.fill((0xFF,0xFF,0xFF))
##把文本内容绑定到TextRect上去
TextRect.blit(text_surface,(0,0))

##播放背景音乐
pygame.mixer.music.play(-1,0,0)

##游戏主循环
while True:
    for event in pygame.event.get():
        exit()
    
    ##限定帧为5,事实上,galgame的帧数通常都很低很低,我估计1都行
    clock.tick(5)
    
    ##下面把背景图片和文字绑定到游戏屏幕上去,注意顺序
    screen.blit(background,(0,0))
    screen.blit(TextRec,(0,0))
    pygame.display.update()

 

  就这样,现在一个能播放音乐,能展示一幅图片,还能丑丑地显示文字的小玩意就做好了。当然始终要明白:这只是为了测试相关功能实现的试验程序而已,真正的程序可不能这么水。但是你要知道,真正程序的核心,也就这样……很简单?

  这篇内容不多,我本来想接着写下去的,但是考虑到下面的代码很多,估计篇幅很长,干脆拆成两篇,阅读更省力~~下一篇的主要是封装,以及异常。

 

目前还没有任何评论.