Python 玩家死后退出游戏
所以,我正在开发一个基于python文本的游戏,可以与朋友们分享。我已经完成了游戏的大部分工作,但是当用户选择某些命令时,我正在为游戏的一部分而挣扎。我没有为此使用pygame,因为我找不到64位版本。下面是我正在看的。我应该在gameOver函数中添加什么才能真正退出游戏,或者如果玩家需要,请重试Python 玩家死后退出游戏,python,python-3.x,macos,adventure,Python,Python 3.x,Macos,Adventure,所以,我正在开发一个基于python文本的游戏,可以与朋友们分享。我已经完成了游戏的大部分工作,但是当用户选择某些命令时,我正在为游戏的一部分而挣扎。我没有为此使用pygame,因为我找不到64位版本。下面是我正在看的。我应该在gameOver函数中添加什么才能真正退出游戏,或者如果玩家需要,请重试 import time import random import sys def searchAreas(): print("1. Area1") print("2. Area2"
import time
import random
import sys
def searchAreas():
print("1. Area1")
print("2. Area2")
print("3. Area3")
print("4. Just give up")
def badResponse():
print("Sorry, I don't understand " + search_area)
def gameOver():
print("You decide to give up because life is too hard.")
print("Would you like to try again?")
player_choice = input("> ")
if player_choice == "Yes":
mainGame()
elif player_choice == "No":
print("# what goes here to quit the game?")
else:
badResponse()
def mainGame():
search_area_options = ["1","2","3"]
search_area = ""
while search_area not in search_area_options:
print("Where do you want to start looking?")
searchAreas()
search_area = str(input("> "))
if search_area == "1":
print("Text here")
elif search_area == "2":
print("Text here")
elif search_area == "3":
print("text here")
elif search_area == "4":
gameOver()
else:
badResponse()
mainGame()
当输入除四个选项以外的任何内容时,或进入gameOver函数时,我看到以下错误:
Traceback (most recent call last):
File "./test.py", line 45, in <module>
mainGame()
File "./test.py", line 43, in mainGame
badResponse()
File "./test.py", line 14, in badResponse
print("Sorry, I don't understand " + search_area)
NameError: name 'search_area' is not defined
要退出脚本,可以使用
import sys
sys.exit()
至于badResponse错误:您试图在bad response函数中使用变量search_区域,但该变量在另一个函数中定义,这意味着它无法访问该变量。您必须将search\u area作为参数传递给badResponse,或者将search\u area作为在顶部定义的全局变量传递给任何函数。要退出脚本,可以使用
import sys
sys.exit()
至于badResponse错误:您试图在bad response函数中使用变量search_区域,但该变量在另一个函数中定义,这意味着它无法访问该变量。您必须将search\u area作为参数传递给badResponse,或者将search\u area作为在顶部定义的全局变量,在任何函数之外。在您的函数search\u area中不存在
def badResponse():
print("Sorry, I don't understand " + search_area)
您需要将搜索区域传递到函数中:
def badResponse(search_area):
print("Sorry, I don't understand " + search_area)
要调用函数时,请使用:
badResponce(search_area)
在您的函数中,搜索区域不存在
def badResponse():
print("Sorry, I don't understand " + search_area)
您需要将搜索区域传递到函数中:
def badResponse(search_area):
print("Sorry, I don't understand " + search_area)
要调用函数时,请使用:
badResponce(search_area)
在设计游戏时,通常比传统的后端Python编码更需要这种模式:从内部函数跳到外部函数 因此,在游戏中,很常见的情况是,从主循环调用的函数中,您希望退出主循环,进入代码设置下一个游戏阶段的位置,或者在屏幕上显示游戏并提供开始新游戏的位置 Python有一个sys.exit调用,它可以完全停止程序,因此,虽然您可以在游戏结束时通过代码检查调用它,但它会完全退出您的程序,而不会让用户选择开始新的匹配。如果你的游戏是在图形用户界面上,而不是在控制台打印和输入游戏上,那么已经糟糕的体验就会变成灾难性的,因为游戏本身会突然关闭,没有任何痕迹 因此,虽然这可以通过状态变量进行管理,状态变量可以由这些函数设置,并且可以由mainloop(在您的例子中是mainGame函数中的while语句)进行管理,但这种设计非常繁琐且容易出错——它可能类似于: def主游戏…: ... 游戏结束=错误 虽然游戏尚未结束: 如果搜索区域不在搜索区域选项中: 游戏结束=正确 ... 如果搜索面积=4: 游戏结束=正确 因此,请注意,在这种设计中,如果有什么东西将game_over标志更改为True, 无论在哪里,在下一次迭代中,while条件都将失败,并且 程序将自然结束主游戏功能的执行-并且 如果没有外部功能再次处理播放?屏幕上,程序结束 这很好,对于这样一个简单的游戏来说,也许是正确的做法 但是在更复杂的设计中,你在主循环my中的选择会变得更复杂-你可以调用可以自己实现小游戏的函数,或者自己的检查可能并不简单-而且,最重要的是, 退出此主要功能可能不止一个游戏结束条件,例如,一个获胜条件将引导游戏进入下一阶段 在这些情况下,您可能希望使用Python的异常机制,而不是将游戏状态记录在变量中。 异常是语言中的一种构造,在程序出错时会自然发生,它使程序能够在异常发生位置上方的函数中停止或继续运行,前提是程序员仅包含正确的try-except子句来捕获异常 因此,可以进行一个复杂的游戏,它可以处理任意复杂的游戏,而且,通过创建命名良好的异常并适当地放置try-except子句,很容易知道执行将导致- 使用此策略的更复杂游戏的框架可能是: 开始 类BaseGameException BaseException:通过 类程序ExitBaseGameException:通过 类GameOverBaseGameException:传递 类MiniGameOverBaseGameException:通过 类NextStageBaseGameException:传递 def小游戏: 尽管如此: 游戏迷你游戏中的游戏代码 ... 如果某个条件决定了获胜的主要阶段: 提升下一阶段 ... def主游戏阶段: 以适当的方式获取数据、场景和变量 为现阶段辩护 尽管如此: ... 如果某个条件适用于小型游戏: 小型游戏 ... 如果条件为死亡: 筹款 ... def查询\u再次播放\u: 打印并获得messag关于是否再次播放的回复 ... 如果玩家决定退出: 这需要执行超出主要的游戏菜单功能; 升起程序退出 def主游戏菜单: 处理游戏开始/再次玩/皮革板屏幕 阶段=1 尽管如此: 打印欢迎信息,并提示游戏开始 尝试: 主配子阶段 除下一阶段外: 打印祝贺消息,并为下一阶段做好准备 阶段+=1 除GameOver外: 玩家死亡-打印正确的消息,皮革板 查询\u再次播放\u 阶段=1 如果程序返回这里,就让程序重新启动游戏 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 尝试: 主游戏菜单 除程序退出外: 再见!
在设计游戏时,通常比传统的后端Python编码更需要这种模式:从内部函数跳到外部函数 因此,在游戏中,很常见的情况是,从主循环调用的函数中,您希望退出主循环,进入代码设置下一个游戏阶段的位置,或者在屏幕上显示游戏并提供开始新游戏的位置 Python有一个sys.exit调用,它可以完全停止程序,因此,虽然您可以在游戏结束时通过代码检查调用它,但它会完全退出您的程序,而不会让用户选择开始新的匹配。如果你的游戏是在图形用户界面上,而不是在控制台打印和输入游戏上,那么已经糟糕的体验就会变成灾难性的,因为游戏本身会突然关闭,没有任何痕迹 因此,虽然这可以通过状态变量进行管理,状态变量可以由这些函数设置,并且可以由mainloop(在您的例子中是mainGame函数中的while语句)进行管理,但这种设计非常繁琐且容易出错——它可能类似于: def主游戏…: ... 游戏结束=错误 虽然游戏尚未结束: 如果搜索区域不在搜索区域选项中: 游戏结束=正确 ... 如果搜索面积=4: 游戏结束=正确 因此,请注意,在这种设计中,如果有什么东西将game_over标志更改为True, 无论在哪里,在下一次迭代中,while条件都将失败,并且 程序将自然结束主游戏功能的执行-并且 如果没有外部功能再次处理播放?屏幕上,程序结束 这很好,对于这样一个简单的游戏来说,也许是正确的做法 但是在更复杂的设计中,你在主循环my中的选择会变得更复杂-你可以调用可以自己实现小游戏的函数,或者自己的检查可能并不简单-而且,最重要的是, 退出此主要功能可能不止一个游戏结束条件,例如,一个获胜条件将引导游戏进入下一阶段 在这些情况下,您可能希望使用Python的异常机制,而不是将游戏状态记录在变量中。 异常是语言中的一种构造,在程序出错时会自然发生,它使程序能够在异常发生位置上方的函数中停止或继续运行,前提是程序员仅包含正确的try-except子句来捕获异常 因此,可以进行一个复杂的游戏,它可以处理任意复杂的游戏,而且,通过创建命名良好的异常并适当地放置try-except子句,很容易知道执行将导致- 使用此策略的更复杂游戏的框架可能是: 开始 类BaseGameException BaseException:通过 类程序ExitBaseGameException:通过 类GameOverBaseGameException:传递 类MiniGameOverBaseGameException:通过 类NextStageBaseGameException:传递 def小游戏: 尽管如此: 游戏迷你游戏中的游戏代码 ... 如果某个条件决定了获胜的主要阶段: 提升下一阶段 ... def主游戏阶段: 获取适用于当前阶段的数据、场景和变量 尽管如此: ... 如果某个条件适用于小型游戏: 小型游戏 ... 如果条件为死亡: 筹款 ... def查询\u再次播放\u: 打印并获得messag关于是否再次播放的回复 ... 如果玩家决定退出: 这需要执行超出主要的游戏菜单功能; 升起程序退出 def主游戏菜单: 处理游戏开始/再次玩/皮革板屏幕 阶段=1 尽管如此: 打印欢迎信息,并提示游戏开始 尝试: 主配子阶段 除下一阶段外: 打印祝贺消息,并为下一阶段做好准备 阶段+=1 除GameOver外: 玩家死亡-打印正确的消息,皮革板 查询\u再次播放\u 阶段=1 如果程序返回这里,就让程序重新启动游戏 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 尝试: 主游戏菜单 除程序退出外: 再见!
为什么不直接离开?为什么不直接离开?