Java 一个简单游戏的面向对象方法
我正在制作这个游戏的简化版本。问题是,你可以拥有一台聪明或愚蠢的计算机,但我决定暂时排除这一功能,并决定只使用一台随机挑选大量对象的计算机。我早些时候发布了一个问题,并着手解决。() 所以最初我只设计了一个类。但是现在我已经设计了3个类,如问题所述。我有一个桩类,一个玩家类和一个游戏类(也是我的主要类) 到目前为止,我已经对桩和玩家类进行了编码。我也开始编写游戏类,但是我现在被卡住了,因为我不知道如何使游戏类与玩家和堆类交互。我基本上是先确定轮到谁,然后旋转轮次,直到一堆对象完成并宣布获胜……我不知道如何使不同的类相互交互。因此,如果有人能进一步指导我,帮助我完成这个简单的游戏,我将不胜感激 如果我问了一个糟糕的问题,我真诚地道歉。这是我用java编写的第一个这样的程序,它处理多个类,所以有点混乱。我不想任何人写代码,但即使提到或告诉我,我应该使某某方法等将是伟大的 这是我到目前为止的代码 桩类Java 一个简单游戏的面向对象方法,java,Java,我正在制作这个游戏的简化版本。问题是,你可以拥有一台聪明或愚蠢的计算机,但我决定暂时排除这一功能,并决定只使用一台随机挑选大量对象的计算机。我早些时候发布了一个问题,并着手解决。() 所以最初我只设计了一个类。但是现在我已经设计了3个类,如问题所述。我有一个桩类,一个玩家类和一个游戏类(也是我的主要类) 到目前为止,我已经对桩和玩家类进行了编码。我也开始编写游戏类,但是我现在被卡住了,因为我不知道如何使游戏类与玩家和堆类交互。我基本上是先确定轮到谁,然后旋转轮次,直到一堆对象完成并宣布获胜……我
package Nim;
import java.util.Random;
public class Pile {
private int initialSize;
public Pile() {
}
Random rand = new Random();
public void setPile() {
initialSize = (rand.nextInt(100 - 10) + 10);
}
public void reducePile(int x) {
initialSize = initialSize - x;
}
public int getPile() {
return initialSize;
}
public boolean hasStick() {
if (initialSize > 0) {
return true;
}
else {
return false;
}
}
}
package Nim;
import java.util.Scanner;
import java.util.Random;
public class Player {
public static final int HUMAN = 0;
public static final int COMPUTER = 1;
private int type;
public Player(int theType) {
type = theType;
}
Scanner in = new Scanner(System.in);
// n is number of marbles left in the pile
public int makeMove(int n) {
int max = n / 2;
int grab;
if (type == HUMAN) {
System.out.println("There are " + n
+ " marbles in total. However you can only"
+ "grab no more than " + max + " marbles");
System.out.println("Please Enter the number of marbles to grab: ");
grab = in.nextInt();
while (grab > max || grab < 0) {
System.out.println("You have entered a illelgal value. Please enter a legal value: ");
grab = in.nextInt();
}
return grab;
}
else {
Random rand = new Random();
grab = (rand.nextInt(n / 2 - 1) + 1);
System.out.println("Computer has grabbed: " + grab + " marbles");
return grab;
}
}
public void updateTurn(int n) {
type = n;
}
}
玩家等级
package Nim;
import java.util.Random;
public class Pile {
private int initialSize;
public Pile() {
}
Random rand = new Random();
public void setPile() {
initialSize = (rand.nextInt(100 - 10) + 10);
}
public void reducePile(int x) {
initialSize = initialSize - x;
}
public int getPile() {
return initialSize;
}
public boolean hasStick() {
if (initialSize > 0) {
return true;
}
else {
return false;
}
}
}
package Nim;
import java.util.Scanner;
import java.util.Random;
public class Player {
public static final int HUMAN = 0;
public static final int COMPUTER = 1;
private int type;
public Player(int theType) {
type = theType;
}
Scanner in = new Scanner(System.in);
// n is number of marbles left in the pile
public int makeMove(int n) {
int max = n / 2;
int grab;
if (type == HUMAN) {
System.out.println("There are " + n
+ " marbles in total. However you can only"
+ "grab no more than " + max + " marbles");
System.out.println("Please Enter the number of marbles to grab: ");
grab = in.nextInt();
while (grab > max || grab < 0) {
System.out.println("You have entered a illelgal value. Please enter a legal value: ");
grab = in.nextInt();
}
return grab;
}
else {
Random rand = new Random();
grab = (rand.nextInt(n / 2 - 1) + 1);
System.out.println("Computer has grabbed: " + grab + " marbles");
return grab;
}
}
public void updateTurn(int n) {
type = n;
}
}
所以我要退一步,看看你们的类图 您有三个类:桩、玩家和游戏。桩可以表示中心的桩。游戏可以是管理一切的主要方法的类。球员呢?好吧,因为您有一个用于所有三种(或两种)可能状态(人类、哑和智能)的Player类,所以它应该很容易实现 让我们从游戏开始。它需要包含两个Player实例(human和computer)和一个Pile实例。它还需要一个循环,直到游戏结束。因此,让我们开始提出一个基本的实现: 从桩开始:
private int size;
public Pile(int newSize) {
size = newSize;
}
public boolean takeMarbles(int amount) {
size -= amount;
if (size < 1)
return false;
return true;
}
这两个静态场可能看起来有点不合适,但它会在一秒钟内结合在一起。关于游戏类:
Pile pile = new Pile(size);
Player human = new Player(Player.HUMAN);
Player computer = new Player(Player.COMPUTER);
现在我们有了一堆一定大小的棋子,还有两个不同类型的棋手。这就是我们使用这些类的方式
现在我们需要让主游戏循环工作。基本上,只需向播放器添加一个update()
方法,该方法取决于播放器的类型(即如果播放器提示输入,随机决定计算机是否输入)。update方法应该返回要获取的大理石数量。然后在游戏的主方法中创建一个循环。循环将反复调用播放器和计算机的更新,直到有人丢失(takeMarbles
返回false)。然后它将跳出循环并打印输出
这是基本的想法,祝你好运,请随时提问 你为什么用两倍行距写代码?对不起,我的习惯不好。我仍在学习我们称之为“良好编码实践”的过程中,因此我为任何此类错误道歉@JonathonReinhart如果您能提出建议,我将不胜感激,因为我可以看到您经验丰富的开发人员。我建议您确保您的代码格式正确。不要把它隔开两倍,让你所有的缩进和换行保持一致。格式很好!另外,我现在正在撰写一个答案,来这里寻求真正帮助的人是应该得到答案的人:)我一直很感谢您的评论,这将帮助我成为一个更好的开发人员:)嘿,感谢您的澄清,我正在尝试吸收您的答案并完成我的编码。所以从我所看到的来看,我的pile和player类似乎有正确的方法,我现在必须在game类中创建一个更新方法,在两个玩家之间交替轮换,并接受他们的输入,直到pile为空。我可能有一两个问题,所以当我陷入困境时我会问你。谢谢again@user2733436放心吧,很高兴我能帮上忙!很高兴看到那些没有发布“给我代码pls”问题的人,他们真的很感兴趣,也很有动力:)嘿,我刚刚有一个关于玩家类更新方法的问题。所以在我的例子中,我从掷硬币开始,说计算机赢得了掷硬币,我必须使用更新方法将类型设置为计算机,对吗?是的,你有两个玩家对象,对吗?你必须按顺序去做。。。可以根据顺序将它们放入数组中,也可以在循环中使用if语句。你不需要一个完全不同的方法。嗨,我让玩家交替轮换,但当对象小于n时,我似乎有一个问题,它会抛出一个异常。我大概95%接近终点线了。有没有可能让我向你展示我目前得到的代码?所以你可以指引我