c語言學習之小遊戲2048

2021-08-07 08:53:32 字數 3152 閱讀 6885

2048是乙個很經典的遊戲,記得當時我身邊有個小夥伴很沉迷這個,也覺得這個遊戲很厲害,於是今天就編寫了下乙個無圖形介面的。

2048遊戲在我看來需要有以下幾點:

①隨機數:對於計算機發生隨機數函式rand()是並不是乙個真正的隨機數,它是由計算機產生的一系列偽隨機數,就是當我們執行這個函式的時候需要每次獲得的結構都是一樣的,我不希望編寫遊戲編寫出來每一次結果都一樣,我查閱了資料,發現隨機數只要給乙個隨機數的種子(用來初始化第乙個隨機數),後面的結果就會隨著初始值得改變而改變,雖然還這不是真正的隨機數,但是只要做到了每一執行結果不相同我覺得也差不多可以算是隨機數了,符合我的要求,所以準備用時間來初始化這個隨機數,這樣就達到每次結果不一樣了。

srand((unsigned)time(null));  //隨機種子

②獲取鍵盤:我需要知道當我遊戲開始時我怎麼獲取玩家按下了哪個鍵,上網搜尋發現原來我們每乙個鍵都對應兩個兩個數值,按下產生乙個數值,鬆開產生另外乙個數值,我建立了乙個char 型別的變數來接收按下的數值然後根據已知的數值比較這樣就可以知道是哪個鍵了(感謝這篇博文的博主

解決了上面幾個技術上的難題,於是我開始入手寫,首先建立乙個二維陣列並且初始化為0。**如下:

int **cheil = (int **)malloc(sizeof(int*)* 5);  //動態開闢二維陣列存放資料

for (i = 0; i < 5; i++)

//隨機數

int rand(int n)

//1/5的機率是4,4/5的機率是2

int rand2or4()

else }

//產生隨機位置並寫入

int sandseat(int **n)  

else

if(x1 > 3)

if (x1 == x2&&y1 == y2)}}

n[x1][y1] = rand2or4();

return 1;

}

下面就是向右移動,根據遊戲規則我們知道如果向右移動首先會把相同的數值加起來然後移動到最右邊,我打算設定乙個標記變數來記錄是否移動或相加。**如下:

int moveright(int **n)

if (k<4 && n[i][j] == n[i][k])

}for (j = 0; j < 4; j++) //發現有0向左移動,由於是向右移動,所以從左邊乙個乙個移動}}

} }return ***;

}

同理寫出向上、下、左移動。

然後我們需要乙個判斷陣列相鄰是否相等,相等返回1,因為在2048遊戲中結束的條件是全部被佔滿並且相鄰沒有相等的值,**如下:

//判斷是否有相同

int noun(int **n)}}

return 0;

}

最後就是輸出一下陣列就可以了

在主函式中我打算首先獲取是否有相等的值,並找乙個變數記錄,然後呼叫對應的移動函式,通過移動函式返回來判斷是否發生移動或者相加,如果沒有發生就停止本次迴圈,

如果發生移動就呼叫隨機寫入函式寫入並記錄返回值i,最後再以判斷是否有相同函式返回值***2,如果兩個返回值不同時為零說明遊戲還沒有死亡,繼續迴圈,

最終**如下:

#include #include #include #include #include//隨機數

int rand(int n)

//1/5的機率是4,4/5的機率是2

int rand2or4()

else }

//輸出陣列

void show(int **n)

printf("\n"); }}

//產生隨機位置並寫入

int sandseat(int **n)

else

if(x1 > 3)

if (x1 == x2&&y1 == y2)

} }

n[x1][y1] = rand2or4();

return 1;

}//交換函式

void swap(int &a, int &b)

//右移

int moveright(int **n)

if (k<4 && n[i][j] == n[i][k])

}for (j = 0; j < 4; j++) //發現有0向左移動}}

} }return ***;

}//左移

int moveleft(int **n)

if (k >= 0 && n[i][j] == n[i][k])

}for (j = 3; j >= 0; j--) //發現有0向右移動}}

} }return ***;

}//上移

int moveup(int **n)

if (k<4 && n[i][j] == n[k][j])

}for (i = 3; i >= 0; i--) //發現有0向下移動}}

} }return ***;

}//下移

int movedn(int **n)

if (k >= 0 && n[i][j] == n[k][j])

}for (i = 0; i < 4; i++) //發現有0向上移動}}

} }return ***;

}//判斷是否有相同

int noun(int **n)

} }return 0;

}int main()

sandseat(cheil);

sandseat(cheil);

while (i||***2)

i=sandseat(cheil);

} if (key == 80)

i = sandseat(cheil);

} if (key == 75)

i = sandseat(cheil);

} if (key == 77)

i = sandseat(cheil);

} ***2 = noun(cheil);

} return 0;

}

c語言程式2048 C語言2048小遊戲演示和說明

2048遊戲是風靡一時的小遊戲,我們提供的2048小遊戲不依賴 tc 環境,不依賴任何第三方庫,可以在 vs codeblocks dev c 等常見 ide中編譯通過。我們提供給大家的 2048 小遊戲,不要求大家精通 c 語言,也不會涉及到指標的使用,只需要學會以下幾個知識點即可 設計 2048...

2048小遊戲(C語言版)

1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 1011 12 玩法說明 編譯執行後,輸入乙個整數n,表示自己想玩的遊戲中是n n的 現在手機上或者電腦上一般都是4 4的,所以我們可以...

C語言實現2048小遊戲

參考 100 行 擼了乙個 2048 的小遊戲 規則就是 2084 遊戲的規則 j 左 k 下 l 右 i 上 相同數字移動過程中會合併 這裡我把按鍵修改成了方向鍵,並加了些注釋幫助理解 include include include define game size 4 static void l...