📄 火焰.c
字号:
#include<dos.h>
#include<stdlib.h>
#define BYTE unsigned char
void setmode()
{
_AX=0x13;
geninterrupt(0x10);
}
void closemode()
{
_AX=0x3;
geninterrupt(0x10);
}
void setpal(int Color,BYTE r,BYTE g,BYTE b)
{
outportb(0x3c8,Color);
outportb(0x3c9,r);
outportb(0x3c9,g);
outportb(0x3c9,b);
}
void pset(int x,int y,BYTE color)
{
pokeb(0xa000,y*320+x,color);
}
BYTE point(int x,int y)
{
return peekb(0xa000,y*320+x);
}
void main()
{
int i,j;
unsigned int x,y,c;
setmode();
for(x=0;x<32;x++){
setpal(x,x*2+1,0,0);
setpal(x+32,63,x*2+1,0);
setpal(x+64,63,63,x*2+1);
setpal(x+96,63,63,63);
}
while(!kbhit()){
for(x=0;x<320;x+=2){
for(y=1;y<=202;y+=2){
c=(point(x,y)+point(x+2,y)+point(x+2,y+2))/3;
if(c>128)c=128;
if(c--){
poke(0xa000,(y-2)*320+x,(c<<8)+c);
poke(0xa000,(y-1)*320+x,(c<<8)+c);
}
}
y-=2;
pset(x,y,random(320));
}
}
closemode();
}
/*
geninterrupt()执行中断函数
原形:void geninterrupt(int n)
调用方式:geninterrupt(软中断号)
功能:产生一个8086软中断
注:需先向寄存器传递入口信息(用伪变量)
例如 伪变量=要赋的值(入口信息);
调用geninterrupt()函数后得接受出口信息
例如 变量名=伪变量
伪变量∶Turbo C 允许使用伪变量直接访问相应的8086寄存器。伪变量的类型有两种。
① unsigned int : _AX、 _BX、 _CX、 _DX、 _CS、 _DS、 _SS、 _ES、_SP、 _BP、 _DI、 _SI
② unsigned char: _AL、 _AH、 _BL、 _BH、 _CL、 _CH、 _DL、 _DH
可见:geninterrupt(0x10); 的目的是产生软中断号为16的中断;_AL,_CX,_AH为各种寄存器的伪变量。
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -