坦克大战,实现基本的游戏功能

源代码在线查看: char.c

软件大小: 233 K
上传用户: foreigngirl
关键词:
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				    char.c
				
				    字符显示相关函数实现
				    最后修改: 2007-06-19
				
				*/
				
				#include "char.h"
				#include 
				#include "graph.h"
				
				FILE *g_pfHZK16, *g_pfASC16;
				
				char OpenCharSet()  /* 打开字库 */
				{
				    g_pfASC16=fopen("ASC16", "rb");
				    g_pfHZK16=fopen("HZK16", "rb");
				    if(g_pfASC16!=NULL||g_pfHZK16!=NULL) return 1;
				    else return 0;
				}
				
				void CloseCharSet()  /* 关闭字库 */
				{
				    if(g_pfASC16!=NULL) fclose(g_pfASC16);
				    if(g_pfHZK16!=NULL) fclose(g_pfHZK16);
				}
				
				void PrintChar(int nX, int nY, char cChar, char byColor, char byBgColor) /* 显示英文字符 */
				{
				    int i, j;
				    char mat[16];
				    unsigned char mask;
				
				    fseek(g_pfASC16, cChar*16, SEEK_SET);
				    fread(mat, 16, 1, g_pfASC16);
				
				    for(j=0;j				    {
				        mask=0x80;
				        for(i=0;i				        {
				            if(i%8==0) mask=0x80;
				            if(mat[j]&mask) PutPix(nX+i, nY+j, byColor);
				            else PutPix(nX+i, nY+j, byBgColor);
				            mask=(mask>>1);
				        }
				    }
				}
				
				void DispHZ(int nX, int nY, char cChar[2], char byColor, char byBgColor) /* 显示汉字 */
				{
				    int i, j;
				    unsigned char qh, wh;
				    unsigned long offset;
				    char mat[32];
				    unsigned char mask;
				
				    qh = cChar[0] - 0xa0;
				    wh = cChar[1] - 0xa0;
				    offset = (94*(qh - 1) + (wh - 1)) * 32L;
				    fseek(g_pfHZK16, offset, SEEK_SET);
				    fread(mat, 32, 1, g_pfHZK16);
				
				    for(j=0;j				    {
				        for(i=0;i				        {
				            if(i%8==0) mask=0x80;
				            if(mat[j*2+i/8]&mask) PutPix(nX+i, nY+j, byColor);
				            else PutPix(nX+i, nY+j, byBgColor);
				            mask=(mask>>1);
				        }
				    }
				}
				
				void OutTextXY(int nX1, int nY1, int nX2, int nY2, char szText[], char byColor, char byBgColor)
				/* 定点显示文本, 可以中英文混合 */
				{
				    int i=nX1, j=nY1;
				    char *str=szText;
				
				    while((i				    {
				        if(*str=='\n')
				        {
				            if(i!=nX1)  /* 不是刚换行 */
				            {
				                i=nX1;  /* 换行 */
				                j+=16;
				            }
				            str++;
				        }
				        else if(*str>0)  /* 英文 */
				        {
				            if(i>nX2-7)
				            {
				                i=nX1;
				                j+=16;
				            }
				            PrintChar(i, j, *str, byColor, byBgColor);
				            str++;
				            i+=8;
				        }
				        else
				        {
				            if(i>nX2-15)
				            {
				                i=nX1;
				                j+=16;
				            }
				            DispHZ(i, j, str, byColor, byBgColor);
				            str+=2;
				            i+=16;
				        }
				    }
				}
				
				/*
				unsigned char far *g_pbyRomChar=(char far *)0xF000FA6EL;  // BIOS 中存放字符的首地址
				void PrintChar(int nX, int nY, char cChar, char byColor, char byBgColor) // 显示字符
				{
				    int i, j;
				    unsigned char far *p;
				    unsigned char mask;
				    p=g_pbyRomChar+(cChar				    for(j=nY;j				    {
				        mask=0x80;
				        for(i=nX;i				        {
				            if(((*p)&mask)) PutPix(i, j, byColor);
				            else PutPix(i, j, byBgColor);
				            mask=(mask>>1);
				        }
				        p++;
				    }
				}
				*/
							

相关资源