我有一些用于我的游戏NPC移动arround的java代码。
这些显然属于1d阵列。
public void route11() {
Scanner in = new Scanner(System.in);
Random number = new Random();
int random = number.nextInt(2);
if(random ==1)
hunters[1].x = hunters[1].x -1;
else
hunters[1].y = hunters[1].y -1;
}
public void Update() {
route11();
route2();
route3();
route4();
route5();
}
方法route2,route3,...,route5看起来几乎相同,唯一改变的是数组的值与不同的猎人对应。
此代码可能会“缩小”吗?我很确定我的讲师会很乐意为这样一个混乱且非常反OO的代码减去我的印记。
此外,我的所有碰撞/得分代码看起来都是这样的,它适用于个人猎人:
if(hunters[i].x==0 && hunters[i].y == 0){
hunters[i].x = 11;
hunters[i].y = 11;
Player.score = Player.score + 1;
}
答案 0 :(得分:3)
您的问题与OOP设计无关。这只是学习使用可用工具来编写冗余度更低,管理更简单的代码。如果你在更新中使用for循环并传递每个猎人,那么这就变得更加浓缩了。
我会注意到有一些不相关的OOP问题,你可以很好地纠正。
对于玩家的得分成员/字段
也是如此public void update()
{
for(var i = 0; i < 5; i++)
{
route(hunters[i]);
collisionAndScoring(hunters[i]);
}
}
public void route(Hunter hunter)
{
Scanner in = new Scanner(System.in);
Random number = new Random();
int random = number.nextInt(2);
if(random == 1)
{
hunters.x--;
}
else
{
hunter.y--;
}
}
public void collisionAndScoring(Hunter hunter)
{
if (hunter.x == 0 && hunter.y == 0) //You should define constants for these to give them more meaning
{
hunter.x = 11; //another opportunity for a constant
hunter.y = 11; //another opportunity for a constant
Player.score++;
}
}