对于有C/C++或Java基础的朋友来说,我推荐Swaroop C H的《A Byte of Python》作为转型教材。总体而言,这本书比较简洁清晰,把重点的线索性的知识点梳理了一遍,看完这本书基本上也就对Python有了整体概念了。个人体会是,Python确实是一种可以体现简洁之美的语言
出于个人兴趣,第二本书我选择了Will McGugan的《Beginning Game Development with Python and Pygame》。在阅读过程中,我发现通过代码+注释可以加深对书本知识理解,我也试图逐渐培养自己的代码和注释风格,在这里我把学习过程中用到的代码(以及自己加的注释)在这里展示出来,与同好共享。
标题解释:
BGDwPaP即《Beginning Game Development with Python and Pygame》首字母缩写
0301: 03表示出于原书第三章,01表示是我写的第一篇博客
# -*- coding=utf-8 -*- # 若无上句,即便是在注释中有中文,也会报错,且这一句必须放在第一句!! #本程序来源于《Beginning Game Development with Python and Pygame》 #目的是显示一幅背景图,并把鼠标换成定制图像(一只河豚!!) #程序框架 #1 指定资源位置——背景图和鼠标图 #2 引入所需模块 #3 pygame的初始化 #4 设置窗口、载入背景 #5 一个循环构成程序核心 # 设置退出条件 # 将背景图涂抹至窗口 # 找到鼠标位置,并将鼠标图像替换 # 更新图像(将缓存中的图像显示) #1 指定资源位置——背景图和鼠标图 background_image_filename='sushiplate.jpg' cursor_image_filename='fugu.png' ### 用字符串来表示文件路径,直接给出文件名是指,该文件与py文件放在同一目录下 #2 引入所需模块 import pygame from pygame.locals import * from sys import exit ### locals中包含很多常用函数和常量 #3 pygame的初始化 pygame.init() ### 初始化pygame中的所有子模块,但耗时略长 ### 如果你想节省时间,也可以有针对性地对每一个子模块进行初始化,如pygame.sound.init() #4 设置窗口、载入背景 screen=pygame.display.set_mode((640,480),0,32) pygame.display.set_caption("Hello World Redux!") ### pygame用Surface类来对窗口(或全屏幕)进行操作,pygame.display.set_mode的返回值 ### 正是这样一个对象 ### set_mode的三组参数分别为:(像素长,高),标志值(设置窗口参数),色彩位深度 ### set_caption则如其名所述,设置窗口标题。个人觉得此函数的调用方法有些特别,无返回值, ### 并且似乎与刚刚得到的screen也无联系,以后再分析 background=pygame.image.load(background_image_filename).convert() cursorImage=pygame.image.load(cursor_image_filename).convert_alpha() ### load函数的返回值也是一个Surface对象,不过不同于screen,load的返回值实质上是 ### 保存在内存区域一组数据(体现一幅图),但暂时不会显示出来 ### convert则是把load获得的结果转换成和窗口一样的设置(色彩位深度) ### 对于鼠标图像使用了convert_alpha, 因为此图像包含alpha通道数据 ### 图像的alpha通道可以作为选择区/非选择区的区分,同时也是透明度的体现 #5 一个循环构成程序核心 ### 每次屏幕刷新都执行一遍此循环 while True: # 设置退出条件 for event in pygame.event.get(): if event.type==QUIT: exit() ### event体现的是程序外的世界(操作系统/鼠标/键盘/游戏手柄)给出的信息 # 将背景图涂抹至窗口 screen.blit(background, (0,0)) ### 这一句才是真正确定窗口(背景)显示什么 ### 第一个参数是内存中一组图像数据(先load再convert之后得到),第二个数据 ### 参考点起始位置, ### 其结果仍然只是表示图像的内存中的一组数据,直到display.update被调用 # 找到鼠标位置,并将鼠标图像替换 x,y=pygame.mouse.get_pos() x-=cursorImage.get_width()/2 y-=cursorImage.get_height()/2 screen.blit(cursorImage,(x,y)) ### 找到鼠标的位置,通过简单运算,将图像中心点(而不是左上角)放在鼠标尖端的正下方 ### 再次调用blit,其实我的理解时,再次调用时,就像画油画一样,在背景上 ### 的某块区域画上鼠标图像 # 更新图像(将缓存中的图像显示) pygame.display.update() ### 将内存(或曰Buffer)中的图像数据真正显示在窗口中
sushiplate.jpg-----http://img.blog.csdn.net/20150602090605922
fugu.png---http://img.blog.csdn.net/20150602090818597