Python游戏编程(二)Dragon Realm

这篇介绍第二个游戏,叫做Dragon Realm,就是简单的文本游戏,就像二选一一样,通过time模块中的函数来延迟时间。

游戏中有两个山洞,一个有宝藏,另一个则有厄运,玩家选择进入哪个山洞。

源代码:

import random
import time

def displayIntro():
    print("""You are in a land full of dragons.In front of you,
          you see two caves. In one cave, the dragon is friendly
          and will share his treasure with you. The other dragon
          is greedy and hungry, and eat you on sight.""")
    print()
    
def chooseCave():
    cave = ''
    while cave != '1' and cave != '2':
        print('Which cave will you go into?(1 or 2)')
        cave = input()
    return cave
def checkCave(chosenCave):
    print('You approach the cave...')
    time.sleep(2)
    print('It is dark and spooky...')
    time.sleep(2)
    print('A large dragon jumps out in front of you! He opens his jaws')
    print()
    time.sleep(2)
    
    friendlyCave = random.randint(1, 2)
    
    if chosenCave == str(friendlyCave):
        print('Gives you his treasure!')
    else:
        print('Gobbles you down in one bite!')
        
playAgain = 'yes'
while playAgain == 'yes' or playAgain == 'y':
    displayIntro()
    caveNumber = chooseCave()
    checkCave(caveNumber)
    
    print('Do you want to play again?(yes or no)')
    playAgain = input()

本游戏主要内容:

  • 流程图;
  • 用def关键字创建自己的函数;
  • 多行字符串;
  • while语句;
  • 布尔操作符and、or和not;
  • 真值表;
  • 关键字return;
  • 全局变量作用域和局部变量作用域;
  • 形参和实参;
  • sleep()参数;

流程图:

流程图展示了在游戏中能够发生的每一种可能的动作,以及与之相关联的动作。在开始编写代码之前,先画出你想要实现的功能,当你开始这么做的时候,就是在设计程序。

函数:

函数使得我们可以多次运行相同的代码,而无需多次赋值粘贴源代码。Dragon Realm游戏中,我们编写了自己的函数以供程序来调用。函数就像是一个程序中的小程序。

def displayIntro():
    print("""You are in a land full of dragons.In front of you,
          you see two caves. In one cave, the dragon is friendly
          and will share his treasure with you. The other dragon
          is greedy and hungry, and eat you on sight.""")
    print()

上述代码展示了一部分def函数语句的各个部分。def关键字后边紧跟着带有圆括号的函数名称,然后是一个冒号(:)。def语句后面的语句块叫做def语句块。当定义一个函数的时候,在它的def语句块中指定该函数的指令。当调用一个函数的时候,会执行def语句块中的代码。

除非调用该函数,def语句块中的指令时不会执行的。

函数的def语句和def语句块必须放在该函数调用之前,这就像使用一个变量之前必须要先为变量赋一个值一样。如果把函数调用放在了函数定义之前,就会得到一个错误。

多行字符串

在一个字符串的开始和结尾使用了3个引号字符,字符串就可以跨越多行了,这就是多行字符串。只要3个引号一起使用,就不必使用\n转义字符或者转义引号。

def chooseCave():
    cave = ''
    while cave != '1' and cave != '2':
        print('Which cave will you go into?(1 or 2)')
        cave = input()
    return cave

while语句实现循环

while循环由while关键字、条件和一个冒号组成,while语句标志一个循环的开始。for循环会循环一定的次数,而while循环只要某一个条件为True就会一直重复。当执行遇到一条while语句时,它会计算while关键字后面的条件。如果条件计算为True,执行会移动到后面的语句块中。如果计算为False,执行会跳过while语句块。在while循环中,当执行到达语句块的末尾的时候,它会回到while语句以重新检查条件。

布尔操作符

布尔逻辑处理结果为True或False的事件,布尔操作符对值进行比较,并且得到一个布尔值。
and(与)
or(或)
not(非)

返回值
return语句只是出现在一个函数的def语句块中,一旦执行了return语句,程序执行会立即跳出def语句块,就像break语句会让执行跳出while语句块一样。程序执行将返回到调用该函数的那行代码。这个函数调用本身的结果就是其返回值。

全局作用域和局部作用域

关于在函数中创建的变量,还有一些特别之处。

当调用一个函数的时候,就创建了一个局部作用域(local scope),在这个函数语句块内的任何变量,都存在于这个局部作用域中,可以把作用域当做是变量的容器。调用函数时,变量被创建,称之为局部变量(local variable)。

在函数之外分配的变量,存在于全局作用域(global scope)中。只有一个全局作用域,并且当程序开始的时候,就创建了该作用域。当程序终止的时候,全局作用域就销毁了,并且其所有的变量也会被忘掉。存在于全局作用域的变量称之为全局变量(global scope)。

def checkCave(chosenCave):
    print('You approach the cave...')
    time.sleep(2)
    print('It is dark and spooky...')
    time.sleep(2)
    print('A large dragon jumps out in front of you! He opens his jaws')
    print()
    time.sleep(2)
    
    friendlyCave = random.randint(1, 2)
    
    if chosenCave == str(friendlyCave):
        print('Gives you his treasure!')
    else:
        print('Gobbles you down in one bite!')

函数形参

上述代码中checkCave()函数的形参就是chosenCave,所谓形参,是供函数的代码使用的一个局部变量。当调用函数时,调用者的实参(argument)是要赋值给这个形参值的。

参考:

  1. 《Python游戏编程快速上手》第四版,AI Sweigart著,李强 译
发布了9 篇原创文章 · 获赞 1 · 访问量 418

猜你喜欢

转载自blog.csdn.net/weixin_45755966/article/details/104005493
今日推荐