Python中的战舰游戏
我是一名在戈申学院的物理专业大一学生。现在我需要为我的编程课做一个期末项目。我在考虑做一个“战舰”游戏。我知道网上可以找到完整的代码,但我真的想自己写一份。我想到了一个我想在游戏中实现的功能清单,以及我希望程序运行的大致思路。
- 制作四个10 x 10的网格。一个用来存储电脑的舰船位置,一个用来存储玩家的舰船,还有两个用来显示,记录你和电脑的猜测。
- 通过使用格式(a,6),用户或电脑可以猜测位置。
- 告诉用户他们正在放置什么舰船以及舰船的大小。用户给出一个坐标,然后选择向上、向左或向右来决定舰船的方向。这是第一个网格。第二个网格是存储舰船的位置,这将是电脑的网格。游戏会记录你的猜测,并在你错过的地方放圈,在你命中的地方放叉,水域(你还没猜的地方)用~表示。这是第三个网格。第四个网格是电脑的猜测。
- 电脑随机猜测,直到命中。然后使用算法检查所有相邻的空间,直到把舰船击沉。
- 轮流进行。
- 同时显示第三和第四个网格。
我真的不知道从哪里开始。我对创建这个游戏所需的逻辑有一个大致的想法,但我不知道该从哪里入手,开始定义程序。谢谢!
2 个回答
注意:下面这个基本设计概念适合大多数棋盘游戏风格的游戏。
你需要先做很多决定:
- 游戏是要在命令行运行(最简单),还是用图形界面工具,或者作为一个OpenGL应用程序?
- 游戏是否需要一个“游戏大厅”,让玩家可以开始新游戏,还是直接进入游戏,结束后就退出?
如果你选择最简单的方式(命令行,直接进入游戏),你只需初始化你的四个矩阵,然后进入一个主循环,按照以下步骤进行:
initialize_gamestate()
while True:
print_game()
input = player_input()
game_logic(0, input)
input = computer_AI()
game_logic(1, input)
game_logic()
这个函数会根据玩家的编号和input
来计算变化,并相应地更新你的四个矩阵(游戏状态)。它还会检查是否有玩家获胜,如果有,就停止主循环。
print_game()
会输出当前的游戏状态。
computer_AI()
和 player_input()
会返回玩家或AI选择的坐标。computer_AI()
会试着智能地判断下一步该怎么做,基于玩家1能看到的信息。player_input()
则会询问玩家该怎么做。开始时,可以让你的电脑AI随机返回坐标,之后再进行改进。
作为一个更高级的概念,你可以让玩家的数量和类型是动态的:
players = [
("mike", player_input),
("vladimir", computer_AI_hard)
]
initialize_gamestate(len(players))
while True:
for number, (name, input_function) in enumerate(players):
print(name + "'s turn")
input = input_function(number)
game_logic(number, input)
在这种情况下,player_input
会打印出与玩家number
相关的游戏状态。
你的算法看起来没问题。如果你打算用Python来实现它,我建议你先创建一个简单的PyGame(或者你喜欢的其他库)应用程序,只画出两个网格。这样做可以帮助你调试其他功能,因为你能更清楚地看到结果,而不是在控制台里看一堆数组数据。
另外,你也可以先用文本模式来实现一切,等以后再加上图形界面——这样你的应用就更像是“查询-响应”的形式。你可以用简单的print()
来打印两个网格,然后用raw_input()
来询问移动,这样就简单多了。