1 / 32

计算机游戏实验

计算机游戏实验. 计算机科学与技术学院. 提纲. 实验一 迷宫游戏 实验二 精灵动画 实验三 初始化游戏循环 实验四 二维碰撞检测 实验五 A-star 寻路算法实现 实验六 服务器端和客户端 Socket 编程. 实验一 迷宫游戏. 实验目的: 对游戏元素、游戏有初步认识 理解游戏的开发思想,创建地图等 实验内容: 建立简单的游戏场景:迷宫地图 创建一个小迷宫游戏. 实验准备. 迷宫地图: 笑脸(人) 墙壁 路径 出口 规则: 墙壁不能通过,只能沿地图上的路径行动; 有一个出发点,最终到一个目的地:出口, 到达出口则游戏结束。.

ziazan
Download Presentation

计算机游戏实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机游戏实验 计算机科学与技术学院

  2. 提纲 • 实验一 迷宫游戏 • 实验二 精灵动画 • 实验三 初始化游戏循环 • 实验四 二维碰撞检测 • 实验五 A-star寻路算法实现 • 实验六 服务器端和客户端Socket编程

  3. 实验一 迷宫游戏 • 实验目的: • 对游戏元素、游戏有初步认识 • 理解游戏的开发思想,创建地图等 • 实验内容: • 建立简单的游戏场景:迷宫地图 • 创建一个小迷宫游戏

  4. 实验准备 • 迷宫地图: • 笑脸(人) • 墙壁 • 路径 • 出口 • 规则: • 墙壁不能通过,只能沿地图上的路径行动; • 有一个出发点,最终到一个目的地:出口,到达出口则游戏结束。

  5. 预备知识: • 所需按键键盘码 • #define ESC 0x011b • #define UP 0x4800 • #define DOWN 0x5000 • #define LEFT 0x4b00 • #define RIGHT 0x4d00

  6. 游戏流程 退出游戏 ESC键? 接受按键 判断按键 上下左右键? 执行相关操作 无效按键? 忽略处理

  7. 实验结果

  8. 实验二 精灵动画 • 实验目的: • 掌握镂空贴图的原理 • 实现精灵动画效果,为二维游戏动画的实现提供基础,为接下来的实验做好准备

  9. 实验内容: • 使用Vc6.0和如下素材,实现镂空贴图,并进一步实现精灵动画效果

  10. 实验准备 • 镂空贴图原理: • 首先将掩码图和背景图案按位与,将原始图像的主体对应位置挖空 • 然后将原始图像和上一步处理结果按位或,则原始图像的主体部分贴到背景上并遮盖背景

  11. 预备知识: • BitBlt()函数 • 光栅运算操作码,操作数SRCAND表示把源图像和目标图像按位与,操作数SRCPAINT则表示按位或 • 双缓存技术 • 不要在窗口中直接贴图,避免闪烁 • 建立一个内存DC,然后把所有的贴图动作都在这个DC上进行,最后把结果显示到操作窗口中

  12. 思考: • 如何实现复杂的动画,比如实现人行走的动画效果? • 提示:使用多幅精灵图和对应的掩码图

  13. 实验三 初始化游戏循环 • 实验目的:理解和掌握游戏的运行流程 • 实验内容: • 检查系统资源 • 计算CPU速度 • 加载游戏调试选项 • 初始化资源缓存 • 实现游戏的主循环

  14. 实验准备: • 游戏的基本运行流程 键盘 鼠标 游戏杆 获得用户输入 • 初始化 • 内存分配 • 构建表格 • 载入文件 • 主菜单 • 载入 • 保存 • Play 执行Gameplay逻辑 • 游戏逻辑 • AI • 碰撞检测 • 运动 主循环 输出到buffer 内存 • 画面更新 • 背景动画 • 音乐,声效 绘制到屏幕 显示器 否 退出循环 同步至大约以每秒30帧

  15. 输出 交互 处理游戏运行过程中的各种数据,在输出设备上(显示器、音箱)体现游戏的内容,包括游戏画面、游戏音效、游戏提示等 根据用户的操作,改变游戏的各种数据,以反映游戏的当前状态 调度模块 do-while循环

  16. 实验示例 while(game_state!=GAME_EXIT){ //游戏循环的实现部分 switch(game_state) { case GAME_INIT: { //初始化 init(); game_state=GAME_MENU; } break; case GAME_MENU: { //游戏目录 game_state=MENU(); //调用菜单并等待选择 } break; //游戏准备运行,这是个可选部分,但通常使用这个状态来 //将一些游戏中要用到的变量赋值初始化 case GAME_STARTING: {

  17. Setup_For_Run(); //切换到运行状态 game_state=GAME_RUN; } break; case GAME_RUN: { //游戏运行,这部分包括整个游戏逻辑 Clear(); //清屏 //循环过程 Get_Input(); //获取输入 Do_Logic(); //AI逻辑 Render_Frame(); //图像绘制,精灵动画的实现部分 Wait(); //等待显示同步,切换游戏状态的唯一办法就是在 } // Get_Input()中的用户输入ESC break; //游戏重新启动,这部分是用来将游戏循环中改变的状态进行恢复的 case GAME_RESTART: {

  18. Fixup(); //切换回游戏目录 game_state=GAME_MENU; } break; case GAME_EXIT: { //游戏退出,进入这个状态就 //将释放一切内存并退出游戏 Release_And_Cleanup(); error=0; } //正常退出 break; default: break; } //switch结束 } //while结束 return (error); //返回错误代码 } //main函数结束

  19. 实验四 二维碰撞检测 • 实验目标 • 理解碰撞检测的基本思想 • 实现一下三种简单的二维碰撞检测方法 • 区域检测 • 碰撞点检测 • 颜色检测 • 比较各种碰撞检测算法的优缺点

  20. 实验内容: • 在实现精灵动画的基础上,进一步,在背景上使用镂空贴图贴上一棵树,然后,车在行驶的时候,能够检测是否碰到树,碰撞检测方法任选 • 实验要求: • 实现三种区域检测算法,比较个算法的优缺点,并给出解释和说明。

  21. 预备知识: • 区域检测:实验包围盒(长方形)将被测物体包围起来,通过判断包围盒是否接触来判定物体是否碰撞。

  22. 实验五 A-star寻路算法的实现 • 实验目的: • 掌握A-star算法 • 理解自动寻路算法的实质 • 理解人工智能的思想

  23. 实验内容:在迷宫游戏的基础上,实现一个基于A*算法的寻路算法,可以找一条从入口到出口的路径。

  24. 预备知识:A-star算法: • 对可能的后继状态n’,计算其目标函数f(n’),并置于优先队列中 • f(n’) = g(n’) + h(n’),其中g(n’)是从初始状态到n’的“花费”

  25. 思考:如果地图上各个区域的权重不一样,又该如何考虑呢?比如某些区域很危险等等。思考:如果地图上各个区域的权重不一样,又该如何考虑呢?比如某些区域很危险等等。

  26. 实验六 服务器端和客户端socket编程 • 实验目的: • 理解简单的socket编程过程 • 了解网络程序的编写 • 了解一般网络游戏大厅的原理

  27. 实验内容:实现一个简单的游戏大厅服务器端和客户端,多个客户端可以连接大厅并且传输数据。

  28. 预备知识 • Socket编程模式 • 至少需要一对,一个是客户端的ClientSocket;另一个是服务器端的ServerSocket. • Socket的连接过程可分为3个步骤: • 服务器监听,客户端请求,连接确认。 • 服务器监听:处于等待连接状态,实时监控网络 • 客户端请求:客户端socket请求连接服务器端的socket(地址,端口)

  29. Socket的APIs • Socket 的启动与中止---WSAStartup(); WSACleanup() • Socket的创建---Socket()和WSASocket() • 指定本地地址—Bind() • 建立连接----Connect(), WSAConnect() • 监听连接---Listen()

  30. Socket的APIs(续) • 接受连接请求-----accept()和WSAaccept() • 数据发送---send()(TCP协议)和sendto() (UDP协议) • 数据接收---recv() (TCP协议)和recvfrom() (UDP协议) • I/O多路复用----select() • 中断连接---closeSocket()和shutdown()

  31. 客户端流程

  32. 服务器端流程

More Related