用於C51的2048核心演算法

2021-07-08 10:39:30 字數 1804 閱讀 3219

**直接可以使用,呼叫turn(direction)即可以對4x4陣列進行移動。

用法:宣告乙個4x4陣列,並賦初值為0,然後呼叫給定的turn 跟 addnumber即可。

ps:is_over有錯誤,其他正常,過幾天修正。測試**平台為vs2010,測試通過。

/*介面名稱:

turn(direction):diection:left,right,up,down(方向)

isover(int【】【】)判斷當前遊戲狀態,win,lose,ok

addnumber(int【】【】):加入乙個數

*/#include

#define win 3

#define lose 2

#define ok 1

enum dir;

unsigned int square[4][4]=;//自己定義個4x4矩陣,請刪除,其他可以直接使用

static unsigned int srand=;

static unsigned int rand(unsigned int s)

return s[i];

}static unsigned int add_number(unsigned int p[4])}}

}static void swap(unsigned int *_left,unsigned int *_right)

static char add_up(unsigned int p[4],int direction,int *grade)

case right:

case up:

case down:

}if(i4<2)

}for(i2=0;i2<=2;i2++)}}

}else

}for(i2=3;i2>=1;i2--)}}

}if(i3)

return 0;

}static char left(unsigned int p[4],int *grade)}}

}if(!add_up(p,left,grade))

return flag;

}static char right(unsigned int p[4],int *grade)}}

}if(!add_up(p,right,grade))

return flag;

}static char down(unsigned int p[4],int *grade)}}

}if(!add_up(p,down,grade))

return 0;

}static char up(unsigned int p[4],int *grade)}}

}if(!add_up(p,up,grade))

return flag;

}char turn(unsigned int p[4],int direction,int *grade)

}char is_over(unsigned int p[4])

}if(i==16)

return lose;

return ok;

}int main()

printf("\n");

}printf("%d\n",grade);

switch(getchar())

//judge win or not

if(is_over(square)==lose)

else if(is_over(square)==win)

//see if moved

if(flag)

getchar();

}return 0;

}

2048核心演算法,c 實現

這一篇主要講如何相應操縱者給出的指令,對地圖進行相應的操作。這裡我最開始的思路很簡單,就是將地圖的移動方式分為四種,即上 w 下 s 左 a 右 d 但是如果分為四個函式的話,那就太繁瑣了,復用性太差,相同的 複製四次只修改一點,十分難看,所以通過思考將四個移動方式合併成為乙個移動方式就是本篇所要思...

2048 遊戲核心演算法

2048 遊戲核心演算法 架構顯示 介面 與控制 演算法 分離 控制台pyqt pygame 演算法1.高內聚 上下移動 矩陣轉置 左右移動 向左移動 合併資料 零元素後移 向右移動 翻轉 合併資料 零元素後移 2.降維思想 將二維列表的操作,改為對一維列表的操作.list merge none z...

C 鬥牛核心演算法

撲克牌 0 52 取隨機數 using system using system.collections using system.collections.generic public class bullfighttools 要牌 public static int getnumber while ...