[英]Java - Cleaning up lots of if statements
我正在用 Java 編寫一個類似於 2048 游戲的小項目,它幾乎完全基於數組操作。 我為我遇到的問題編寫了一個解決方案,它運行良好,但是代碼非常混亂。 如果有人可以幫助清理它,也許通過使用不同的技術或其他東西,它只是很多 if 語句。
// This bit gets rid of the empty tiles between numbers.
// Eg {2,2,0,4} becomes {2,2,4,0}.
for(int i =1; i<row.length; i++) {
if(row[i-1] == 0)
{
row[i-1] = row[i];
row[i] = 0;
}
}
for(int j=row.length-1; j>=1; j--) {
if(row[j-1] == 0 ) {
row[j-1] = row[j];
row[j] = 0;
}
}
int nonEmpty = 0; // Count the number of non empty tiles
for(int i=0; i<row.length; i++) {
if(row[i] != 0)
nonEmpty++;
}
if(nonEmpty == 2) {
if(row[1] == row[0]) {
row[0] *= 2;
row[1] = 0;
}
}
else if(nonEmpty == 3) {
if(row[1] == row[0]) {
row[0] *= 2;
row[1] = row[2];
row[2] = 0;
}
else if(row[2] == row[1]) {
row[1] *= 2;
row[2] = 0;
}
}
else if(nonEmpty==4) {
if(row[1] == row[0]) {
row[0] *= 2;
row[1] = 0;
if(row[2] == row[3]) {
row[2] *= 2;
row[3] = 0;
}
}
else if(row[2] == row[1]) {
row[1] *= 2;
row[2] = row[3];
row[3] = 0;
}
else if(row[3] == row[2]) {
row[2] *= 2;
row[3] = 0;
}
}
// Get rid of 0s between numbers again.
for(int i =1; i<row.length; i++) {
if(row[i-1] == 0)
{
row[i-1] = row[i];
row[i] = 0;
}
}
for(int j=row.length-1; j>=1; j--) {
if(row[j-1] == 0 ) {
row[j-1] = row[j];
row[j] = 0;
}
}
這里的每個 if/else if 語句都很重要,因為它處理所有情況。 我不是要求某人完成並清理所有內容,但如果我能提供一些指示或示例,那就太好了。
謝謝你們
嘗試這個
void set(int indexFrom, int... values) {
for (int v : values)
row[indexFrom++] = v;
}
並重寫
if(row[1] == row[0]) {
row[0] *= 2;
row[1] = row[2];
row[2] = 0;
}
else if(row[2] == row[1]) {
row[1] *= 2;
row[2] = 0;
}
到
if (row[1] == row[0])
set(0, row[0] * 2, row[2], 0);
else if (row[2] == row[1])
set(1, row[1] * 2, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.