嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏.docx
- 文档编号:5448971
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:21
- 大小:177.73KB
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏.docx
《嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏.docx》由会员分享,可在线阅读,更多相关《嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏.docx(21页珍藏版)》请在冰豆网上搜索。
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏
课程设计说明书
学生信息
系别
计算机工程学院
专业
计算机科学与技术
班级
姓名
学号
课程设计信息
课程名称
嵌入式网络协议及其应用开发课程设计
课程设计题目
基于SDL的记忆小游戏
课程设计时间
学期第1~16周
小组情况
指导教师
批改情况
成绩
评阅教师
批改时间
2011-2012学年第2学期
目录
1.课程设计内容4
2.课程设计目的4
3.背景知识4
4.工具/准备工作5
5.设计步骤与方法5
5.1.步骤1:
在photoshop下编辑图片5
5.2.步骤2:
编译程序5
5.2.1.步骤2.1:
安装SDL5
5.2.2.步骤2.2:
linux下编译执行6
5.3.步骤4:
设计游戏代码6
6.设计结果及分析18
7.设计结论18
8.问题及心得体会18
9.对本设计过程及方法、手段的改进建议18
10.任务分配18
11.参考文献18
课程设计报告
1.课程设计内容
本课程设计的内容是设计一个基于SDL的记忆小游戏。
2.课程设计目的
考察自己对课程的掌握程度,以及自己实际的动手能力,编程能力。
3.背景知识
网络应用程序的基本实现方法
网络游戏的基本实现原理
●SDL是SimpleDirectMediaLayer(简易直控媒体层)的缩写。
它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。
●这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。
●当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。
●SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D硬件,和2D图象帧缓冲区。
它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。
●SDL是一个跨平台的函数库,几乎支持现今所有平台:
Linux,Windows,WindowsCE,BeOS,MacOS,MacOSX,FreeBSD,NetBSD,OpenBSD,BSD/OS,Solaris,IRIX,andQNX。
4.工具/准备工作
硬件:
安装有windowsXP以上版本的操作系统PC机一台
建议配置是CPUPIV以上,512M内存以上,20G硬盘空间以上
ARM2200教学实验开发平台
软件:
安装Photoshop
VMware6.0,debian
5.设计步骤与方法
5.1.步骤1:
在photoshop下编辑图片
5.2.步骤2:
编译程序
5.2.1.步骤2.1:
安装SDL
使用命令“sdl-config-cflags”来检查是否已安装SDL。
如果没有安装,可以选择上网安装,或从源码包安装:
✧上网安装:
首先确保能联上internet(如果没有联上互联网可参考《Linux相关实验常见问题.doc》).并在命令行下输入:
apt-getinstalllibsdl1.2-devlibsdl-image1.2-devlibsdl-mixer1.2-devlibsdl-ttf2.0-dev。
系统将自动完成安装
✧从源码包安装:
拷贝SDL-1.2.13.tar.gz至linux主机/home/test目录,然后执行命令:
tarxvzftarxvzfSDL-1.2.13.tar.gzSDL-1.2.13.tar.gz,执行后,将在本地生成一个SDL-1.2.13的目录,进入这个目录,在root权限下,依次执行./configure;make;makeinstall
5.2.2.步骤2.2:
linux下编译执行
1)将源文件sdl_simple_game.cpp拷贝到linux主机
2)进行编译:
g++-otsdl_simple_game.cpp–L/usr/lib–lSDL,生成可执行文件
3)执行,在命令行输入./t
5.3.步骤4:
设计游戏代码
//Theheaders
#include"SDL/SDL.h"
#include"SDL/SDL_image.h"
#include
#include
//Screenattributes
constintSCREEN_WIDTH=721;
constintSCREEN_HEIGHT=721;
constintSCREEN_BPP=32;
//Theframespersecond
constintFRAMES_PER_SECOND=10;
//Thedimenstionsofthestickfigure
constintFOO_WIDTH=180;
constintFOO_HEIGHT=180;
constintBegin=0;
constintRun=1;
constintEnd=2;
boolflag[4][4];
inttu[4][4];
inttu_x;
inttu_y;
intm_x;
intm_y;
boolm_s;
boollock=true;
boolquit=false;
intg_s;
intend_y;
//Thesurfaces
SDL_Surface*foo=NULL;
SDL_Surface*screen=NULL;
SDL_Surface*menu=NULL;
SDL_Surface*begin=NULL;
SDL_Surface*end=NULL;
SDL_Surface*pai1=NULL;
SDL_Surface*pai2=NULL;
SDL_Surface*pai3=NULL;
SDL_Surface*pai4=NULL;
SDL_Surface*pai5=NULL;
SDL_Surface*pai6=NULL;
SDL_Surface*pai7=NULL;
SDL_Surface*pai8=NULL;
//Theeventstructure
SDL_Eventevent;
//Theareasofthespritesheet
SDL_Rectmenu_rect[2];
SDL_Rectend_rect[2];
//Thestickfigure
classFoo
{
private:
//Theoffset
intoffSet;
//Itsrateofmovement
intvelocity;
//Itscurrentframe
intframe;
public:
//Initializesthevariables
Foo();
//Handlesinput
voidhandle_events();
//Showsthestickfigure
voidshow();
};
SDL_Surface*load_image(std:
:
stringfilename)
{
//Theimagethat'sloaded
SDL_Surface*loadedImage=NULL;
//Theoptimizedsurfacethatwillbeused
SDL_Surface*optimizedImage=NULL;
//Loadtheimage
loadedImage=IMG_Load(filename.c_str());
//Iftheimageloaded
if(loadedImage!
=NULL)
{
//Createanoptimizedsurface
optimizedImage=SDL_DisplayFormat(loadedImage);
//Freetheoldsurface
SDL_FreeSurface(loadedImage);
//Ifthesurfacewasoptimized
if(optimizedImage!
=NULL)
{
//Colorkeysurface
SDL_SetColorKey(optimizedImage,SDL_SRCCOLORKEY,\
SDL_MapRGB(optimizedImage->format,0,0xFF,0xFF));
}
}
//Returntheoptimizedsurface
returnoptimizedImage;
}
voidapply_surface(intx,inty,SDL_Surface*source,\
SDL_Surface*destination,SDL_Rect*clip=NULL)
{
//Holdsoffsets
SDL_Rectoffset;
//Getoffsets
offset.x=x;
offset.y=y;
//Blit
SDL_BlitSurface(source,clip,destination,&offset);
}
/*voidset_clips()
{
//Clipthesprites
clipsRight[0].x=0;
clipsRight[0].y=0;
clipsRight[0].w=FOO_WIDTH;
clipsRight[0].h=FOO_HEIGHT;
clipsRight[1].x=FOO_WIDTH;
clipsRight[1].y=0;
clipsRight[1].w=FOO_WIDTH;
clipsRight[1].h=FOO_HEIGHT;
clipsRight[2].x=FOO_WIDTH*2;
clipsRight[2].y=0;
clipsRight[2].w=FOO_WIDTH;
clipsRight[2].h=FOO_HEIGHT;
clipsRight[3].x=FOO_WIDTH*3;
clipsRight[3].y=0;
clipsRight[3].w=FOO_WIDTH;
clipsRight[3].h=FOO_HEIGHT;
clipsLeft[0].x=0;
clipsLeft[0].y=FOO_HEIGHT;
clipsLeft[0].w=FOO_WIDTH;
clipsLeft[0].h=FOO_HEIGHT;
clipsLeft[1].x=FOO_WIDTH;
clipsLeft[1].y=FOO_HEIGHT;
clipsLeft[1].w=FOO_WIDTH;
clipsLeft[1].h=FOO_HEIGHT;
clipsLeft[2].x=FOO_WIDTH*2;
clipsLeft[2].y=FOO_HEIGHT;
clipsLeft[2].w=FOO_WIDTH;
clipsLeft[2].h=FOO_HEIGHT;
clipsLeft[3].x=FOO_WIDTH*3;
clipsLeft[3].y=FOO_HEIGHT;
clipsLeft[3].w=FOO_WIDTH;
clipsLeft[3].h=FOO_HEIGHT;
}*/
boolinit()
{
//InitializeallSDLsubsystems
if(SDL_Init(SDL_INIT_EVERYTHING)==-1)
{
returnfalse;
}
//Setupthescreen
screen=SDL_SetVideoMode(SCREEN_WIDTH,\
SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE);
//Iftherewasanerrorinsettingupthescreen
if(screen==NULL)
{
returnfalse;
}
//Setthewindowcaption
SDL_WM_SetCaption("AnimationTest",NULL);
//Ifeverythinginitializedfine
returntrue;
}
voidCs_Index()
{
srand(time(NULL));
inti,j,x,y,t;
intk=0;
m_s=true;
tu_x=-1;
lock=false;
quit=false;
end_y=30;
g_s=Begin;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
tu[i][j]=k;
k++;
k%=8;
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
x=rand()%4;
y=rand()%4;
t=tu[i][j];
tu[i][j]=tu[x][y];
tu[x][y]=t;
}
}
memset(flag,0,sizeof(flag));
menu_rect[0].x=0;
menu_rect[0].y=0;
menu_rect[0].w=250;
menu_rect[0].h=120;
menu_rect[1].x=0;
menu_rect[1].y=120;
menu_rect[1].w=250;
menu_rect[1].h=120;
end_rect[0].x=0;
end_rect[0].y=300;
end_rect[0].w=720;
end_rect[0].h=30;
end_rect[1].x=0;
end_rect[1].y=360;
end_rect[1].w=720;
end_rect[1].h=30;
}
boolload_files()
{
//Loadthespritesheet
foo=load_image("foo.bmp");
begin=load_image("begin.bmp");
end=load_image("end.bmp");
menu=load_image("menu.bmp");
pai1=load_image("pai1.bmp");
pai2=load_image("pai2.bmp");
pai3=load_image("pai3.bmp");
pai4=load_image("pai4.bmp");
pai5=load_image("pai5.bmp");
pai6=load_image("pai6.bmp");
pai7=load_image("pai7.bmp");
pai8=load_image("pai8.bmp");
//Iftherewasaprobleminloadingthesprite
if(foo==NULL||begin==NULL||end==NULL||menu==NULL||pai1==NULL||pai2==NULL||pai3==NULL||pai4==NULL||
pai5==NULL||pai6==NULL||pai7==NULL||pai8==NULL)
{
returnfalse;
}
//bg=load_image("1.png");
//Ifeverythingloadedfine
returntrue;
}
voidclean_up()
{
//Freethesurface
SDL_FreeSurface(foo);
SDL_FreeSurface(begin);
SDL_FreeSurface(end);
SDL_FreeSurface(menu);
SDL_FreeSurface(pai1);
SDL_FreeSurface(pai2);
SDL_FreeSurface(pai3);
SDL_FreeSurface(pai4);
SDL_FreeSurface(pai5);
SDL_FreeSurface(pai6);
SDL_FreeSurface(pai7);
SDL_FreeSurface(pai8);
//QuitSDL
SDL_Quit();
}
Foo:
:
Foo()
{
//Initializemovementvariables
offSet=0;
velocity=0;
}
voidFoo:
:
handle_events()
{
intx=0,y=0;
if(event.type==SDL_MOUSEBUTTONUP)
{
if(event.button.button==SDL_BUTTON_LEFT)
{
x=event.button.x;
y=event.button.y;
if(g_s==Begin)
{
if(y>=300&&y<=360&&x>=240&&x<490)
{
g_s=Run;
}
elseif(y>=360&&y<=420&&x>=240&&x<490)
{
quit=true;
//g_s=End;
}
}
elseif(g_s==Run)
{
if(lock&&!
flag[y/180][x/180])
{
flag[y/180][x/180]=true;
m_s=!
m_s;
m_x=x;
m_y=y;
lock=false;
}
}
}
}
}
voidmove()
{
if(g_s==Run&&lock==false)
{
if(m_s)
{
if((tu_x!
=-1)&&(tu[tu_x][tu_y]!
=tu[m_y/180][m_x/180]))
{
flag[tu_x][tu_y]=false;
flag[m_y/180][m_x/180]=false;
}
}
else
{
tu_x=m_y/180;
tu_y=m_x/180;
}
lock=true;
boolisopen=true;
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
if(flag[i][j]==false)
{
isopen=false;
}
}
}
if(isopen)
{
g_s=End;
}
}
elseif(g_s==End)
{
end_y+=60;
if(end_y>360)
{
end_y=360;
}
end_rect[0].y=360-end_y;
end_rect[0].h=end_y;
end_rect[1].h=end_y;
}
}
voidFoo:
:
show()
{
inti,j;
if(g_s==Begin)//如果开始状态,显示开始图片
{
apply_surface(0,0,begin,screen);
for(i=0;i<2;i++)
{
apply_surface(240,300+i*60,menu,screen,&menu_rect[i]);
}
}
elseif(g_s==Run)
{
//遍历图像索引,在相应位置显示图像
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(flag[i][j])//翻开
{
switch(tu[i][j])
{
case0:
apply_surface(180*j,180*i,pai1,screen);break;
case1:
apply_surface(180*j,180*i,pai2,screen);break;
case2:
apply_surface(180*j,180*i,pai3,screen);break;
case3:
apply_surface(180*j,180*i,pai4,screen);break;
case4:
apply_surface(180*j,180*i,pai5,screen);break;
case5:
apply_surface(180*j,180*i,pai6,screen);break;
case6:
apply_surface(180*j,180*i,pai7,screen);break;
case7:
apply_surface(180*j,180*i,pa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 网络 协议 及其 应用 开发 课程设计 报告 基于 SDL 记忆 小游戏