b = pixels[i++]; g = pixels[i++]; r = pixels[i++];
color = (r << 16) |(g << 8) |(b);
LCD_Draw_Point(x0 + x, y0 + 99 - y,color); } } }
3、触摸事件操作
触摸屏事件的操作,即游戏玩家在玩游戏时,通过手指在屏幕上进行上下左右滑动进行游戏操作,接着屏幕根据手势操作进行反应。为实现该效果,我们在此加入了如下的代码及函数。
intGet_Finger_Move_Direction() {
intfd = open(\
if(fd == -1) {
printf(\ }
structinput_eventev; int result; int direct;
intstartX = -1,startY = -1; intendX,endY,deltaX,deltaY;
while(1) {
result = read(fd,&ev,sizeof(ev)); if(result != sizeof(ev)) { continue; }
if((ev.type == EV_ABS) && (ev.code == ABS_X)) {
if(startX == -1) { startX = ev.value; } endX = ev.value; }
5
if((ev.type == EV_ABS) && (ev.code == ABS_Y)) {
if(startY == -1) { startY = ev.value; } endY = ev.value; }
if((ev.type == EV_ABS) && (ev.code == ABS_PRESSURE) && (ev.value == 0)) {
deltaX = abs(endX - startX); deltaY = abs(endY - startY);
if(deltaX>deltaY) { if(endX>startX) {
direct = MOVE_RIGHT; break;
} else
{ direct = MOVE_LEFT; break;
} } else
{ if(endY>startY) // {
direct = MOVE_DOWN; break;
} else
{ direct = MOVE_UP; break;
} } } } close(fd);
return direct; }
LINUX文件下会提供我们一个屏幕操作的接口,我们只需调用该接口文件,通
6
过判断是X操作还是Y操作,通过不同的返回值,根据判断即可判断出屏幕滑动操作是往上下左右那个方向。
4、C二维数组及矩阵变换算法
该算法是本游戏的核心算法,也是2048游戏开发的难点所在,通过分析,发现我们主要是对matrix_2048[X][Y]矩阵进行变换操作,该变换操作可分为上下左右四种,为这四种操作分别写一子函数,其中向左移动时,该矩阵变换规律实现的代码如下:
void Move_left() // 向左移动操作 {
inti,j,k; Zero_b();
for(i=0; i<4; i++) // 通过一个buffer数组实现将不为的数左移 {
k=0; for(j=0; j<4; j++) {
if(matrix_2048[i][j]!=0) {
buffer[i][k]=matrix_2048[i][j]; k++;
} } }
for(i=0; i<4; i++) {
for(j=0; j<4; j++) { if(buffer[i][j]!=matrix_2048[i][j]) { Flag_Move=1; }
if(buffer[i][j]==buffer[i][j+1]&&(j+1)<4) {
buffer[i][j]=2*buffer[i][j];
for(k=j+2; k<4&&buffer[i][k]!=0; k++) {
buffer[i][k-1]=buffer[i][k]; } buffer[i][k-1]=0; }
matrix_2048[i][j]=buffer[i][j]; } }
7
}
该算法的核心思想是把不为0的数先往左移,然后判断相邻的数是否相等,如果相等即前前面一个数乘以2,后面的数被依次被更以后的数所覆盖,最终实现左移操作。
5、随机函数
2048游戏的实现离不开随机函数,当玩家进行一项滑动的操作时,屏幕上需在空白随机出现“2”或者“4”的图片,但是出现前者的概率应大于后者,在这里,为实现随机函数,我们取计算机的时间为随机数的种子,通过调用sandom()函数实现,具体代码如下: voidGet_Random() {
intindex_x=0,index_y=0,index_rad; int rad[4]= {2,2,4,2}; inti,j;
intnum=0; int table[4][4];
index_rad=random()%4;
for(i=0; i<4; i++) {
for(j=0; j<4; j++) { table[i][j]=17; } }
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
if(matrix_2048[i][j]==0) { table[i][j]=num; num++;
} } }
num=random()%num;
for(i=0; i<4; i++)
8
相关推荐: