python實現消消樂遊戲 C語言實現消消樂遊戲

2021-10-13 01:25:10 字數 2639 閱讀 4637

問題描述

給定乙個矩陣, 判斷移動哪乙個格仔,可以實現消除。(定義連續三個即可消除)

據說是華為的筆試題。

分析先寫乙個函式,判斷包含(i, j)的格仔是否可能實現消除。

然後就是向右向下交換,然後呼叫上面寫好的函式判斷

被交換的兩個格仔是否實現消除。

重點是:

1、只需要向右向下交換,因為遍歷的時候,後面的交換會重複。前乙個判斷了向右交換是否消除,後乙個遍歷就不需要再判斷向左交換是否重複了。

2、一定要對被交換的兩個格仔都判斷是否能消除,才能實現全面的判斷。

**// main.cpp

// huawei

// created by stevewong on 11/10/2016.

#include

#include

#include

#include

//#include

using namespace std;

const int len = 8;

void pmap(int map[len])

for (int i = 0; i < len; ++i)

for (int j = 0; j < len; ++j)

cout << map[i][j] << " ";

cout << endl;

// 檢查以(i,j)為中心的點, 看是否可以消除

bool check(int map[len], int i, int j)// 保證i、j不越界,

if (

(i-1>=0 && i+1

|| (j-1>=0 && j+1

|| (i-2>=0 && map[i-2][j]==map[i-1][j]&&map[i-1][j]==map[i][j])

|| (j-2>=0 && map[i][j-2]==map[i][j-1]&&map[i][j-1]==map[i][j])

|| (i+2

|| (j+2

return true;

return false;

bool swapandjudge(int m[len], int i, int j)// 保證i、j不越界, 應該對被swap的兩個點都做縱向和橫向的檢查

int map[len][len];

for (int ii = 0; ii < len; ++ii)

for (int jj = 0; jj < len; ++jj)

map[ii][jj] = m[ii][jj];

// 原來就可以消除

if (check(map, i, j))

printf("no need to swap at (%d, %d)\n", i, j);

return true;

// 只需要向下換和向右換

// 向下換

if (i + 1 < len)

swap(map[i+1][j], map[i][j]);

if (check(map, i, j))

printf("# swap and sweap! (%d, %d)\n", i, j);

return true;

if (check(map, i+1, j))

printf("# swap and sweap! (%d, %d)\n", i+1, j);

return true;

swap(map[i+1][j], map[i][j]);// 換回來

// 向右換

if (j + 1 < len)

swap(map[i][j+1], map[i][j]);

if (check(map, i, j))

printf("# swap and sweap! (%d, %d)\n", i, j);

return true;

if (check(map, i, j+1))

printf("# swap and sweap! (%d, %d)\n", i, j+1);

return true;

swap(map[i][j+1], map[i][j]);// 換回來

return false;

void findminswap(int map[len])

for (int i = 0; i < len; ++i)

for (int j = 0; j < len; ++j)

if (swapandjudge(map, i, j))

printf("gotcha! (%d, %d)\n", i, j);

int main(int argc, const char * ar**) {

// insert code here...

// std::cout << "hello, world!\n";

srand(unsigned(time(0)));

for (int i = 0; i < len; ++i)

for (int j = 0; j < len; ++j)

map[i][j] = rand() % 5;

cout << "xiaoxiaole!\n";

findminswap(map);

pmap(map);

return 0;

您可能感興趣的文章:

C語言實現消消樂

消除類遊戲是深受大眾歡迎的一種遊戲,遊戲在乙個包含有n行m列的遊戲棋盤上進行,棋盤的每一行每一列的方格上放著乙個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除。現在給你乙個n行m列的棋盤,棋盤中的每乙個方格上有乙個棋...

python作業5 消消樂

相鄰的組合兩兩相消去,最後是否能消完 str defsearch a,lst 尋找元素是否在列表中,並返回index for i in range len lst if lst i a return i else return false defcheck str 判斷是否可消完 open brac...

用PHP實現開心消消樂演算法

一 需求描述 1 在乙個8 8的矩陣方格中隨機出現5種顏色的色塊。2 當有三個或以上色塊在橫向或縱向上相連,則消除這些色塊。3 色塊消除後,上方色塊往下平移,並掉下顏色隨機的色塊填充矩陣空缺。4 重複2 3步驟。5 消除3個相同色塊加10分,4個加15分,5個加20分,6個加30分,7個加40分,8...