⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 char.c

📁 坦克大战,实现基本的游戏功能
💻 C
字号:
/*
    char.c

    字符显示相关函数实现
    最后修改: 2007-06-19

*/

#include "char.h"
#include <stdio.h>
#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<16;j++)
    {
        mask=0x80;
        for(i=0;i<8;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<16;j++) /* 根据点阵数据画出汉字 */
    {
        for(i=0;i<16;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<nX2&&j<=nY2-15)&&(*str)!='\0')
    {
        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<<3);  // 每字符占 8 字节
    for(j=nY;j<nY+8;j++)
    {
        mask=0x80;
        for(i=nX;i<nX+8;i++)
        {
            if(((*p)&mask)) PutPix(i, j, byColor);
            else PutPix(i, j, byBgColor);
            mask=(mask>>1);
        }
        p++;
    }
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -