Java 数组游戏-游戏逻辑概念
Posted
技术标签:
【中文标题】Java 数组游戏-游戏逻辑概念【英文标题】:Java Array Game - Game Logic Concept 【发布时间】:2011-02-10 14:04:12 【问题描述】:我想创建一个以左侧 3 个绿点和右侧 3 个红点开始的游戏,它们之间有一个空格。残局应该有颜色交换边。
游戏规则是,如果点旁边有空格,它应该能够移动到那里,如果旁边有相反的颜色 - 如果有空格,它应该能够跳过在相反的颜色后面。
我的问题位于代码下方。
代码如下:
//import mind.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
public class Drive
String[] middle = new String[7];
public Drive()
int player1, player2;
boolean gameEnd, checkempty, checkempty2, enemy, enemy2;
// Gamepieces
String gr,rd,tom;
gr="G"; rd="R"; tom=" ";
// beginning of the game, endgame and the updating array
String[] begin = gr,gr,gr,tom,rd,rd,rd;
String[] mellan = new String[7];
String[] end = rd,rd,rd,tom,gr,gr,gr;
Scanner in = new Scanner(System.in);
while (mellan!=end)
mellan=begin;
for(int i=0; i<mellan.length; i++)
System.out.print(mellan[i]);
System.out.print(" Choose 0-6: ");
int digits = in.nextInt();
//BOOLEAN for game rules!!!
checkempty = mellan[digits+1]==tom;
checkempty2 = mellan[digits-1]==tom;
enemy = (mellan[digits]==gr && mellan[digits+1]==rd && mellan[digits+2]==tom);
enemy2 = (mellan[digits]==rd && mellan[digits-1]==gr && mellan[digits-2]==tom);
if(checkempty)
mellan[digits+1]=mellan[digits];
mellan[digits]=tom;
else if (checkempty2)
mellan[digits-1]=mellan[digits];
mellan[digits]=tom;
else if (enemy)
mellan[digits+2]=mellan[digits];
mellan[digits]=tom;
else if (enemy2)
mellan[digits-2]=mellan[digits];
mellan[digits]=tom;
System.out.print("Nicely Done");
// Test Drive!
public static void main(String args[])
new Drive();
问题: 现在,它正在构成游戏逻辑。如果这些点不能向后移动,我就会完成任务。但是由于它们能够向后移动,因此当代码在数组外部检查时会出现错误(尽管可以理解)。
我头顶上的解决方案是使数组更长,并带有微不足道的符号,以免出现错误。但是我想问有没有别的办法? 因为现在的情况,我不能移动我的第一个和最后一个点中间的数字应该可以正常工作!
【问题讨论】:
【参考方案1】:当digits
为 0 或数组的最大索引时会出现此问题。当digits
为0 时不能检查mellan[digits-1]
,当digits
是数组的最大索引时不能检查mellan[digits+1]
。
因此,您需要在尝试访问阵列之前检查这些情况。你可以试试这样的:
checkempty2 = (digits > 0) && (mellan[digits-1] == tom);
因为 Java 使用 短路求值 来进行这样的布尔运算,所以只有当第一部分的计算结果为 true
时,才会计算该表达式的第二部分。所以mellan[digits-1]
只有在digits
大于0时才会被访问。
显然,您还需要处理左侧或右侧的位置 2 空格,但同样的原则也适用于此。
【讨论】:
谢谢语法!非常明白你的解释!一个附带问题,这是在数组中移动/切换索引的唯一方法吗?【参考方案2】:您可以考虑以下其中一项:
1) 用 2 个绿色(或红色)点填充两侧。它们将成为障碍。
2) 在检查数组的下一个/上一个位置时添加条件。
我会选择第二种方法...
我还建议稍微重构一下代码。您可以将验证跳转(右或左)的代码提取到一个单独的方法中,该方法接收一个方向(+1/-1,最好作为枚举)作为参数。
【讨论】:
感谢您的意见 Eyal!起初我考虑过 1) 但这会使我的数组更长,如果有另一种方法我不想这样做 - 因此在这里问:) 我将使用方法重构代码并以图形方式开发它 (MVC) 但是我觉得有必要首先尽可能简单地完成游戏逻辑,然后再对其进行越来越多的修改。【参考方案3】:只需检查 digits + n
是否大于或等于 0(并且小于 mellan.length
)。
例如:
if(digits-2 >= 0)
//put core here
【讨论】:
感谢您的意见 Tedil!以上是关于Java 数组游戏-游戏逻辑概念的主要内容,如果未能解决你的问题,请参考以下文章