2010-10-27 68 views
0

Nim的这个特殊变体涉及: 两名球员交替从一堆球中取出弹珠。在每一次移动中,玩家都会选择要玩多少个弹珠。玩家必须至少拿到一个,但最多只有一半的弹珠。然后另一个玩家轮流转。拿最后一个弹珠的玩家输了。 我需要: - 编写一个程序,其中一个人玩电脑 - 生成一个10到100之间的随机int来表示堆的初始大小 - 生成一个0到1之间的随机int来决定计算机或者人类首先轮到 - 在0和1之间生成一个随机int以决定计算机是否玩“智能”或“愚蠢”(计算移动或随机选择)Nim游戏组织/创建课程的问题

问题是我们必须使用三类:桩,球员和游戏。我不知道如何让所有三个班级彼此“交谈”,以及如何分配所到之处。我完全失去了如何开始这个。

+0

首先创建类的实验,从写入一些方法开始。你会对这个任务有更好的感觉,并且你可能会弄清楚。另外,程序是否使用Scanner/BufferedReader获得输入? – irrelephant 2010-10-27 01:16:18

+0

是的,扫描仪将被使用,因此玩家可以输入他们希望移除的弹珠数量。 – Matt 2010-10-27 01:37:48

回答

1

名义上,我希望Game包含一个Pile实例和两个Player实例。然后游戏会根据需要调用每个实例的方法。

桩将最低限度包含一个int来存储堆中弹珠的数量,这种方法会生成初始数字和一个取弹子的方法。

2

首先定义你的类。

你有堆。你可以对桩做什么?你可以问什么问题?例如:“桩,剩下多少个弹珠?”写下这些问题和行动 - 他们将成为桩上的公共方法。

你有一名球员。玩家可以做什么?玩家可以做的一件事是“轮流”。玩家还能做什么?写下所有这些东西 - 它们将成为玩家的公共方法。

你有一个游戏。游戏是做什么的?可能就像“玩”一样。写下这些东西,它们将成为游戏中的公共方法。

现在你有3个类充满了有用的方法。对它们进行编码。一旦你得到了那么多,回来。

+0

“你可以问什么问题”似乎是将这部分对象设计概念化的好方法。 – philosodad 2010-10-28 04:18:05

0

如果你的意思是:“我不知道如何让一个类调用另一个类的方法”,当你第一次开始学习编程时,这是一个常见的问题。所以我会做出可能没有根据的假设,特别是你对编程和面向对象编程非常陌生。

尝试用一个Integer类型的私有变量编写一个名为'Pile'的类来开始。调用这个变量“弹子”并将其初始化为某个数字,例如50.

为该类编写一个名为'how_many'的函数,该函数返回大理石的数量,另一个名为'take_marbles'的公用方法一个整数并减小堆的大小。

创建一个名为“游戏”的类。游戏有型“桩”,将创建一个新的游戏时创建的属性,它有允许它称之为“HOW_MANY”和“take_marbles”的是桩方法的方法。

然后建立创建一个新的游戏,有它随机降低一堆弹珠的数量,直到数量达到零一个小测试程序。每次它消除了一些弹珠,它应该输出离开大理石的数量。

我认为一旦你这样做了,你就会明白下一步该怎么做。