第一范文网 - 专业文章范例文档资料分享平台

单片机课程设计报告 - 图文

来源:用户分享 时间:2025/5/21 5:00:43 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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

搜索更多关于: 单片机课程设计报告 - 图文 的文档
单片机课程设计报告 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c532pt7vhay7f2vc1v0ey6gjog0oh070069j_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top