C语言dos游戏编程,◣电脑游戏编程入门 (DOS)◥

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

八.在屏幕上画位图

计算机绘制图像通常采用一种称为位映射图(BITMAP)的图形处理方法进行,位映射图是一个矩形的点阵结构(二维矩阵),显示在屏幕上时,对应屏幕上一个矩形区域,组成位图的数据储存在内存中一段连续的区间。我们比较常见的位图文件有:BMP、PCX、GIF、JPG等。位图通常存储在外部文件中,使用以前必须将其从磁盘文件调入内存。下面介绍将一个256色PCX图形文件读入内存的方法:

1.定义PCX文件头结构:

typedef struct PCX_HEADER

{

char menufactrue; /* 厂家标识编号 0x0a */

char version; /* 文件版本编号 */

char packing_type; /* 压缩模式 */

char bits_per_pixel; /* 每点占用的位数 */

int minx; /* 最小X坐标值 */

int miny; /* 最小Y坐标值 */

int maxx; /* 最大X坐标值 */

int maxy; /* 最大Y坐标值 */

int hres; /* 水平分辨率 */

int vres; /* 垂直分辨率 */

char palette[48]; /* 颜色调色板 */

char unused; /* 未使用 */

char bit_plance; /* 位平面个数 */

int bytes; /* 单一水平线占用的字节数 */

int palette_type; /* 调色板类型 */

char unused2[58]; /* 未使用 */

}PCXHeader,*PCXHeaderPtr;

2.定义用来存放PCX图像数据的结构:

typedef struct PCX_PICTURE

{

int width;

int height;

char far *buffer;

RGBColor palette[256];

}PCXPicture,*PCXPicturePtr;

3.初始化图像数据的函数:

int InitPCX(PCXPicturePtr image,int w,int h)

{

unsigned size=w*h;

image->width=w;

image->height=h;

image->buffer=(char far *)farmalloc(size);

if(image->buffer==NULL) return 0;

return 1;

}

4.从外部文件读入数据的函数:

int LoadPCX(char *filename,PCXPicturePtr image,int flag)

{

FILE *fp;

unsigned num_bytes,count,size;

int index;

unsigned char data;

PCXHeader PcxHeader;

size=image->width*image->height;

if((fp=fopen(filename,"rb"))==NULL)

return 0;

fread(&PcxHeader,sizeof(PCXHeader),1,fp);

count=0;

while(count<=size)

{

data=fgetc(fp);

if(data>=192&&data<=255)

{

num_bytes=data-192;

data=fgetc(fp);

while(num_bytes-->0)

{

*(image->buffer+count)=data;

++count;

}

}

else

{

*(image->buffer+count)=data;

++count;

}

}

fseek(fp,-768L,SEEK_END);

for(index=0;index<256;index++)

{

image->palette[index].red=((fgetc(fp))>>2);

image->palette[index].green=((fgetc(fp))>>2);

image->palette[index].blue=((fgetc(fp))>>2);

}

fclose(fp);

if(flag==1)

for(index=0;index<256;index++)

SetPaletteRegister(index,(RGBColorPtr)&image->palette[index]);

return 1;

}

其中参数flag用来指明调入文件的同时是否设置颜色寄存器(flag=1设置)。

5.画位图的函数:

void DrawImage(int x,int y,int width,int height,char far *image)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(*image!=0&&(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200)

DrawPoint(x+j,y+i,*image);

image++;

}

}

x,y是图像在屏幕上的左上角坐标,width,height是图像的宽度和高度,image是指向内存中图像的指针。

我们对if(*image!=0&&(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200)语句进行一下分析:

*image!=0用来检查所画的颜色值是否是透明色,如果是,则不画出来,这样我们就可以画出有透明效果的图象,即透过图象可以看到背景,透明色通常取值0,也可以用其他的颜色值表示。

(x+j)>=0&&(x+j)<320&&(y+i)>=0&&(y+i)<200语句用来判断所画点的坐标是否超出屏幕显示的范围,这样可以画出具有裁剪效果的图象,如图象的一部份在屏幕外。

这个函数并不是最快的,因为它要执行width X height次判断,更快的函数请看VGA13H函数库中的绘图函数�

C游戏编程从入门到精通 本书以C语言游戏编程入手,以102个实例,近200个函数较为系统地介绍了C基于游戏编程开发的方法与技巧,内容丰富并相互包容,相互渗透。以实际的基于不同平台的游戏制作为背景,知识阐述与实际案例结合,深入浅出,具体、直观、全面,可操作性强;是一本难得的集入门、深入到精通C游戏编程的综合书籍 目录: 目 录 第1章 猜数字游戏 1 1.1 游戏创意 1 1.2 游戏规划 2 1.3 程序实现 4 1.4 游戏调试 6 1.5 文本模式游戏制作 8 1.5.1 文本窗口函数 9 1.5.2 INT10中断功能 11 1.6 本章小结 11 第2章 用C语言函数库画图 12 2.1 设置图形模式 12 2.2 在图形模式下绘图 14 2.2.1 点 14 2.2.2 线 14 2.2.3 填充 15 2.3 在图形模式下写字 15 2.3.1 文本属性设置 15 2.4 独立图形程序的建立 16 2.5 赛车的完整图画 17 2.6 本章小结 18 第3章 简单动画 20 3.1 实现动画思路 20 3.2 屏幕保存与恢复 22 3.3 重画动画实例 24 3.4 简单动画实现 26 3.5 用异或实现赛车动画 29 3.6 本章小结 32 第4章 简单图形游戏 33 4.1 从动画到游戏 33 4.2 简单用户响应 34 4.3 接收用户信息 36 4.4 配上其它东西 39 4.4.1 配上声音 39 4.4.2 加入片头和片尾 39 4.4.3 使用随机数 41 4.5 赛车游戏 42 4.6 本章小结 43 第5章 图形模式 44 5.1 显示适配器与显示模式 44 5.1.1 显示适配器 44 5.1.2 显示模式 45 5.2 图形模式13H 45 5.3 调用BIOS中断10H 47 5.4 用汇编设置模式 47 5.4.1 使用汇编文件 47 5.4.2 行内汇编 48 5.5 本章小结 49 第6章 二维图形 51 6.1 基本图形 51 6.1.1 直接写屏 51 6.1.2 直接画点 52 6.1.3 直接画线 53 6.1.4 直接画多边形 56 6.2 图形函数优化 57 6.3 更多图形 59 6.4 本章小结 63 第7章 中文显示 64 7.1 文字显示原理 64 7.2 西文显示 65 7.2.1 使用ROM字符集 65 7.2.2 使用西文字库 67 7.3 中文平台下文字显示 69 7.3.1 汉字显示方法 69 7.3.2 中文平台判别 69 7.4 西文平台下中文调用 70 7.4.1 hzk16中文字库文件 70 7.4.2 hzk24中西文共显 73 7.5 小字库. 无字库技术 73 7.5.1 小字库技术 74 7.5.2 无字库技术 80 7.6 中文特效 83 7.6.1 多字体显示 83 7.6.2 文字格式显示 83 7.7 本章小结 84 第8章 图形文件 85 8.1 bmp文件调用 85 8.1.1 bmp文件结构 86 8.1.2 256色bmp文件显示 88 8.2 pcx文件调用 93 8.2.1 pcx文件结构和编码 93 8.2.2 pcx文件显示 96 8.2.3 播放pcx文件 98 8.3 ico文件显示 99 8.3.1 ico文件结构 99 8.3.2 ico文件显示 102 8.4 本章小结 105 第9章 动画原理 106 9.1 动画技术分类 106 9.2 重画技术 107 9.2.1 直接重画 107 9.2.2 缓冲技术 108 9.3 异或技术 110 9.4 调色板技术 112 9.4.1 调色板寄存器 112 9.4.2 调色板动画原理 115 9.4.3 调色板动画举例 116 9.5 拉屏技术 120 9.6 适用环境和效率 125 9.7 本章小结 127 第10章 子画面技术 129 10.1 子画面概述 129 10.1.1 子画面 129 10.1.2 子画面结构 131 10.1.3 面向对象 133 10.2 显示子画面 135 10.3 子画面运动 140 10.4 背景问题 141 10.5 子画面游戏 144 10.6 子画面绘制 151 10.7 本章小结 152 第11章 文件操作 154 11.1 文件基本操作 154 11.1.1 建立. 打开和关闭 154 11.1.2 读取和写入 155 11.2 游戏进度文件 155 11.2.1 两种方法 156 11.2.2 保存进度文件 157 11.2.3 读取进度文件 159 11.3 游戏数据文件 161 11.4 dbf文件 163 11.4.1 dbf文件结构 163 11.4.2 dbf文件读取 164 11.5 本章小结 165 第12章 声音技术 166 12.1 PC喇叭发声 166 12.1.1 发声系统 166 12.1.2 PC喇叭播放歌曲 167 12.1.3 扬声器背景音乐 168 12.2 声卡技术 169 12.2.1 DSP简介 169 12.2.2 DSP端口寻找 170 12.2.3 写DSP 170 12.3 播放wav文件 171 12.3.1 WAV文件格式 171 12.3.2 WAV文件播放 172 12.4 WAV背景音乐 173 12.5 本章小结 173 第13章 内存技术 175 13.1 常规内存 175 13.2 内存结构 176 13.3 XMS技术 177 13.3.1 XMS基本知识 177 13.3.2 XMS基本函数 177 13.3.3 XMS调用基本程序 177 13.3.4 将中文字库调入XMS 178 13.4 EMS技术 180 13.4.1 EMS基本知识 180 13.4.2 EMS调用基本程序 181 13.4.4 将中文字库调入EMS 183 13.4.5 全方位拉屏 184 13.5 本章小结 196 第14章 接口技术 197 14.1 键盘 197 14.1.1 键盘读取 197 14.1.2 同时按下问题 200 14.1.3 模拟按键 201 14.1.4 清空键盘缓冲 201 14.2 鼠标 202 14.2.1 鼠标基本函数 202 14.2.2 改变鼠标形状 204 14.2.4 用pcx图像做鼠标 209 14.3 串口 211 14.3.1 串口基础 211 14.3.2 利用串口传输文件 216 14.3.3 两机坦克对打例程 219 14.4 本章小结 226 第15章 界面技术 228 15.1 界面对象的结构 228 15.1.1 对象的结构分析 228 15.1.2 对象的初始化 230 15.1.3 界面设计与分析 231 15.2 对象绘制函数 232 15.2.1 填充矩形绘制函数 232 15.2.2 立体按钮绘制 233 15.2.3 窗体. 按钮和菜单绘制 233 15.3 使用链表 238 15.4 对象事件函数 239 15.4.1 按钮的基本动作 239 15.4.2 菜单的基本动作 240 15.5 进行事件检测 243 15.6 界面例程 244 15.7 游戏实例 245 15.7.1 DOS游戏界面设计 245 15.7.2 将界面插入游戏 247 15.7.3 构建个性化界面 250 15.8 本章小结 251 第16章 其他问题 252 16.1 TSR驻留 252 16.1.1 TSR基本知识 252 16.1.2 时钟驻留 253 16.1.3 热键驻留 253 16.2 简单病毒 253 16.3 OOP应用 254 16.4 各类游戏编程思路 256 16.4.1 桌面游戏编程思路 256 16.4.2 视频对战游戏编程思路 257 16.4.3 魂斗罗类游戏编程思路 259 16.4.4 玛丽. 赛车类游戏编程思路 260 16.4.5 RPG游戏编程思路 262 16.5 本章小结 263 第17章 游戏例程 265 17.1 建立通用游戏函数库 265 17.2 游戏创意 265 17.3 游戏规划 268 17.3.1 详细设计 268 17.3.2 程序流程设计 271 17.4 程序编写 272 17.4.1 文件清单 272 17.4.2 进度文件 272 17.4.3 图片文件 272 17.4.4 数据文件 273 17.4.5 代码文件 276 17.5 游戏场景 276 17.6 本章小结 281 附录A 游戏函数库 282 附录B 简单数据库 297 B.1 数据库要求 297 B.2 详细设计 298 B.3 模块设计 300 B.3.1 输入 300 B.3.2 检查 303 B.3.3 显示 307 B.3.4 删除 309 B.3.5 插入 317 B.3.6 查找 322 B.3.7 修改 329 B.3.8 排序和交换节点 337 B.3.9 保存 343 B.3.10 读取 344 B.3.11 清空 346 B.4 程序代码 346 B.5 通用数据库设计 397
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值