习题43:你来制作一个游戏
需求:
- 制作一个截然不同的游戏。
- 使用多个文件,并使用import调用这些文件。确认自己知道import的用法。
- 对于每个房间使用一个class,class的命名要能体现出它的用处。例如GoldRoom、KoiPondRoom。
- 你的执行器代码应该了解这些房间,所以创建一个class来调用并且记录这些房间。有很多种方法可以达到这个目的,不过你可以考虑让每个房间返回下一个房间,或者设置一个变量,让它指定下一个房间是什么。
class GoldRoom:
def yourChoice(self):
print("这是一间装满黄金的房间!!!")
print("现在租金50元租给你,愿意不?")
print("关键也有其他人想租。。。我在想要不要租给你呢。。。")
while True:
amout = input("请输入你愿意出的租金>>>")
if not amout.isdigit():
print("你在开玩笑吗?让你输入金额,你输入的是什么呀......")
elif int(amout) <= 50:
print("小伙子,你还不算贪婪,这间房间租给你了!")
exit(0)
else:
print("你这家伙,是不是想偷金子,滚蛋滚蛋,这屋子不租给你了......")
exit(0)
class KoiPondRoom:
def youChoice(self):
print("这是一间神庙!!!")
print("考考你,神庙里最大的神,是在左边、右边还是中间?")
while True:
next = input("请输入位置[中间]/[左边]/[右边]>>>")
if next == '中间':
print("恭喜你答对了!!!")
exit(0)
elif next == '左边':
print("左边不过是个小神......")
exit(0)
elif next == '右边':
print("右边不过是个小神......")
exit(0)
else:
print("请按要求输入......")
goldRoom = GoldRoom()
koiPondRoom = KoiPondRoom()
def play():
while True:
next = input("请问左转还是右转(left/right):")
if next == 'left':
goldRoom.yourChoice()
exit(0)
elif next == 'right':
koiPondRoom.youChoice()
exit(0)
else:
print("请按要求输入!!!")
play()
也没有具体的需求,我就胡乱写了一个。。。我就是一个测试人员,根本不会创造需求呀。。。
习题44:给你的游戏打分
函数的风格
- 由于各种各样的原因,程序员将class(类)里边的函数称作method(方法)。很大程度上这只是个市场策略(用来推销OOP),不过如果你把它们称作“函数”的话,是会有啰嗦的人跳出来纠正你的。如果你觉得它们太烦了,你可以告诉他们从数学方面演示一下“函数”和“方法”究竟有什么不同,这样他们会很快闭嘴的。
- 在你使用class的过程中,很大一部分时间是告诉你的class如何“做事情”。给这些函数命名的时候,与其命名成一个名词,不如命名为一个动词,作为给class的一个命令。就和list的pop(抛出)函数一样,它相当于说:“嘿,列表,把这东西给我pop出去。”它的名字不是removeFromEndOfList,因为即使它的功能的确是这样,这一串字符也不是一个命令。
- 让你的函数保持简单小巧。由于某些原因,有些人开始学习class后就会忘了这一条。
类的风格
- 你的class应该使用“camel case(驼峰式大小写)”,例如你应该使用SuperGoldFactory而不是super_gold_factory。
- 你的__init__不应该做太多的事情,这会让class变得难以使用。
- 你的其它函数应该使用“underscore format(下划线隔词)”,所以你可以写my_awesome_hair,而不是myawesomehair或者MyAwesomeHair。
- 用一致的方式组织函数的参数。如果你的class需要处理users、dogs和cats,就保持这个次序(特别情况除外)。如果一个函数的参数是(dog,cat,user),另一个的是(user,cat,dog),这回让函数使用起来很困难。
- 不要对全局变量或者来自模组的变量进行重定义或者赋值,让这些东西自顾自就行了。
- 不要一根筋式地维持风格一致性,这是思维力低下的妖怪做的事情。一致性是好事,不过愚蠢地跟着别人遵从一些白痴口号是错误的行为——者本身就是一种坏的风格。
- 永远永远都是用class Name(object)的方式定义class,否则你会碰到大麻烦。
代码风格:ctrl+alt+L
好的注释
- 有程序员会告诉你,说你的代码需要有足够的可读性,这样你就无需写注释了。他们会以自己接近官腔的声音说“所以你永远都不应该写代码注释。”这些人要么是一些顾问型的任务,如果别人无法使用他们的代码,就会付更多钱给他们,让他们解决问题。要么他们能力不足,从来没有跟别人合作过。别理会这些人,好好写你的注释。
- 写注释的时候,描述清楚为什么你要这样做。代码置灰告诉你“这样实现”,而不会告诉你“为什么要这样实现”,而后者比前者更重要。
- 当你为函数写文档注释的时候,记得为别的代码使用者也写些东西。你不需要狂写一大堆,但一两句话写写这个函数的用法还是很有用的。
- 最后要说的是,虽然注释是好东西,太多的注释就不见得是了。而且朱姐也是需要维护的,你要尽量让朱姐短小精悍一语中的,如果你对代码做了更改,记得检查并更新相关的注释,确认它们还是正确的。
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)