云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 单片机课程设计报告 - 图文

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

  • 62 次阅读
  • 3 次下载
  • 2025/6/8 8:27:38

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

搜索更多关于: 单片机课程设计报告 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

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

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com