湖南农业大学课程论文
学院:***班级:***
姓名:***学号:***
姓名:***学号:***
课程论文题目:单片机技术课程设计之2048游戏开发课程名称:单片机技术
评阅成绩:
评阅意见:
成绩评定教师签名:
日期:年月日
单片机技术课程设计
——2048游戏开发
摘要:嵌入式系统已经有了近40年的发展历史,它是硬件和软件交替双螺旋式发展的。随着信息化、智能化、网络化的发展,嵌入式系统技术也将获得广阔的发展空间。本课程设计是以一款高性能的三星芯片s5pv210ah为核心,在Linux环境下生成可执行文件,通过LCD显示屏触摸操作,完成2048游戏开发。通过本课程设计,可以体现嵌入式技术的优越性。
关键词:嵌入式;LCD屏;Linux;游戏开发;
一.总设计流程
二、设计要求及内容
(一)c语言源代码编写
经过分析,该游戏的开发主要以下分为五大部分:
1、linux文件IO
通过如下代码,我们将实现linux文件的输入与输出:
fd = open("/dev/fb0", O_RDWR);
if (fd == -1)
{
perror("open failed:"); // 打开失败
return -1;
}
以及在程序结束时,我们使用完该文件关闭文件代码:
close(fd);
2、bmp图片格式解析
为实现2048游戏的开发,对图片进行操作是必不可少的,通过寻一些带数字的BMP格式的图片,将这些图片按照游戏规则显示显示在屏幕上。如下的代码即为如何将一张BMP格式的图片显示在LCD屏幕上。
voidLCD_Draw_Bmp(int x0, int y0, char *bmpname)
{
intfd;
inti = 0;
int x, y;
unsigned char pixels[100*100*3];
fd = open(bmpname, O_RDONLY);
lseek(fd, 54, SEEK_SET);
read(fd, pixels, 100*100*3);
close(fd);
//ÏÔʾͼƬ
for (y = 0; y < 100; y++)
{
for (x = 0; x < 100; x++)
{
unsigned char r, g, b;
int color;
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("/dev/event0",O_RDWR);
单片机printf函数if(fd == -1)
{
printf("file \"/dev/event0\" open failed");
}
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;
}