Python游戏编程笔记_BGDwPaP_0303

来源:互联网 发布:拼图游戏制作软件 编辑:程序博客网 时间:2024/05/20 03:05
        本文中的程序来源于《Beginning Game Development with Python and Pygame》一书第72页,注释部分为PosPro原创(PosPro正在尝试通过直接通过在Python代码中增加注释来完成程序分析和进行教学)。

        本程序的目标是:建立一个窗口,通过键盘上的方向键改变背景图位置。


         以下为书中给出的代码,运行后可以通过键盘方向键调整背景图片位置,按一次调整一次,多次按同一个方向键,最终可以把背景图移出窗口范围。然而PosPro认为,作者本意并非如此,因为若仅仅要实现此功能的话,无需监控KEYUP事件。

(PS: 如果完全删除KEYUP部分的话,move_x无法归零,由于x还是会累积之前的move_x结果,而且是在每次执行while循环之后都累加,所以只需要点一下某一个方向键,背景图就会如同冰场上的冰块一样,唰地划出去,效果也很炫)

#-*- coding=utf-8 -*-# 若无上句,即便是在注释中有中文,也会报错,且这一句必须放在第一句!!#本程序来源于《Beginning Game Development with Python and Pygame》 P72#注释 by PosPro#### 程序目标:#####建立一个窗口,通过键盘上的方向键可以改变背景图位置##### 程序框架:#####1 引入所需模块#2 初始化#3 一个循环构成程序核心### 代码重复部分未做详细注释,详情可参考前一篇博客#1 引入所需模块import pygamefrom pygame.locals import *from sys import exit#2 初始化pygame.init()SCREEN_SIZE=(640,480)screen=pygame.display.set_mode(SCREEN_SIZE,0,32)background_image_filename='sushiplate.jpg'backgrd = pygame.image.load(background_image_filename).convert()x,y=0,0move_x, move_y=0,0#3 一个循环构成程序核心while True:for event in pygame.event.get():if event.type==QUIT:exit()#若按下的是方向键,则根据具体方向将背景图位移一个像素if event.type==KEYDOWN:if event.key==K_LEFT:move_x=-1elif event.key==K_RIGHT:move_x=+1elif event.key==K_UP:move_y=-1elif event.key==K_DOWN:move_y=+1#Pospro认为,作者的本意是:在按键弹起后,背景图复位,但其实并未达到此效果elif event.type==KEYUP:if event.key==K_LEFT:move_x=0elif event.key==K_RIGHT:move_x=0elif event.key==K_UP:move_y=0elif event.key==K_DOWN:move_y=0x+=move_xy+=move_y###由于x的值是累加的(因为move_x只有0,1两种可能),所以连续按向上键之后###背景图会最终完全离开窗口!!!###PosPro认为,这恐怕不是作者想要的效果,因为这样的话KEYUP部分就失去了意义screen.fill((0,0,0))screen.blit(backgrd,(x,y))pygame.display.update()


        第二部分代码为PosPro调整后的——运行后的效果是:放开方向键,背景图就回到原位的效果(橡皮筋效果)

import pygamefrom pygame.locals import *from sys import exit#2 初始化pygame.init()SCREEN_SIZE=(640,480)screen=pygame.display.set_mode(SCREEN_SIZE,0,32)background_image_filename='sushiplate.jpg'backgrd = pygame.image.load(background_image_filename).convert()x,y=0,0move_x, move_y=0,0SLIDE_VAL=10 ##稍微增加一些偏移量以便使效果更明显#3 一个循环构成程序核心while True:x,y=0,0##增加了上面这一句,便可以产生放开方向键,背景图就回到原位的效果(橡皮筋效果)for event in pygame.event.get():if event.type==QUIT:exit()#若按下的是方向键,则根据具体方向将背景图位移SLIDE_VAL个像素if event.type==KEYDOWN:if event.key==K_LEFT:move_x=-SLIDE_VALelif event.key==K_RIGHT:move_x=+SLIDE_VALelif event.key==K_UP:move_y=-SLIDE_VALelif event.key==K_DOWN:move_y=+SLIDE_VALelif event.type==KEYUP:if event.key==K_LEFT:move_x=0elif event.key==K_RIGHT:move_x=0elif event.key==K_UP:move_y=0elif event.key==K_DOWN:move_y=0x+=move_xy+=move_yscreen.fill((0,0,0))screen.blit(backgrd,(x,y))pygame.display.update()


        第三部分代码是对第二部分的优化:因为我们可以发现move_x, move_y这个变量完全可以省略。

#-*- coding=utf-8 -*-# 若无上句,即便是在注释中有中文,也会报错,且这一句必须放在第一句!!#本程序来源于《Beginning Game Development with Python and Pygame》 P72#注释 by PosPro#### 程序目标:#####建立一个窗口,通过键盘上的方向键可以改变背景图位置##### 程序框架:#####1 引入所需模块#2 初始化#3 一个循环构成程序核心### 代码重复部分未做详细注释,详情可参考前一篇博客#1 引入所需模块import pygamefrom pygame.locals import *from sys import exit#2 初始化pygame.init()SCREEN_SIZE=(640,480)screen=pygame.display.set_mode(SCREEN_SIZE,0,32)background_image_filename='sushiplate.jpg'backgrd = pygame.image.load(background_image_filename).convert()x,y=0,0SLIDE_VAL=10 ##稍微增加一些偏移量以便使效果更明显#3 一个循环构成程序核心while True:##增加了上面这一句,便可以产生放开方向键,背景图就回到原位的效果(橡皮筋效果)for event in pygame.event.get():if event.type==QUIT:exit()#若按下的是方向键,则根据具体方向将背景图位移SLIDE_VAL个像素if event.type==KEYDOWN:if event.key==K_LEFT:x=-SLIDE_VALelif event.key==K_RIGHT:x=+SLIDE_VALelif event.key==K_UP:y=-SLIDE_VALelif event.key==K_DOWN:y=+SLIDE_VALelif event.type==KEYUP:if event.key==K_LEFT:x=0elif event.key==K_RIGHT:x=0elif event.key==K_UP:y=0elif event.key==K_DOWN:y=0screen.fill((0,0,0))screen.blit(backgrd,(x,y))pygame.display.update()


0 0
原创粉丝点击