Python游戏编程笔记_BGDwPaP_0302

5 篇文章 0 订阅
3 篇文章 0 订阅

        本文中的程序来源于《Beginning Game Development with Python and Pygame》一书第70页,注释部分为PosPro原创(PosPro正在尝试通过注释来理解程序和进行教学),本程序的设计目标是建立一个(没有滑动条的)窗口,窗口中的文本显示所有接受到的事件(如鼠标移动、键盘输入等),可以直观地给出关于Event的全部信息。

        对于pygame中具体函数的定义,可以参考在线文档:http://www.pygame.org/docs/


#-*- coding=utf-8 -*-
# 若无上句,即便是在注释中有中文,也会报错,且这一句必须放在第一句!!

#本程序来源于《Beginning Game Development with Python and Pygame》 P70
#注释 by PosPro
#### 程序目标:####
#建立一个窗口,窗口以一屏面积显示所有接受到的事件:鼠标移动、键盘输入等
#可以发现鼠标将提供相当丰富(啰嗦)的信息,若只需要位置信息还是用pygame.mouse_get_pos()比较好
#
#### 程序框架:####
#1 引入所需模块
#2 初始化
#3 字体设置
#4 一个循环构成程序核心
#**     收集所有产生的event
#**     若累计的信息超过一屏所能显示的范围,则去除较早的event信息
#**     设置退出条件
#**     利用Surface对象对屏幕进行绘制


### 代码重复部分未做详细注释,详情可参考前一篇博客


#1 引入所需模块
import pygame
from pygame.locals import *
from sys import exit


#2 初始化
pygame.init()
SCREEN_SIZE=(800,600)
screen=pygame.display.set_mode(SCREEN_SIZE,0,32)
#通过一个元组tuple定义了屏幕尺寸,而且这个元组可能很方便地在后面被调用


#3 字体设置
font=pygame.font.SysFont("arial",16)
font_height=font.get_linesize()
MAX_LINES=SCREEN_SIZE[1]/font_height
event_text=[]
### 通过pygame.font.SysFont()设置字体(并得到一个返回值)
### 获取字体高度(也即行高度)
### MAX_LINES是一屏最多显示的行数,多出的部分将被忽略


#4 一个循环构成程序核心
while True:
        #**     收集所有产生的event
	event=pygame.event.wait()
	event_text.append(str(event))
        ### 程序停滞,等待新event产生,event产生后即把事件信息保存在list:event_text中

        #**     若累计的信息超过一屏所能显示的范围,则去除较早的event信息
	event_text=event_text[-MAX_LINES:]
	###如果一屏最多显示20行,则只有在list中最后20个event信息有机会显示
	###[-20:]就是截取倒数20个至最后一个event信息
	###方法很巧妙,注意冒号不能丢
	
	###### 书中原句为:########
	### event_text=event_text[-SCREEN_SIZE[1]/font_height:]
	### 虽然巧妙,却造成理解上的困难
	### 本着 “直观就是美”的原则,我将此句拆成两句
	### MAX_LINES=SCREEN_SIZE[1]/font_height 并放在循环体之外
	### event_text=event_text[-MAX_LINES:]
	### 采用这种方式MAX_LINES设置后就无法改变,不适合窗口大小可变的情况
	##########################
	### 对于不易理解的部分,可以考虑打印至txt文件,然后仔细分析

	#**     设置退出条件
	if event.type==QUIT:
		exit()
		
        #**     利用Surface对象对屏幕进行绘制
	screen.fill((0,0,0)) #设成黑底色,下面设字体为绿色——Matrix的既视感

	y=SCREEN_SIZE[1]-font_height #最靠近窗口底边的那一行起始位置
	for text in reversed(event_text):       
		screen.blit(font.render(text, True, (0,255,0)),(0,y))
		y-=font_height #窗口左上角作为左边原点,向下向右为增大方向
		
	###因为y的起始值是最靠近底边那一行的位置,所以要从list中最后一条记录开始写
	###render()函数的用法:
	###render(text, antialias, color, background=None) -> Surface
	###pygame无法把字符直接写在某个Surface上,只能通过先通过render产生一个Surface
	###在通过blit涂抹到对应位置
	###第一个参数:字符串,只能有一行,换行符将被忽略
	###第二个参数:是否柔化字体边沿
	###三四参数分别为字体颜色和底色
        ###font.render中的这个font是指在前文中,自己定义的那个font(即"16号Arial")

	pygame.display.update()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值