【python游戏编程之旅】第二篇--pygame中的IO、数据

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/4966899.html

这次我们将一起学习pygame中的IO、数据和更多关于字体打印的知识。

一、python输入输出

1.输出

python一次可以打印多个变量,只要用一个逗号将每个变量隔开就可以了。比如:

A = 123
B = "ABC"
C = 456
D = "DEF"
print(A,B,C,D)

有些python内部系统的值我们也是可以打印出来的。比如:

import sys
print(sys.copyright)
print(sys.platform)
print(sys.version)

2.获取用户的输入:

我们可以使用input函数来完成从控制台的输入,这个函数的返回值是一个字符串。

name = raw_input("Hi! what‘s your name?")
print(name)

3.异常处理

一个错误的数值输入也是可能导致程序崩溃的(当需要输入数字进行计算的时候,用户却输入了一个非数值的变量)。因此我们需要需要使用try...except语句块来捕捉异常。

将感觉会有异常产生的代码放在try:语句块里面,如果产生异常的话,将会执行except:语句块里面的代码,程序并不会崩溃。

s = input("Enter a number: ")
try:
    number = float(s)
except:
    number = 0
answer = number * number
print(number,"*",number,"=",answer)

上面的那个程序,当你输入了非法的数据以后,程序将会显示(0, ‘*‘, 0, ‘=‘, 0)。

二、文件输入与输出

1.操作文本文件:

要在python里面打开一个文件,可以使用open函数,第一个参数是文件名,第二个参数是打开模式,下表展示了常见的打开模式。

打开模式 说明
“r” 以读取的方式打开文件
"w" 以写入的方式打开文件
"a" 以追加的方式打开文件
"r+" 以读写的方式打开文件
"w+" 以写读的方式打开文件
"a+" 以追加和读取的方式打开文件
#调用open函数打开一个文件
file =open("data.txt","r")
#在完成操作后要将文件关闭
file.close()

要把数据写入到一个文件,需要使用“w”属性打开文件,然后使用file.write()函数写入,另外还有writeline()函数,顾名思义,它是将单独的一行写入到文件中,(还有一种写多行的形式是file.writelines(),用来写入一个字符串列表)。对于需要保存为单独一行的文本,我们可以在文本末尾添加上一个换行符\n。

file = open("data2.txt", "w")
file.write("abcdefg\n")
file.close()

如果要一次性将一个字符串列表中的数行写入到文本中可以这样做:

text_lines = [
    "abc\n",
    "efg\n",
    "hij\n" ]

file = open("data.txt", "w")
file.writelines(text_lines)
file.close()

从文本文件读取内容

要读取一个文件,我们必须先打开它,代码和写入的代码类似,只需要改变一下文件模式:

file = open("data.txt", "r")

当文件打开以后,就可以读取其中的数据了,有多个函数可以完成这个功能,我们一一介绍一下。

每次读取一个字符可以使用file.read(n),n是要读取的字符的数目。

char = file.read(10)
print (char)

#这段代码会从文件中的当前指针位置读取10个字符
#像这样重复的调用,将继续从该文件读取更多的字符
#并且向前推进指针的位置

如果要把整个文件读取到一个字符串变量中,可以使用下面的代码完成:

file = open("data.txt", "r")
all_data = file.readlines()
print(all_data)
file.close()

调用file.readlines()函数会创建一个列表,其中每一行都是列表,因此可以使用一个for循环将它打印出来:

print("Lines: ", len(all_data))
for line in all_data:
    print(line.strip())

String.strip()方法会删去行末的换行字符。

2.操作二进制文件

二进制文件打开模式:

打开模式 说明
“rb” 以读取的方式打开二进制文件
"wb" 以写入的方式打开二进制文件
"ab" 以追加的方式打开二进制文件
"rb+" 以读取写入的方式打开二进制文件
"wb+" 以写入读取的方式打开二进制文件
"ab+" 以追加和读取的方式打开二进制文件

打开二进制文件方法和文本文件类似。

1.写入二进制文件:

将数据写到二进制文件的时候需要使用struct.pack函数,它可以将数据打包,当读取的时候使用的是struct.unpack。struct是python的一个模块,所以使用前需要先引入。

import struct

file = open("bin.dat", "wb")
for n in range(100):
    data = struct.pack(‘i‘, n)
    file.write(data)
file.close()

#这段代码是将100个整数写入到文件中

2.读取二进制文件

file = open("bin.dat", "rb")
size = struct.calcsize("i")
bytes_read = file.read(size)
while bytes_read:
    value = struct.unpack("i", bytes_read)
    value = value[0]
    print(value, end=" ")
    bytes_read = file.read(size)
file.close()
struct.calcsize("i")可以计算出一个int类型的大小,以便让struct.unpack知道应该读取多少个字节的数据。

学了io和数据以后,我们完全可以制作一个类似于回答问题闯关类的游戏,将问题和答案都存在文件中,然后在程序里面加载它。答对就进行到下一题。
时间: 11-17

【python游戏编程之旅】第二篇--pygame中的IO、数据的相关文章

【python游戏编程之旅】第一篇---初识pygame

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 参考书籍:<python游戏编程入门> 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发.允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块可以支持多个操作系统.用它来开发小游戏非常适合. 可以去http://www.pygame.org/hifi.html 下载并安装使用pygame. 二

【python游戏编程之旅】第七篇---pygame中的冲突检测技术

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs.com/msxh/p/5013555.html 这次我们来一起学习pygame中的冲突检测技术. pygame支持非常多的冲突检测技术,我们来一一的看一下他们是如何使用的: 一.精灵与精灵之间的冲突检测 1.两个精灵之间的矩形检测 在只有两个精灵的时候我们可以使用pygame.sprite.col

【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/p/5027688.html 这次我们来一起学习在pygame游戏里面常用的一些数据结构: 数据,列表,元组,队列,栈. 一.数组与列表 数组可以理解为简化的列表.像我们之前使用的pygame.sprite.Group这样的精灵组,也是一个列表.列表的元素是可变的,它具有添加.删除.搜索.排序等多种

【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷跑类游戏综合运用以前学到的知识. 程序下载地址:http://yunpan.cn/cLIcJgTvq4tZS 访问密码 901f 源代码网盘地址:http://yunpan.cn/cLIc67S4nNRFY 访问密码 c139 github地址:https://github.com/XINCGer/

【Windows编程】系列第二篇:Windows SDK创建基本控件

在Win32 SDK环境下,怎么来创建常用的那些基本控件呢?我们知道如果用MFC,简单的拖放即可完成大多数控件的创建,但是我们既然是用Windows SDK API编程,当然是从根上解决这个问题,实际上MFC的下层也是通过这些API完成的. 实际上控件也是窗口,只不过是被微软预先创建好的一种窗口类,比如button就是一个类名为“BUTTON”的类.既然控件实际上是窗口,当然也是用CreateWindow或者CreateWindowEx这个函数来完成的,第二个函数除了多一个扩展风格之外,其他完全

spark 深入学习 05】RDD编程之旅基础篇-01

---------------- 本节内容 1.RDD的工作流程 2.WordCount解说  · shell版本WordCount  · java版本WordCount ---------------- 一.RDD工作流程 1. RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当作一个数组,这样的理解对我们学习RDD的API是非常有帮助的.本文所有示例代码都是使用scala语言编写的.RD

【spark 深入学习 05】RDD编程之旅基础篇02-Spaek shell

--------------------- 本节内容: · Spark转换 RDD操作实例 · Spark行动 RDD操作实例 · 参考资料 --------------------- 关于学习编程方式的,每个人都有自己的方式.对我个人来说,最好的方法还是多动手写demo,要多写代码,才能理解的更加深刻,本节以例子的形式讲解各个Spark RDD的使用方法和注意事项,本文一共讲解了20个RDD的使用demo. 一.Spark转换 RDD操作实例 RDD转换操作返回的是RDD,而行动操作返回的是其

Android开发系列(十六):【Android小游戏成语连连看】第二篇

写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统竟然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发工程款然后开始项目了,想想有工资进账,心里也为我那干瘪的钱包小兴奋了一把. 闲话不多说了,今天我们来分析下这个小游戏的工作原理以及核心代码的解析: 工作原理: "主界面"以及"关卡界面"不多说了,这两个是直接写了xml文件, 然后,我们在"游戏界面"的搭建是: 用java代码动态生成了这个界面,在界面中通

cocos2d-x 3.2 之 三消类游戏——万圣大作战 (第二篇)

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 书接上回,在上一部分,我们建了两个界面,在游戏界面加上了精灵. 接下来,本文主要讲述一些逻辑规则: > 精灵消除的检测 > 精灵消除 > 消除后的填补空缺 1.结构大纲 OK,废话不多说,Go! 先来捋下逻辑: --进入游戏界面,精灵开始落下 --精灵落