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语言dos游戏编程,◣电脑游戏编程入门 (DOS)◥相关推荐
- 计算机玩电脑游戏,玩电脑游戏250字
最近,我刚学会了一种电脑游戏超级索尼科! 我先选了人物四号小兔子!因为这是我好心的同学叶奕杭给我的宝贝建议.因为小兔子会飞,而其他人物都不会.所以,小兔子就能轻而易举地飞过一... 今天,我百般无聊, ...
- 用c游戏编程语言,电脑游戏都是用什么编程语言编得?
2008-08-01 我刚开始学VB.net,感觉VB.net常在Visual studio的环境下运行,之后下载了Microsoft Visual Basic 2005 express edtion ...
- 计算机游戏的英语怎么写,电脑游戏英语怎么写
随着电脑的普及,电脑游戏在我们的生活中也越来越常见.下面小编为大家带来电脑游戏的英语意思和相关用法,欢迎大家一起学习! 电脑游戏的英语意思 Computer game 电脑游戏的相关英语例句 1. A ...
- 电脑游戏怎么转移新电脑,换新电脑如何迁移游戏
案例分享:"朋友们,我之前在steam上下载了泰拉瑞亚,玩了很久,但由于我换了电脑,在新设备上登录steam账号时,我的游戏存档不存在了.我不想丢失掉那些宝贵的数据.电脑游戏怎么转移新电脑? ...
- 我热爱计算机作文450字,我爱玩电脑游戏
我爱玩电脑游戏 相关内容: 随着网络越来越发达,电脑游戏也随着横行了.下面是语文迷整理的玩电脑游戏的英语作文,希望对你有帮助.篇一:Nowadays, there are more and more ...
- 关于计算机高中英语作文,玩电脑游戏高中英语作文
现在越来越多的学生总是花很多时间来玩电脑游戏,电脑游戏在许多方面有不良影响.下面是小编为大家精心整理的关于玩电脑游戏高中英语作文,希望能够帮助到你们. 玩电脑游戏 Nowadays playing c ...
- 电脑系统CMD命令dos命令大全
一般来说dos命令都是在dos程序中进行的,如果电脑中安装有dos程序可以从开机选项中选择进入,在windows 系统中我们还可以从开始运行中输入cmd命令进入操作系统中的dos命令,如下图: 电脑系 ...
- 八十年代的计算机游戏,盘点PC游戏史上最重要的50款游戏!第1期:60-80年代
9.<创世纪4(Ultima IV)> 发售时间:1985年9月 开发者:Origin Systems 入选理由:如今很多游戏中的"道德系统"很可能就是从这里开始的,这 ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个
急求:C语言编写的中国象棋游戏一个 來源:互聯網 2009-09-08 12:30:35 評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...
最新文章
- Django 自定义模板标签TemplateTags
- 改变QTableWidget 行高
- NYOJ 264 国王的魔镜
- 迪粉汇接入网易云信,打造比亚迪车友亲密沟通利器
- 看到这一幕,我甚至都想戒烟了。。 | 今日最佳
- Java 9:对可选的增强
- 吴恩达深度学习编程作业汇总
- 如何判断一个new出来的空对象
- 截至11日14时37分,“11.11京东全球好物节”累计下单金额突破1794亿元
- 力扣——LCP 37. 最小矩形面积(困难)
- Hyperledger Fabric chaincode 开发(疑难解答)
- Prototype使用$w()函数
- mybatis使用collection查询集合属性规则
- caffe手写数字分类-学习曲线
- 华为网络安全工程师:HCNA-Security(H12-711)题型解析(第一部分)-马青-专题视频课程...
- 在 pandas 中画树状图,使用 squarify 画树状图
- WePhone网络电话灰色运营?专家:若无许可属非法
- Telemetry 标准日志接口如何提升运维效率?
- 联想G40-30进入PE鼠标键盘失灵解决方法
- MLAPP————第十二章 隐线性模型