嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx

上传人:b****3 文档编号:18436470 上传时间:2022-12-16 格式:DOCX 页数:21 大小:177.73KB
下载 相关 举报
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx_第1页
第1页 / 共21页
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx_第2页
第2页 / 共21页
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx_第3页
第3页 / 共21页
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx_第4页
第4页 / 共21页
嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx

《嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

嵌入式网络协议及其应用开发课程设计报告基于SDL的记忆小游戏Word文档格式.docx

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.设计步骤与方法

在photoshop下编辑图片

编译程序

安装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

linux下编译执行

1)将源文件sdl_simple_game.cpp拷贝到linux主机

2)进行编译:

g++-otsdl_simple_game.cpp–L/usr/lib–lSDL,生成可执行文件

3)执行,在命令行输入./t

设计游戏代码

//Theheaders

#include"

SDL/SDL.h"

SDL/SDL_image.h"

#include<

string>

math.h>

//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!

//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)

//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<

j++)

tu[i][j]=k;

k++;

k%=8;

}

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)

//bg=load_image("

1.png"

//Ifeverythingloadedfine

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>

=420&

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;

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<

i++)

for(intj=0;

j<

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;

show()

inti,j;

if(g_s==Begin)//如果开始状态,显示开始图片

apply_surface(0,0,begin,screen);

for(i=0;

2;

apply_surface(240,300+i*60,menu,screen,&

menu_rect[i]);

//遍历图像索引,在相应位置显示图像

for(j=0;

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);

case2:

apply_surface(180*j,180*i,pai3,screen);

case3:

apply_surface(180*j,180*i,pai4,screen);

case4:

apply_surface(180*j,180*i,pai5,screen);

case5:

apply_surface(180*j,180*i,pai6,screen);

case6:

apply_surface(180*j,180*i,pai7,screen);

case7:

apply_surface(180*j,180*i,pa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1