2048小游戏主要算法实现
生活随笔
收集整理的這篇文章主要介紹了
2048小游戏主要算法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681
4681: 2048
時間限制(普通/Java):1000MS/3000MS ? ? 內存限制:65536KByte總提交: 45 ? ? ? ?? ? 測試通過:16
描寫敘述
2048是一款近期較為流行的數字游戲。非常多同學在課堂上研究怎樣得到更高的積分,以至影響了學習效果,不如自己寫下這款游戲吧,這樣預計也就沒有玩的興趣了。游戲的規則是:給定一個4*4的方格,開始的時候僅僅有若干個2, 每次能夠選擇上下左右當中一個方向去滑動,每滑動一次,全部的數字方塊都會往滑動的方向靠攏外,系統也會在空白的地方亂數出現一個數字方塊,同樣數字的方塊在靠攏、相撞時會相加,能夠連續移動但不能連續相加。玩家的目標就是盡快湊出“2048”這個數字方塊。
作為一個程序猿。寫一個2048游戲當然難不倒你。通過分析你發現主要問題是怎樣依據當前狀態和滑動方向,確定出下一個方格狀態即滑動后的結果(不考慮新增加的隨機方格)。
每一個狀態繪制出來便成了一個簡單的2048游戲。
?
輸入
輸入數據有多組,每組數據的第一行為一個整數d(0表示向左滑,1表示向右滑。2表示向上滑,3表示向下滑)。
接下來有4行4列的方格,每一個方格的值僅僅能為0。2,4。8,16,32,64。128,256,512,1024,2048。當中0表示該格子為空白。
輸出
每組輸出滑動后的狀態,即4行4列的格子值。
例子輸入
2 0 0 0 0 0 0 0 0 0 2 2 0 2 0 0 0 0 2 2 2 0 0 0 2 0 0 0 0 0 0 0 0 0例子輸出
2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 4 2 0 0 2 0 0 0 0 0 0 0 0 0 0 0#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; int a[4][4],n; void up_remove_blank(){int i,j,k;for(j=0;j<4;j++){for(i=1;i<4;i++){k=i;while(k-1>=0&&a[k-1][j]==0){//上面的那個為空 swap(a[k][j],a[k-1][j]);k--;}}} } void down_remove_blank(){int i,j,k;for(j=0;j<4;j++){for(i=2;i>=0;i--){k=i;while(k+1<=3&&a[k+1][j]==0){//上面的那個為空 swap(a[k][j],a[k+1][j]);k++; }}} } void left_remove_blank(){int i,j,k;for(i=0;i<4;i++){for(j=1;j<4;j++){k=j;while(k-1>=0&&a[i][k-1]==0){//上面的那個為空 swap(a[i][k],a[i][k-1]);k--;} }} } void right_remove_blank(){int i,j,k;for(i=0;i<4;i++){for(j=2;j>=0;j--){k=j;while(k+1<=3&&a[i][k+1]==0){//上面的那個為空 swap(a[i][k],a[i][k+1]);k++; } }} } void left(){int i,j;for(i=0;i<4;i++){for(j=0;j<3;j++){if(a[i][j]==a[i][j+1]){a[i][j]+=a[i][j+1];a[i][j+1]=0;left_remove_blank();}}} } void right(){int i,j;for(i=0;i<4;i++){for(j=3;j>=1;j--){if(a[i][j]==a[i][j-1]){a[i][j]+=a[i][j-1];a[i][j-1]=0;right_remove_blank();}}} } void up(){int i,j;for(j=0;j<4;j++){//每一列 for(i=0;i<3;i++){if(a[i][j]==a[i+1][j]){a[i][j]=a[i][j]+a[i+1][j];a[i+1][j]=0;//移除空格up_remove_blank(); }} } } void down(){int i,j;for(j=0;j<4;j++){//每一列 for(i=3;i>=1;i--){if(a[i][j]==a[i-1][j]){a[i][j]=a[i][j]+a[i-1][j];a[i-1][j]=0;//移除空格down_remove_blank(); }} } } void output(){int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){if(j==3) printf("%d\n",a[i][j]); else printf("%d ",a[i][j]); } } } int main(){int i,j;while(scanf("%d",&n)==1){for(i=0;i<4;i++){for(j=0;j<4;j++){scanf("%d",&a[i][j]); } }if(n==0){//左 left_remove_blank();left();}else if(n==1){//右 right_remove_blank();right();}else if(n==2){//上 up_remove_blank();up();} else{//下 down_remove_blank();down();}output();}return 0; }
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的2048小游戏主要算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hash-哈希/散列
- 下一篇: 大对象简介+大对象的4种类型+lob类型