花了兩個多小時,用最蠢的方法寫的……最簡陋版……
還不確定這麼寫邏輯對不對……
#include #include #include #include #include using namespace std;int map[5][5];
int score;
int move(int& a, int& b, int& c, int& d) //move nonzero digit to front
++zero_num;
a = b;
b = c;
c = d;
d = 0;
if (++vis_num >= 4) return zero_num;
}while (1)
++zero_num;
b = c;
c = d;
d = 0;
if (++vis_num >= 4) return zero_num;
}while (1)
++zero_num;
c = d;
d = 0;
if (++vis_num >= 4) return zero_num;
}if (d == 0)
++zero_num;
return zero_num;
}void change(int& a, int& b, int& c, int& d)
return ;
}if (zero_num == 1) else if (c == b)
return ;
}if (a == b) else
} else if (b == c) else if (c == d)
}int rand_2_or_4()
void rand_pos()
while (map[x][y]);
map[x][y] = rand_2_or_4();
}void print()
printf("\n");
}printf("score:%d\n", score);
}bool is_full()
bool is_over_row(int a, int b, int c, int d)
bool is_over()
for (i = 0; i < 4; ++i)
return true;
}int main()
srand(unsigned(time(null)));
rand_pos();
rand_pos();
print();
while (!is_over())
} else if (dir == 's') else if (dir == 'a') else if (dir == 'd') else continue;
if (!is_full()) rand_pos();
system("cls");
print();
}printf("lose!");
return 0;
}
後來發現我的寫法有問題,因為如果不移動的話,就不會產生新的數字,而我的邏輯是只要有空位就有新的數字。之前沒有認真觀察過,懶得改了(其實是沒想到什麼好的方法……
C語言簡易版2048
二維陣列 int board 4 4 int if need rand 是否需要生成隨機數 int if game over 遊戲是否結束 介面 void showgame else if i 3 else void gameover 隨機位置生成隨機數2或4 void addrand else 初...
c語言實現簡易2048遊戲
我寫的2048每次只能隨機生成乙個新的2,不能生成4以及其他的數,沒有計分系統,只能記錄步數。由於是基於控制台的遊戲,所以操作起來比較麻煩。演算法思想 每次進行wsad操作的時候都先在各行各列檢查可以合併的項,並且合併之,合併完之後在進行緊湊處理。假如各行各列已經沒有可以合併的相鄰的項了,那麼遊戲就...
2048字元版C語言實現
include game.h intmain lcd.h ifndef lcd h define lcd h void show arry int p 4 int col endif lcd.c include lcd.h include void show arry int p 4 int row...