从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都具有一定的操作性和娱乐性。例程中汇尽量覆盖到以前所讲的pygame中方方面面,如果看到哪一步不明白,那就再回去复习复习,基本没有人会看一遍什么都记住什么都掌握的,重复是学习之母,实践是掌握一门技艺的最好手段!

这次就先从一个最简单的程序开始,说实话有些太简单我都不好意思拿出手了,不过从简单的开始,容易建立自信培养兴趣。兴趣是学习之母嘛。我们这次做一个画板,类似Windows里自带的画板,还记不记得第一次接触电脑用画板时的惊叹?现在想起来其实那个真的非常简陋,不过我们的比那个还要朴素,因为打算一篇讲完,就不追加很多功能了,等你把这一次讲解的都理解了,很容易可以自己给它增加新的机能。没准,你就开发出一个非常牛X的画图工具击败了Photoshop,然后日进斗金名垂千古(众:喂,别做梦了!)……

功能样式

做之前总要有个数,我们的程序做出来会是个什么样子。所谓从顶到底或者从底到顶啥的,咱就不研究了,这个小程序随你怎么弄了,而且我们主要是来熟悉pygame,高级的软件设计方法一概不谈~

因为是抄袭画图板,也就是鼠标按住了能在上面涂涂画画就是了,选区、放大镜、滴管功能啥的就统统不要了。画笔的话,基本的铅笔画笔总是要的,也可以考虑加一个刷子画笔,这样有一点变化;然后颜色应该是要的,否则太过单调了,不过调色板啥的就暂时免了,提供几个候选色就好了;然后橡皮……橡皮不就是白色的画笔么?免了免了!还有啥?似乎够了。。。 OK,开始吧!

框架

pygame程序的框架都是差不多的,考虑到我们这个程序的实际作用,大概建立这样的一个代码架子就可以了。

1234567891011121314151617181920212223242526272829303132333435 import pygamefrom pygame.locals import * class Brush():    def __init__(self):        pass class Painter():    def __init__(self):        self.screen = pygame.display.set_mode((800, 600))        pygame.display.set_caption(\”Painter\”)        self.clock = pygame.time.Clock()     def run(self):        self.screen.fill((255, 255, 255))        while True:            # max fps limit            self.clock.tick(30)            for event in pygame.event.get():                if event.type == QUIT:                    return                elif event.type == KEYDOWN:                    pass                elif event.type == MOUSEBUTTONDOWN:                    pass                elif event.type == MOUSEMOTION:                    pass                elif event.type == MOUSEBUTTONUP:                    pass             pygame.display.update() if __name__ == \’__main__\’:    app = Painter()    app.run()

这个非常简单,准备好画板类,画笔类,暂时还都是空的,其实也就是做了一些pygame的初始化工作。如果这样还不能读懂的话,您需要把前面22篇从头再看看,有几句话不懂就看几遍:)

这里只有一点要注意一下,我们把帧率控制在了30,没有人希望在画画的时候,CPU风扇狂转的。而且只是画板,没有自动运动的物体,纯粹的交互驱动,我们也不需要很高的刷新率。

第一次的绘图代码

按住鼠标然后在上面移动就画东西,我们很容易可以想到这个流程:

123 按下左键  →  绘制flag开移动鼠标  →  flag开的时候,在移动坐标上留下痕迹放开左键  →  绘制flag

立刻试一试吧:

123456789101112131415161718192021222324252627282930313233 class Brush():    def __init__(self, screen):        self.screen = screen        self.color = (0, 0, 0)        self.size  = 1        self.drawing = False     def start_draw(self):        self.drawing = True    def end_draw(self):        self.drawing = False     def draw(self, pos):        if self.drawing:            pygame.draw.circle(self.screen, self.color, pos,an>(self.screen, self.color, pos,λ复习复习,基本没有人会看一遍什么都记住什么都掌握的,重复是学习之母,实践是掌握一门技艺的最好手段!

这次就先从一个最简单的程序开始,说实话有些太简单我都不好意思拿出手了,不过从简单的开始,容易建立自信培养兴趣。兴趣是学习之母嘛。我们这次做一个画板,类似Windows里自带的画板,还记不记得第一次接触电脑用画板时的惊叹?现在想起来其实那个真的非常简陋,不过我们的比那个还要朴素,因为打算一篇讲完,就不追加很多功能了,等你把这一次讲解的都理解了,很容易可以自己给它增加新的机能。没准,你就开发出一个非常牛X的画图工具击败了Photoshop,然后日进斗金名垂千古(众:喂,别做梦了!)……

功能样式

做之前总要有个数,我们的程序做出来会是个什么样子。所谓从顶到底或者从底到顶啥的,咱就不研究了,这个小程序随你怎么弄了,而且我们主要是来熟悉pygame,高级的软件设计方法一概不谈~

因为是抄袭画图板,也就是鼠标按住了能在上面涂涂画画就是了,选区、放大镜、滴管功能啥的就统统不要了。画笔的话,基本的铅笔画笔总是要的,也可以考虑加一个刷子画笔,这样有一点变化;然后颜色应该是要的,否则太过单调了,不过调色板啥的就暂时免了,提供几个候选色就好了;然后橡皮……橡皮不就是白色的画笔么?免了免了!还有啥?似乎够了。。。 OK,开始吧!

框架

pygame程序的框架都是差不多的,考虑到我们这个程序的实际作用,大概建立这样的一个代码架子就可以了。

1234567891011121314151617181920212223242526272829303132333435 import pygamefrom pygame.locals import * class Brush():    def __init__(self):        pass class Painter():    def __init__(self):        self.screen = pygame.display.set_mode((800, 600))        pygame.display.set_caption(\”Painter\”)        self.clock = pygame.time.Clock()     def run(self):        self.screen.fill((255, 255, 255))        while True:            # max fps limit            self.clock.tick(30)            for event in pygame.event.get():                if event.type == QUIT:                    return                elif event.type == KEYDOWN:                    pass                elif event.type == MOUSEBUTTONDOWN:                    pass                elif event.type == MOUSEMOTION:                    pass                elif event.type == MOUSEBUTTONUP:                    pass             pygame.display.update() if __name__ == \’__main__\’:    app = Painter()    app.run()

这个非常简单,准备好画板类,画笔类,暂时还都是空的,其实也就是做了一些pygame的初始化工作。如果这样还不能读懂的话,您需要把前面22篇从头再看看,有几句话不懂就看几遍:)

这里只有一点要注意一下,我们把帧率控制在了30,没有人希望在画画的时候,CPU风扇狂转的。而且只是画板,没有自动运动的物体,纯粹的交互驱动,我们也不需要很高的刷新率。

第一次的绘图代码

按住鼠标然后在上面移动就画东西,我们很容易可以想到这个流程:

123 按下左键  →  绘制flag开移动鼠标  →  flag开的时候,在移动坐标上留下痕迹放开左键  →  绘制flag

立刻试一试吧:

123456789101112131415161718192021222324252627282930313233 class Brush():    def __init__(self, screen):        self.screen = screen        self.color = (0, 0, 0)        self.size  = 1        self.drawing = False     def start_draw(self):        self.drawing = True    def end_draw(self):        self.drawing = False     def draw(self, pos):        if self.drawing:            pygame.draw.circle(self.screen, self.color, pos,> self.size) class Painter():    def