Python游戏编程笔记_BGDwPaP_0303

Python编程小白的第一本 Python 入门书) 学习笔记2——代码练习 来源:编程小白的第一本 Python 入门书:http://www.ituring.com.cn/book/1863 学习上面链接内容,自己敲了一遍里面的练习。。。。 代码练习 阅读详情
        本文中的程序来源于《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 pygame
from 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,0
move_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=-1
			elif event.key==K_RIGHT:
				move_x=+1
			elif event.key==K_UP:
				move_y=-1
			elif event.key==K_DOWN:
				move_y=+1
		#Pospro认为,作者的本意是:在按键弹起后,背景图复位,但其实并未达到此效果		
		elif event.type==KEYUP:
			if event.key==K_LEFT:
				move_x=0
			elif event.key==K_RIGHT:
				move_x=0
			elif event.key==K_UP:
				move_y=0
			elif event.key==K_DOWN:
				move_y=0

	x+=move_x
	y+=move_y
	###由于x的值是累加的(因为move_x只有0,1两种可能),所以连续按向上键之后
	###背景图会最终完全离开窗口!!!
	###PosPro认为,这恐怕不是作者想要的效果,因为这样的话KEYUP部分就失去了意义

	screen.fill((0,0,0))
	screen.blit(backgrd,(x,y))
	pygame.display.update()
			


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

import pygame
from 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,0
move_x, move_y=0,0
SLIDE_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_VAL
			elif event.key==K_RIGHT:
				move_x=+SLIDE_VAL
			elif event.key==K_UP:
				move_y=-SLIDE_VAL
			elif event.key==K_DOWN:
				move_y=+SLIDE_VAL
				
		elif event.type==KEYUP:
			if event.key==K_LEFT:
				move_x=0
			elif event.key==K_RIGHT:
				move_x=0
			elif event.key==K_UP:
				move_y=0
			elif event.key==K_DOWN:
				move_y=0

	x+=move_x
	y+=move_y

	screen.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 pygame
from 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,0
SLIDE_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_VAL
			elif event.key==K_RIGHT:
				x=+SLIDE_VAL
			elif event.key==K_UP:
				y=-SLIDE_VAL
			elif event.key==K_DOWN:
				y=+SLIDE_VAL
				
		elif event.type==KEYUP:
			if event.key==K_LEFT:
				x=0
			elif event.key==K_RIGHT:
				x=0
			elif event.key==K_UP:
				y=0
			elif event.key==K_DOWN:
				y=0
	
	screen.fill((0,0,0))
	screen.blit(backgrd,(x,y))
	pygame.display.update()
			


python屏幕数字符号雨(已验证) import pygame import random def main(): # 初始化pygame pygame.init() # 默认不全屏 fullscreen = False # 窗口未全屏宽和高 WIDTH, HEIGHT = 1100, 600 init_width, init_height = WIDTH, HEIGHT # 字块大小,宽,高 suface_height = 18 # 字体大小 . 阅读详情

相关推荐

Pygame从0实战4

1.Pygame从0实战4    实践:利用pygame.tranform中的rotate()实现乌龟沿着墙壁爬行的功能pygame.transformpygame module to tranform surfaces 用来转换Surface对象的Pygame模块练习: rotate()实现贴边走,注意头的方向官网:rotate: rotate an image rotate(Surface, ...

you are sherlocked by me! 467

第002讲:用Python设计第一个游戏 ---学习笔记

(出处: 鱼C论坛) 《零基础入门学习Python》第002讲:用Python设计第一个游戏 测试题: 0. 什么是BIF? 1. 用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF? 2. 在 Python 看来:'FishC' 和 'fishc' 一样吗? 3. 在小甲鱼看来,Python 中什么是最重要的?你赞同吗? 4. 这节课的例子中

zjq001X的博客 2675

python pygame常用操作

首先要导入需要使用的模块pygame import pygame #导入pygame模块 from sys import exit # 导入退出鼠标点击事件 from math import pi # 导入math模块π import time # 导入时间模块 1. 初始化pygame pygame.init() pygame.font.i...

doasmaster的博客 3768

PythonPygame游戏-从入门到精通(6)

掌握了小小的像素,我们可以使用更加复杂一点的东西了,对,就是图像,无数的像素的集合~还记得上次我们为了生成的一张图片,花了无数时间,还好一般游戏不会在游戏的过程中动态生成图像,都是将画好的作为资源封装到游戏中。对2D游戏,图像可能就是一些背景、角色等,而3D游戏则往往是大量的贴图。 虽然是基础,这里还是要罗嗦一下,之前说的RBG图像,在游戏中我们往往使用RGBA图像,这个A是alpha,也就

gaoxin12345679的专栏 4976

游戏编程入门学习笔记35——推倒重来篇——《游戏编程入门》示例源码中的两个大bug

(csdn是有很多很傻比的地方的,比如已上传资源无法修改、删除,比如代码框不支持tab,比如草稿箱内容会永久保存在摘要视图中... 原文写于8月12日,今天删除重贴一遍,当然这也意味着这里沉寂两个月之后又要动工了) 接下来的工作重点放在代码重构上,所以取名“推倒重来篇”。 有些基本构想放到后面说,先来讲讲这两天发现原教材中两个bug的过程。   一切起源于我对Direct3D

猪哥的白驼山 936

简单的D0L-系统生成分形

简单的D0L-系统 描述 考虑由a、b组成的字符串,每一个字母代表一个改写规则,例如,规定a->ab,b->a,分别表示a可被改写为ab,b被改写为a。改写过程从一个被称为 公理 的字符串开始。 例如: 公理omega:b 改写规则:a->ab; b->a 第1次改写:a 第2次改写:ab 第3次改写:aba 第4次改写:abaab ..

chenlnehc的博客 1469

key_event 键盘模拟(转集)

键盘表 VB中的键码 常数键码值描述 Const vbKeyLButton = 1  鼠标左键 Const vbKeyRButton = 2  鼠标右键 Const vbKeyCancel = 3 CANCEL 键 Const vbKeyMButton = 4  鼠标中键 Const vbKeyBack = 8 Backspace 键

Linyee编程专栏 5332

java.awt.event.KeyEvent(键盘按键对应的KeyCode)

/* * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * */ package java.awt.event; import java.

光阴迷客的知识库 1万+

Python从入门到实践习题12-4打印event.key的值的两种答案

一、简易版 这种实现方式,最终只是在终端打印出event.key的值以及其类型。 import pygame,sys def run_game(): '''这个函数能够在我们按下键盘按键的时候打印出event.key以及其数据类型''' pygame.init() screen=pygame.display.set_mode((100,100)) pyg...

weixin_44520259的博客 4221

python游戏编程入门 免费-Python游戏编程入门2

I/O、数据和字体:Trivia游戏本章包括如下内容:Python数据类型获取用户输入处理异常Mad Lib游戏操作文本文件操作二进制文件Trivia游戏其他的不说,我先去自己学习文件类型和字符串类型去了。这部分讲道理换行符还是有点丑陋的,Python还需要想着各种地方加换行符,狗屎。不去想书中示例丑陋的换行符,只要不影响其中几个重要的游戏效果就行。实验空行会不会对于trivia游戏的结果产生影响...

weixin_37988176的博客 241

PythonPygame游戏-从入门到精通(5)

这次开始是真正的游戏编程,以前都是基础的基础啊。 电脑游戏总是倾向于图像化的,尽量的要看得到听得到(现在的技术基本还局限于这两个感官),游戏开发者会花无数的力气在图像上,提升图像效果是游戏开发永恒的话题。这几次主要讲述游戏中的视觉。 像素的威力 凑近显示器,你能看到图像是由一个一个点构成,这就是像素。至于屏幕分辨率的意义,也就不用多说了吧,一个1280×1024的显示器,有着13

gaoxin12345679的专栏 1166

pygame基本框架语句

1.from pygame.locals import * //“*”代表“所有” 2.screen = pygame.display.set_mode(size) //创建一个窗口,将其命名为一个叫“screen”的surface1   screen.fill(0,0,0) //填充颜色,括号中是三原色(Red,Green,Blue),(0,0,0)表示黑色,(255,2

500.13 Server too busy 2271

PythonPygame)颜色处理

像素的威力 凑近显示器,你能看到图像是由一个一个点构成,这就是像素。至于屏幕分辨率的意义,一个1280×1024的显示器,有着1310720个像素,一般的32位RGB系统,每个像素可以显示16.7百万种颜色。我们可以写一个小程序来显示这么多的颜色: #coding=utf-8 ''' Created on 2017年3月2日 @author: zxt ''' import pygam

知行流浪 1万+

Python游戏编程笔记_BGDwPaP_0301

《Beginning Game Development with Python and Pygame学习笔记

PosPro的专栏 749

pythonpygame背景颜色为啥没生效_pygame screen.fill((0,0,255)) 为什么设置不了背影颜色?...

电脑系统macOS Catalina 版本10.15.3学习《Python编程 从入门到实践》ing 使用Sublime Text编写程序在尝试编写书中12.3.2设置背景色一节时,发现无论如何修改背景色参数都是深灰色self.bg_color = (230, 230, 230)经过各种查询看到说是mac从Mojave开始与pygame不兼容导致,测试是否由此引起可以使用终端运行示例...

weixin_42641385的博客 2721

Python pygame study 2

#全屏显示 screen=pygame.display.set_mode((640,480),0,32) screen=pygame.display.set_mode((640,480),FULLSCREEN,32) #获得机器可以支持的显示模式 pygame.disp.list_modes() #将f绑定给全屏切换 if event.type == KEYDOWN: if ev...

qq_37312720的博客 213

Appium键盘处理

Appium的键盘处理。

JingHJ_2008的专栏 2093

从零开始做一个基于pygame引擎的躲闪小游戏(一)-画矩形、画圆、简单的碰撞检测

前面我们已经搭建好了pygame开发的环境:http://blog.csdn.net/v_xchen_v/article/details/52698428 1)Step:从在屏幕上画出一个方块开始 import pygame pygame.init() screen_tltle=pygame.display.set_caption("Hide Game") screen =pygame.di

赞美月亮的专栏 3963
上一篇: Python游戏编程笔记_BGDwPaP_0302
下一篇: 解决“Sublime Text 2”中,中文输入法不跟随的问题_PnS001
PosPro
博客等级 码龄12年 28粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值