3_25.c

来自「浙大《C语言设计基础课程设计》中的例程 有些比较好的代码!」· C语言 代码 · 共 80 行

C
80
字号
/*-------例程3-25 -------*/
#include<dos.h>
#include<conio.h> 
#include<stdio.h>

#define TEXT_MODE 0x03
#define GRAP_MODE 0x13
char hanzi[][72]={
/* 以下是“写”的24点阵华文行楷点阵字模,72 byte */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x02,0x1F,0xC0,0x03,0xF8,0x60,0x03,
  0x00,0xF0,0x07,0x21,0xE0,0x0E,0x3F,0x00,
  0x0E,0x3F,0x00,0x04,0x3E,0x00,0x00,0x20,
  0x00,0x00,0x6F,0xC0,0x00,0x78,0x60,0x00,
  0x60,0x60,0x00,0x1E,0x60,0x06,0xFE,0x60,
  0x07,0xE0,0xE0,0x07,0x20,0xC0,0x00,0x1F,
  0xC0,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      
/* 以下是“屏”的24点阵华文行楷点阵字模,72 byte */
  0x00,0x07,0x80,0x00,0x3F,0xC0,0x00,0x5D,
  0xC0,0x00,0x63,0x80,0x00,0x5F,0x80,0x00,
  0xFF,0x80,0x00,0xF1,0x80,0x01,0xAF,0xC0,
  0x01,0xB3,0x00,0x01,0x27,0x80,0x03,0x7F,
  0x00,0x02,0x3D,0x00,0x06,0x31,0xF0,0x04,
  0x3F,0xF8,0x0C,0xF1,0x00,0x0F,0xE1,0x00,
  0x18,0x21,0x00,0x30,0x21,0x00,0x20,0x61,
  0x00,0x40,0x41,0x00,0x00,0x01,0x00,0x00,
  0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
};
/*初始化屏幕为图形模式*/
void InitScreen()
{
  union REGS regs;

  regs.h.ah=0; /* 功能号为0 */
  regs.h.al=GRAP_MODE;/* 定义为VGA256色320×200图形模式 */
  int86(0x10,&regs,&regs); /*调用中断0x10******/
} 
void CloseScreen()
{ /*将屏幕设置成文本模式*/
  union REGS regs;
 
  regs.h.ah=0;
  regs.h.al=TEXT_MODE; /*定义为文本模式*/
  int86(0x10,&regs,&regs);
} 
void PutPixel(int x,int y,int color)
{ /*直接在屏幕(x,y)点坐标上画一个颜色为color的点.*/
  char far *addr=(char far*)0xA0000000L;
/*************************************************************************** VGA256色320*200图形模式的VRAM从A000:0000 到 A000:F9FF 为止,总共320*200=64000 个字节。
  ***************************************************************************/

  *(addr + (y<<8)+(y<<6) + x)=color;    /* 直接显示*/

 /***************************************************************************
 相当于*(addr+y*320+x)=color;但这样速度慢。因为320=256+64 所以用移位的方法加速显示。
***************************************************************************/
} 
void drawmat(char *mat,int matsize,int x,int y,int color)
{ /*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/
  int i,j,k,n;
  n=(matsize-1)/8+1;
  for(j=0;j<matsize;j++)
    for(i=0;i<n;i++)
     for(k=0;k<8;k++)
        if(mat[j*n+i]&(0x80>>k)) /*测试为1的位则显示*/
          PutPixel(x+i*8+k,y+j,color);
}
int main()
{
  int i;
  InitScreen(); /* 初始化屏幕 */
  for(i=0;i<2;i++)
    drawmat(hanzi[i],24,120+i*40,80,i+1);
  getch();
  CloseScreen();/* 还原为文本模式 */
  return 0;
}
/*-------例程3-25 -------*/

⌨️ 快捷键说明

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