2013年11月21日星期四(地图)

2023-11-07

初始

DDraw_BOB                          bob;

BOB                                textures;

tool                           mytool;

char                           buffer[80];

BITMAP_FILE                        bitmap8bit;

int world_x = 0,   // current position of viewing window

    world_y = 0;

 

// use an array of string pointers, could have used an

// array of chars or int, but harder to initialize

// the characters '0' - '9' represent bitmaps 0-9 in some texture memory

char *world[21] =

{

"111111111111111111111111111111",

"100000000000000000000000000001",

"100002222220000000000000077701",

"100002222223333333333000077701",

"100002222227777777773000070001",

"100002222227777777773000070001",

"100000000377777777773000070001",

"107777700377777777773000070001",

"177777770377777777773000770001",

"107777700377777777773007700001",

"100777770377777777773777000001",

"100000707377777777773000000001",

"100007777377777777773000000001",

"100000000302222777773000000001",

"100000000332222777773000000001",

"100000000002222333333000000001",

"100000666666666666666666600001",

"100000800000000000000000800001",

"100000800000000000000000800001",

"100000000000000000000000000001",

"111111111111111111111111111111",

 

};

 

在初始化中

int Game_Init(void *parms = NULL, int num_parms = 0)

{

    // this is called once after the initial window is created and

    // before the main event loop is entered, do all your initialization

    // here

    srand( GetTickCount());

    //初始化DDRAW

    char filename[80]; // used to build up files names

 

    ddraw->DDraw_Init( main_window_handle, SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP );

 

    bob.Load_Bitmap_File( & bitmap8bit, "SCROLLTEXTURES.BMP");

    ddraw->Set_Palette( bitmap8bit.palette );

 

    if( ! bob.Create_BOB( ddraw->getlpdd(), & textures, 0, 0, 64, 64, 10, BOB_ATTR_VISIBLE | BOB_ATTR_MULTI_FRAME, DDSCAPS_SYSTEMMEMORY ) )

         return ( 0 );

    for (int index = 0; index < NUM_TEXTURES; index++)

         bob.Load_Frame_BOB(&textures,&bitmap8bit,index,index%4,index/4,BITMAP_EXTRACT_MODE_CELL);

 

// unload the texture map bitmap

    bob.Unload_Bitmap_File(&bitmap8bit);

 

    RECT screen_rect = {0,0,SCREEN_WIDTH,SCREEN_HEIGHT-32}; // 32 pixels at the bottom for controls

    ddraw->DDraw_Attach_Clipper(ddraw->getbackSurface(),1,&screen_rect);

 

    ShowCursor( FALSE );

   

    // return success or failure or your own return code here

    return(1);

}

 

 

在帧循环中,

int Game_Main(void *parms = NULL, int num_parms = 0)

{

 

int index, index_x, index_y;  // looping vars

int start_map_x,start_map_y,  // map positions

    end_map_x,end_map_y;

 

int offset_x, offset_y;       // pixel offsets within cell

 

// check of user is trying to exit

if (KEYDOWN(VK_ESCAPE) )

    PostMessage(main_window_handle, WM_DESTROY,0,0);

 

    mytool.Start_Clock();

 

    ddraw->DDraw_Fill_Surface( ddraw->getbackSurface(), 0 );

   

 

// check for movement (scrolling)

if (KEYDOWN(VK_RIGHT))

    {

    if ((world_x+=4) >= 1280)

       world_x = 1279;

 

    } // end if

else

if (KEYDOWN(VK_LEFT))

    {

    if ((world_x-=4) < 0)

       world_x = 0;

 

    } // end if

 

if (KEYDOWN(VK_UP))

    {

    if ((world_y-=4) < 0)

       world_y = 0;

 

    } // end if

else

if (KEYDOWN(VK_DOWN))

    {

    if ((world_y+=4) >= 896)

       world_y = 895;

 

    } // end if

 

// compute starting map indices by dividing position by size of cell

start_map_x = world_x/64; // use >> 6 for speed, but this is clearer

start_map_y = world_y/64;

 

// compute end of map rectangle for best cast i.e. aligned on 64x64 boundary

end_map_x = start_map_x + 10 - 1;

end_map_y = start_map_y + 7 - 1;

 

// now compute number of pixels in x,y we are within the tile, i.e

// how much is scrolled off the edge?

offset_x = -(world_x % 64);

offset_y = -(world_y % 64);

 

// adjust end_map_x,y for offsets

if (offset_x)

   end_map_x++;

 

if (offset_y)

   end_map_y++;

 

 

// set starting position of first upper lh texture

int texture_x = offset_x;

int texture_y = offset_y;

 

// draw the current window

for (index_y = start_map_y; index_y <= end_map_y; index_y++)

    {

    for (index_x = start_map_x; index_x <= end_map_x; index_x++)

        {

        // set position to blit

        textures.x = texture_x;

        textures.y = texture_y;

       

        // set frame

        textures.curr_frame = world[index_y][index_x] - '0';

 

        // draw the texture

         bob.Draw_BOB(&textures,ddraw->getbackSurface());

 

        // update texture position

        texture_x+=64;

 

        } // end for map_x

 

    // reset x postion, update y

    texture_x =  offset_x;

    texture_y += 64;

 

    } // end for map_y

 

 

    ddraw->DDraw_Flip();

   

    //while( FAILED( ddraw->DDraw_Flip() ) );

    mytool.Wait_Clock( 30 );

   

 

 

 

 

    // do nothing -- look at pretty picture

 

    // return success or failure or your own return code here

    return(1);

 

} // end Game_Main

 

如下图所示

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2013年11月21日星期四(地图) 的相关文章

  • git diff,git format-patch,git apply和patch小问题三则

    这个文档主要是用来记录工作中遇到的git patch 相关的命令的介绍和相关常见问题的解决方案 Patch文件有3中 git 给我们提供了2种patch 方案 一是用git diff生成的标准patch 二是git format patch
  • Spring Boot使用slf4j+Logback进行日志记录

    Spring Boot使用slf4j Logback进行日志记录 个人总结使用logback步骤 1 yml或 properties配置日志文件的所在路径和输出日志的范围 级别 2 配置好logback xml文件的各项参数 包括日志输出格
  • 利用vscode--sftp,将本地项目/文件上传到远程服务器中详细教程

    1 首先在 vscode 中下载 sftp 2 然后在 vscode 中打开本地将要上传的项目或文件 3 安装完后 使用快捷键 ctrl shift P 打开指令窗口 输入 sftp config 回车 在当前目录中会自动生成 vscode
  • 最小生成树笔记(Prim算法&&Kruskal算法)

    1 最小生成树 最小生成树 Minimum Spanning Tree 简称MST 是指 在一个连通无向图中 找到一个包含所有顶点的树 且该树的所有边的权重之和最小 换句话说 最小生成树是原图中的一个子图 它包含所有顶点 并且连接所有顶点的
  • OpenCV 4.0.0学习笔记 (一) 图像与视频的读写

    目录 读取图片 imread方法 图片读取出错处理 读取的图片属性 写入图片 imwrite方法 带透明度的png图像 读取视频 capture结构体 下一帧与释放 读取视频属性 get 方法 写入视频 VideoWriter类 显示窗口W
  • 使用THREE.js制作一款3D游戏

    使用THREE js制作一款3D游戏 本文是基于某位大神使用three js设计游戏的学习心得与知识分享 The Making of The Aviator Animating a Basic 3D Scene with Three js
  • ubuntu 安装微软雅黑和 Consolas 字体

    https www mycode net cn platform 741 html ubuntu 安装微软雅黑和 Consolas 字体 2条回复 Consolas 字体用来写代码真的是非常舒服 可惜 ubuntu 系统中默认并没有这个字体

随机推荐

  • Error:(15, 13) java: No property named “cType” exists in source parameter(s). Did you mean “CType”?

    实体 Data public class private String cType Mapping target type source cType 这问题是由于实体类的属性首字母小写第二个字母大写导致 source的值首字母改为大写就可以
  • 深圳杯数学建模2020c题_2020数学建模B题

    2020数学建模B题 本人咸鱼一条 参加过19年数学建模 当时在B题和C题之间选择 最后还是选择了C题 其实是B题不会写 看着去年九月参加比赛的教室 今年也坐着三人一组的建模小队 查资料 分析数据 编程 触景生情 我又老了一岁 心血来潮也看
  • NETCore入门系列(AOP之ActionFilter)

    文章目录 一 ActionFilter入门 使用场景 官方介绍 实操 二 Filter传参 TypeFilter ServiceFilter 三 Filter作用域 四 源码 一 ActionFilter入门 使用场景 一般用于Action
  • 文本转语音的接口(开放免费)

    百度的开放转换接口 http tts baidu com text2audio lan zh ie UTF 8 spd 4 text 你好啊 听起来好憨啊 lan 语言类型 lan en 英文 lan zh 中文 ie 文字编码方式 spd
  • 使用C++刷算法题的简明教程

    本篇博客参考自柳婼大神的 从放弃C语言到使用C 刷算法的简明教程 1 使用C 刷算法的好处 在具备C语言的前提下 学习C 并使用它刷算法题的学习成本非常低 只需要几个小时 C 向下兼容C C语言里的语法大部分都可以在C 文件中运行 所以学习
  • 个人知识体系思维导图_职场必备思维导图:提升能力、知识体系、决策思维、领导力......

    图片来源 图虫创意 让你快速成长的职场思维 思维导图 MBA智库文档 你需要具备哪些技能 1 你需要建立系统的思维方式和做事方法 2 你需要了解不管是口碑还是硬广渠道的推广效果 3 你需要有管理能力 很好的沟通能力 4 你需要具备总结分析的
  • js刷新当前页面的5种方式

    1 reload reload 方法 该方法强迫浏览器刷新当前页面 语法 location reload bForceGet 参数 bForceGet 可选参数 默认为 false 从客户端缓存里取当前页 true 则以 GET 方式 从服
  • 设计模式之状态模式

    一 背景 状态这个词汇我们并不陌生 在日常生活中 不同时间就有不同的状态 早上起来精神饱满 中午想睡觉 下午又渐渐恢复 晚上可能只想睡觉 这就对应着一天中不同的状态 二 定义 状态 State 模式的定义 对有状态的对象 把复杂的 判断逻辑
  • Rancher 2.2.2 - HA 部署高可用k8s集群

    对于生产环境 需以高可用的配置安装 Rancher 确保用户始终可以访问 Rancher Server 当安装在Kubernetes集群中时 Rancher将与集群的 etcd 集成 并利用Kubernetes 调度实现高可用 为确保高可用
  • 已知两点经纬度,计算两点间的距离

    通过两点的经纬度计算两点之间的距离 def getDistance lng1 lat1 lng2 lat2 param lng1 A点的经度 param lat1 A点的纬度 param lng2 B点的经度 param lat2 B点的纬
  • 房屋交接时需要注意些什么?

    在房屋交接时应该注意以下几点 一 进行水电煤气抄表 并计算金额 确定上下家各自承担的份额 上下家应在双方交接房屋时做好此项工作 以免交房后双方就这些小费用产生扯皮 二 办理有线电视的结算和更名手续 买卖双方在房屋买卖交易后一般不会忘了结算水
  • C++ 学习之旅(1)——编译器Compiler

    简单来说 由C 代码文件生成可执行文件的过程如下 mermaid svg GQamCVEXMVkYEemz font family trebuchet ms verdana arial sans serif font size 16px f
  • C语言字符串的经典例题

    1 统计单词的个数 include
  • 《编程珠玑》--读书笔记12章:取样问题

    第十二章 作者提出了一个问题 程序的输入包含两个整数m和n 其中m lt n 输出是0 n 1范围内的m个随机整数 不允许重复 有两种方法达到目的 1 思路 从r个剩余的整数中选出s个 以概率s r来选择下一个数 比如 m 2 n 5 选择
  • SaaS企业怎么做决策

    帆软会议室的墙上出现了 永不上市 利润分享 的字样 所有参观的SaaS创业者都被这八个字吸引 纷纷拿出手机拍照 帆软创始人薛宝表示 在帆软全国30多家办公室的墙上都贴着这8个大字 2006年 帆软用薛宝仅有的5000元积蓄创办了这家公司 从
  • linux进程及进程间同步通信机制

    进程 一 进程的存储器安排 这是 UNIX环境高级编程 中介绍的典型存储器安排 但现实也不一定非要如此 对于c c 来说 数据的存储方式还是认为3种 堆 栈 全局数据区 包括全局数据 静态数据 常量 二 僵尸进程和孤儿进程 进程在终止前向父
  • shiro基础

    shiro基础 shiro中有三大核心架构 subjects security manager realms 分别代表 使用shiro的主体 核心安全管理器和数据和安全管理的连接 使用shiro首先需要引入shiro需要的依赖 可以通过ma
  • 前端如何进行用户权限管理

    1 问题 假如在做一个管理系统 面向老师学生的 学生提交申请 老师负责审核 或者还需要添加其他角色 功能权限都不同 现在的问题是 每种角色登录看到的界面应该都是不一样的 那这个页面的区分如何实现呢 2 要不要给老师和学生各自设计一套页面 这
  • [论文阅读]《Database Maanagement Systems》-第九章

    第九章 TREE STRUCTURED INDEXING 树结构索引 P271 301 gracefully 优雅的 适当的 because it adjusts well to changes 因为它能很好地适应变化 page bound
  • 2013年11月21日星期四(地图)

    初始 DDraw BOB bob BOB textures tool mytool char buffer 80 BITMAP FILE bitmap8bit int world x 0 current position of viewin