Python中的战舰

时间:2014-04-03 12:24:03

标签: python

我是歌珊学院的第一年物理专业。我应该为我的编程类创建一个最终项目。我正在考虑做游戏Battleship。我意识到我可以在网上找到完整的代码,但我真的想写自己的代码。我想出了一些我想尝试在游戏中实现的东西,以及我对程序的一般概念跑步。

  1. 制作四个10 x 10网格。一个存储有计算机船只的位置,一个带有玩家的船只,另外两个要显示,跟踪你和计算机的猜测。
  2. 通过使用格式(a,6),用户/计算机可以猜测位置。
  3. 告诉用户他们放置的是哪艘船以及它有多大。用户给了一个明星 cordinate,然后给出向上,向左或向右决定哪个方向 船在说谎。这是网格之一。网格二是存储的船舶网格。那 将是计算机的网格。游戏将跟踪你的猜测, 把圈子放在哪里 你错过了,你打到的地方就是水,(你猜对了的空间)。 这是网格三。网格四是计算机的猜测。
  4. 随机计算机猜测直到命中。然后用算法检查所有相邻的 直到船沉没为止。
  5. 轮流
  6. 同时显示三个和四个网格。
  7. 我真的不知道从哪里开始。我对创建游戏所需的逻辑有一个大概的了解,我只是不知道从哪里开始并开始定义程序。 谢谢!

2 个答案:

答案 0 :(得分:2)

您的算法看起来非常好。当您的目标是在Python中实现时,我首先创建简单的PyGame(或您选择的其他库)应用程序,它只绘制两个网格。这将有助于您调试其他功能,一旦您在控制台中看到它比阵列转储更好。

或者,您可以暂时实现基于文本模式的所有内容,稍后使用图形进行增强 - 使您的应用程序更像“查询 - 响应”,使用普通print()打印两个网格并要求移动raw_input() - 就这么简单。

答案 1 :(得分:1)

注意:以下基本设计概念适用于大多数棋盘游戏风格的游戏。

你需要先做出很多决定:

  • 它应该在命令行(最简单),GUI工具包还是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相关的游戏状态。