已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书学生信息系别计算机工程学院专业计算机科学与技术班级姓名学号课程设计信息课程名称嵌入式网络协议及其应用开发课程设计课程设计题目基于SDL的记忆小游戏课程设计时间学期第 116 周小组情况指导教师批改情况成绩评阅教师批改时间2012年5月 27 日20112012学年第 2 学期目 录1.课程设计内容42.课程设计目的43.背景知识44.工具/准备工作55.设计步骤与方法55.1.步骤1:在photoshop下编辑图片55.2.步骤2:编译程序55.2.1.步骤2.1:安装SDL55.2.2.步骤2.2:linux下编译执行65.3.步骤4:设计游戏代码66.设计结果及分析187.设计结论188.问题及心得体会189.对本设计过程及方法、手段的改进建议1810.任务分配1811.参考文献18课程设计报告1. 课程设计内容本课程设计的内容是设计一个基于SDL的记忆小游戏。2. 课程设计目的考察自己对课程的掌握程度,以及自己实际的动手能力,编程能力。3. 背景知识网络应用程序的基本实现方法网络游戏的基本实现原理l SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。l 这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。l 当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以实现3D图形。l SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频,键盘,鼠标,游戏杆,基于OPENGL(一个3D图象开发函数库)的3D 硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。l SDL是一个跨平台的函数库,几乎支持现今所有平台:Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX。 4. 工具/准备工作硬件:安装有windowsXP以上版本的操作系统PC机一台建议配置是CPU PIV以上,512M内存以上, 20G硬盘空间以上ARM2200教学实验开发平台软件:安装PhotoshopVMware 6.0,debian5. 设计步骤与方法5.1. 步骤1:在photoshop下编辑图片 5.2. 步骤2:编译程序5.2.1. 步骤2.1:安装SDL使用命令“sdl-config -cflags”来检查是否已安装SDL。如果没有安装,可以选择上网安装,或从源码包安装: 上网安装:首先确保能联上internet(如果没有联上互联网可参考Linux相关实验常见问题.doc).并在命令行下输入 :apt-get install libsdl1.2-dev 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 5.2.2. 步骤2.2:linux下编译执行1) 将源文件sdl_simple_game.cpp拷贝到linux主机2) 进行编译:g+ -o t sdl_simple_game.cpp L/usr/lib lSDL,生成可执行文件3) 执行 ,在命令行输入./t5.3. 步骤4:设计游戏代码 /The headers#include SDL/SDL.h#include SDL/SDL_image.h#include #include /Screen attributesconst int SCREEN_WIDTH = 721;const int SCREEN_HEIGHT = 721;const int SCREEN_BPP = 32;/The frames per secondconst int FRAMES_PER_SECOND = 10;/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_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;/The 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_events(); /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 loaded 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 != NULL ) /Color key surface SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage-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, 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_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;*/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 the screen if( screen = NULL ) return false; /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;j4;j+) tuij=k; k+; k%=8; for(i=0;i4;i+) for(j=0;j=300 & y= 240 & x=360 & y= 240 & x490) 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; lock = false; 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 tu_x = m_y/180; tu_y = m_x/180; lock = true; bool isopen = true; for(int i=0; i4; 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; void Foo:show() int i,j; if(g_s = Begin)/如果开始状态,显示开始图片 apply_surface(0, 0, begin, screen); for( i=0; i2; i+) apply_surface(240, 300+i*60, menu, screen, &menu_recti); else if(g_s = Run) /遍历图像索引,在相应位置显示图像 for( i=0; i4; i+) for( j=0; j4; j+) 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); break; case 2: apply_surface(180*j,180*i, pai3, screen); break; case 3: apply_surface(180*j,180*i, pai4, screen); break; case 4: apply_surface(180*j,180*i, pai5, screen); break; case 5: apply_surface(180*j,180*i, pai6, screen); break; case 6: apply_surface(180*j,180*i, pai7, screen); break; case 7: apply_surface(180*j,180*i, pai8, screen); break; else/没翻开 apply_surface(180*j,180*i, foo, screen); else if(g_s = End) /apply_surface(0, 0, endBg, screen); apply_surface(0, 0, end, screen, &end_rect0); apply_surface(0, 720-end_y, end, screen, &end_rect1); int main( int argc, char* args ) /Quit flag / bool quit = false; /Initialize if( init() = false ) return 1; /Load the files if( load_files() = false ) return 1; /Clip the sprite sheet Cs_Index(); /The stick figure Foo walk; while(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南充文化旅游职业学院单招职业倾向性测试题库及答案解析(名师系列)
- 2026年上海大学单招职业适应性测试必刷测试卷附答案解析
- 2026年上海外国语大学贤达经济人文学院单招职业适应性测试题库带答案解析
- 2026年延边职业技术学院单招职业技能考试题库附答案解析
- 2026年哈密职业技术学院单招职业适应性测试题库及答案解析(名师系列)
- 2026年中山职业技术学院单招职业技能测试必刷测试卷带答案解析
- 2026年兰州资源环境职业技术大学单招综合素质考试题库附答案解析
- 2026年云南经贸外事职业学院单招职业倾向性考试题库及答案解析(名师系列)
- 基于量子计算的大菲波数列优化算法
- 2026年新疆建设职业技术学院单招职业适应性测试必刷测试卷及答案解析(名师系列)
- 2024秋新人教版数学一年级上册教学课件 第六单元 复习与关联1. 数与运算
- 青少年羽毛球运动员核心力量训练的探究与实操指南
- 《深度学习 》课件 第4章-循环神经网络
- 数据库应用技术-第三次形考作业(第10章~第11章)-国开-参考资料
- 湿法冶金技术
- 伦理冲突案例分析-深度研究
- 生物反应器设备验证方案
- 2025年银联商务股份有限公司招聘笔试参考题库含答案解析
- 2024-2025学年成都市高一上英语期末考试题(含答案和音频)
- 2025年中国铁路成都局集团招聘笔试参考题库含答案解析
- 送样品协议书范本
评论
0/150
提交评论