1、8. 问题及心得体会 189. 对本设计过程及方法、手段的改进建议 1810. 任务分配 1811. 参考文献 18课程设计报告1. 课程设计内容本课程设计的内容是设计一个基于SDL的记忆小游戏。2. 课程设计目的考察自己对课程的掌握程度,以及自己实际的动手能力,编程能力。3. 背景知识网络应用程序的基本实现方法网络游戏的基本实现原理 SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。 这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。 当然,最为重要的是提供了2D图形帧缓冲(framebu
2、ffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。 SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D 硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。 SDL是一个跨平台的函数库,几乎支持现今所有平台:Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX。 4. 工具/
3、准备工作硬件:安装有windowsXP以上版本的操作系统PC机一台建议配置是CPU PIV以上,512M内存以上, 20G硬盘空间以上ARM2200教学实验开发平台软件:安装PhotoshopVMware 6.0,debian5. 设计步骤与方法在photoshop下编辑图片 编译程序安装SDL使用命令“sdl-config -cflags”来检查是否已安装SDL。如果没有安装,可以选择上网安装,或从源码包安装: 上网安装:首先确保能联上internet(如果没有联上互联网可参考Linux相关实验常见问题.doc).并在命令行下输入 :apt-get install libsdl1.2-dev
4、 libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev。系统将自动完成安装 从源码包安装:拷贝SDL-1.2.13.tar.gz至linux主机/home/test目录,然后执行命令:tar xvzf tar xvzf SDL-1.2.13.tar.gz SDL-1.2.13.tar.gz, 执行后,将在本地生成一个SDL-1.2.13的目录,进入这个目录,在root权限下,依次执行 ./configure; make; make install linux下编译执行1) 将源文件sdl_simple_game.cpp拷贝到linu
5、x主机2) 进行编译:g+ -o t sdl_simple_game.cpp L/usr/lib lSDL,生成可执行文件3) 执行 ,在命令行输入./t设计游戏代码 /The headers#include SDL/SDL.hSDL/SDL_image.h#include math.h/Screen attributesconst int SCREEN_WIDTH = 721;const int SCREEN_HEIGHT = 721;const int SCREEN_BPP = 32;/The frames per secondconst int FRAMES_PER_SECOND = 1
6、0;/The dimenstions of the stick figureconst int FOO_WIDTH = 180;const int FOO_HEIGHT = 180;const int Begin=0;const int Run=1;const int End=2;bool flag44;int tu44;int tu_x;int tu_y;int m_x;int m_y;bool m_s;bool lock=true;bool quit = false;int g_s;int end_y;/The surfacesSDL_Surface *foo = NULL;SDL_Sur
7、face *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;/The
8、event structureSDL_Event event;/The areas of the sprite sheetSDL_Rect menu_rect 2 ;SDL_Rect end_rect 2 ;/The stick figureclass Fooprivate: /The offset int offSet; /Its rate of movement int velocity; /Its current frame int frame;public: /Initializes the variables Foo(); /Handles input void handle_eve
9、nts(); /Shows the stick figure void show();SDL_Surface *load_image( std:string filename ) /The image thats loaded SDL_Surface* loadedImage = NULL; /The optimized surface that will be used SDL_Surface* optimizedImage = NULL; /Load the image loadedImage = IMG_Load( filename.c_str() ); /If the image lo
10、aded if( loadedImage != NULL ) /Create an optimized surface optimizedImage = SDL_DisplayFormat( loadedImage ); /Free the old surface SDL_FreeSurface( loadedImage ); /If the surface was optimized if( optimizedImage ! /Color key surface SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( opt
11、imizedImage-format, 0, 0xFF, 0xFF ) ); /Return the optimized surface return optimizedImage;void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ) /Holds offsets SDL_Rect offset; /Get offsets offset.x = x; offset.y = y; /Blit SDL_BlitSurface( source,
12、clip, destination, &offset );/*void set_clips() /Clip the sprites 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_WI
13、DTH * 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_
14、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;
15、 clipsLeft 3 .w = FOO_WIDTH; clipsLeft 3 .h = FOO_HEIGHT;*/bool init() /Initialize all SDL subsystems if( SDL_Init( SDL_INIT_EVERYTHING ) = -1 ) return false; /Set up the screen screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); /If there was an error in setting up
16、the screen if( screen = NULL ) /Set the window caption SDL_WM_SetCaption( Animation Test, NULL ); /If everything initialized fine return true;void Cs_Index() srand(time(NULL); int i,j,x,y,t; int k=0; m_s = true; tu_x = -1; lock = false; quit = false; end_y = 30; g_s = Begin; for(i=0;i4;i+) for(j=0;j
17、=300 & y= 240 & x=420 & quit = true; / g_s =End; else if(g_s = Run) if(lock & !flagy/180x/180) flagy/180x/180 = true; m_s = !m_s; m_x = x; m_y = y;void move() if(g_s = Run & lock = false) if(m_s) if(tu_x != -1)&(tutu_xtu_y != tum_y/180m_x/180) ) flagtu_xtu_y = false; flagm_y/180m_x/180 = false; else
18、 tu_x = m_y/180; tu_y = m_x/180; lock = true; bool isopen = true; for(int i=0; i i+) for(int j=0; j 360) end_y = 360; end_rect0.y = 360-end_y; end_rect0.h = end_y; end_rect1.h = end_y;show() int i,j; if(g_s = Begin)/如果开始状态,显示开始图片 apply_surface(0, 0, begin, screen); for( i=0;2; apply_surface(240, 300
19、+i*60, menu, screen, &menu_recti); /遍历图像索引,在相应位置显示图像 for( j=0; if(flagij) /翻开 switch(tuij) case 0: apply_surface(180*j,180*i, pai1, screen); break; case 1: apply_surface(180*j,180*i, pai2, screen); case 2: apply_surface(180*j,180*i, pai3, screen); case 3: apply_surface(180*j,180*i, pai4, screen); case 4: apply_surface(180*j,180*i, pai5, screen); case 5: apply_surface(180*j,180*i, pai6, screen); case 6: apply_surface(180*j,180*i, pai7, screen); case 7: apply_surface(180*j,180*i, pa
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1