#include <intrins.h>
#include "graph.h"
#define uchar unsigned char
/************************点************************/
void showxyz(char x,char y,char z)
{
if((x>=0&&x<8)&&(y>=0&&y<8)&&(z>=0&&z<8))
show_buf[y][x]|=_crol_(1,z);
}
void hidexyz(char x,char y,char z)
{
if(x>=0&&x<8&&y>=0&&y<8&&z>=0&&z<8)
show_buf[y][x]&=_crol_(0xfe,z);
}
/************************线************************/
void linexy(char x,char y,char m)
{//平行于Z轴
if(m)
show_buf[y%8][x%8]=0xff;
else
show_buf[y%8][x%8]=0x00;
}
void linexz(char x,char z,char m)
{//平行于y轴
char i;
if(m)
for(i=0;i<8;i++)
show_buf[i][x%8]|=_crol_(1,z%8);
else
for(i=0;i<8;i++)
show_buf[i][x%8]&=_crol_(0xfe,z%8);
}
void lineyz(char y,char z,char m)
{//平行于x轴
char i;
if(m)
for(i=0;i<8;i++)
show_buf[y%8][i]|=_crol_(1,z%8);
else
for(i=0;i<8;i++)
show_buf[y%8][i]&=_crol_(0xfe,z%8);
}
void linez(char z,char m)
{//垂直于Z轴平面对角线
char i;
if(m==1)
{
for(i=0;i<8;i++)
showxyz(i,i,z);
}
else if(m==2)
{
for(i=0;i<8;i++)
showxyz(i,7-i,z);
}
else if(m==3)
{
for(i=0;i<8;i++)
hidexyz(i,i,z);
}
else if(m==4)
{
for(i=0;i<8;i++)
hidexyz(i,7-i,z);
}
}
void liney(char y,char m)
{//垂直于y轴平面对角线
char i;
if(m==1)
{
for(i=0;i<8;i++)
showxyz(i,y,i);
}
else if(m==2)
{
for(i=0;i<8;i++)
showxyz(i,y,7-i);
}
else if(m==3)
{
for(i=0;i<8;i++)
hidexyz(i,y,i);
}
else if(m==4)
{
for(i=0;i<8;i++)
hidexyz(i,y,7-i);
}
}
void linex(char x,char m)
{//垂直于x轴平面对角线
char i;
if(m==1)
{
for(i=0;i<8;i++)
showxyz(x,i,i);
}
else if(m==2)
{
for(i=0;i<8;i++)
showxyz(x,i,7-i);
}
else if(m==3)
{
for(i=0;i<8;i++)
hidexyz(x,i,i);
}
else if(m==4)
{
for(i=0;i<8;i++)
hidexyz(x,i,7-i);
}
}
void line3d(char n,char m)
{//3维对角线
char i;
if(m)
switch(n)
{
case 1:{ for(i=0;i<8;i++) showxyz(i,i,i); break; }
case 2:{ for(i=0;i<8;i++) showxyz(i,7-i,i); break; }
case 3:{ for(i=0;i<8;i++) showxyz(i,i,7-i); break; }
case 4:{ for(i=0;i<8;i++) showxyz(i,7-i,7-i); break; }
default : break;
}
else
switch(n)
{
case 1:{ for(i=0;i<8;i++) hidexyz(i,i,i); break; }
case 2:{ for(i=0;i<8;i++) hidexyz(i,7-i,i); break; }
case 3:{ for(i=0;i<8;i++) hidexyz(i,i,7-i); break; }
case 4:{ for(i=0;i<8;i++) hidexyz(i,7-i,7-i); break; }
default : break;
}
}
/************************面************************/
void showx(char x)
{
char i;
x%=8;
for(i=0;i<8;i++)
{
show_buf[i][x]=0xff;
}
}
void hidex(char x)
{
char i;
x%=8;
for(i=0;i<8;i++)
{
show_buf[i][x]=0x00;
}
}
void fallx(char der)
{
char i;
if(der==1)
{
for(i=0;i<8;i++)
{ showx(i); delay(2500);hidex(i);}
}
else if(der==-1)
{
for(i=7;i>=0;i--)
{ showx(i); delay(2500);hidex(i);}
}
}
void showy(char y)
{
char i;
y%=8;
for(i=0;i<8;i++)
{
show_buf[y][i]=0xff;
}
}
void hidey(char y)
{
char i;
y%=8;
for(i=0;i<8;i++)
{
show_buf[y][i]=0x00;
}
}
void fally(char der)
{
char i;
if(der==1)
{
for(i=0;i<8;i++)
{ showy(i); delay(2500);hidey(i);}
}
else if(der==-1)
{
for(i=7;i>=0;i--)
{ showy(i); delay(2500);hidey(i);}
}
}
void showz(char z)
{
char i,j;
z%=8;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
show_buf[i][j]|=_crol_(1,z);
}
}
void hidez(char z)
{
char i,j;
z%=8;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
show_buf[i][j]&=_crol_(0xfe,z);
}
}
void fallz(char der)
{
char i;
if(der==1)
{
for(i=0;i<8;i++)
{ showz(i); delay(2500);hidez(i);}
}
else if(der==-1)
{
for(i=7;i>=0;i--)
{ showz(i); delay(2500);hidez(i);}
}
}
/************************组合图形************************/
/* 最大正方体线框 */
void maxbox()
{
linexy(0,0,1);
linexy(0,7,1);
linexy(7,0,1);
linexy(7,7,1);
linexz(0,0,1);
linexz(0,7,1);
linexz(7,0,1);
linexz(7,7,1);
lineyz(0,0,1);
lineyz(0,7,1);
lineyz(7,0,1);
lineyz(7,7,1);
}
/* 沙漏 */
void shalou()
{
line3d(1,1);
line3d(2,1);
line3d(3,1);
line3d(4,1);
linexz(0,0,1);
linexz(0,7,1);
linexz(7,0,1);
linexz(7,7,1);
lineyz(0,0,1);
lineyz(0,7,1);
lineyz(7,0,1);
lineyz(7,7,1);
}
/* 6个面的对角线 */
void all_2d_duijiao()
{
linex(0,1);
linex(0,2);
linex(7,1);
linex(7,2);
liney(0,1);
liney(0,2);
liney(7,1);
liney(7,2);
linez(0,1);
linez(0,2);
linez(7,1);
linez(7,2);
}
/************************动态效果 ************************/
/* 上升 */
void risexy(char x,char y)
{
char i,temp=0xc0;
for(i=0;i<6;i++)
{
//temp=_cror_(0x80,8-i);
//temp|=0x80;
temp=temp>>i;
if(i>0)temp&=0x7f;
show_buf[y][x]=temp;
delay((1000*(i+1)));
}
}
/* 下落 */
void fallxy(char x,char y)
{
char i,temp;
for(i=7;i>=0;i--)
{
temp=_crol_(1,8-i);
//temp|=0x01;
show_buf[y][x]=temp;
delay(300*i);
}
}
/* 雨滴效果 */
void effect_drop(char x,char y)
{
showxyz(x,y,7);
delay(10000);
hidexyz(x,y,7);
showxyz(x,y,6);
delay(10000);
hidexyz(x,y,6);
showxyz(x,y,5);
delay(10000);
hidexyz(x,y,5);
showxyz(x+1,y,6);showxyz(x-1,y,6);showxyz(y,y+1,6);showxyz(x,y-1,6);
delay(10000);
hidexyz(x+1,y,6);hidexyz(x-1,y,6);hidexyz(y,y+1,6);hidexyz(x,y-1,6);
showxyz(x+2,y,7);showxyz(x-2,y,7);showxyz(y,y+2,7);showxyz(x,y-2,7);
delay(10000);
hidexyz(x+2,y,7);hidexyz(x-2,y,7);hidexyz(y,y+2,7);hidexyz(x,y-2,7);
}
/* 烟花效果 */
void effect_fireworks(char x,char y)
{
showxyz(x,y,0);
delay(10000);
hidexyz(x,y,0);
showxyz(x+1,y,1);showxyz(x-1,y,1);showxyz(y,y+1,1);showxyz(x,y-1,1);
delay(10000);
hidexyz(x+1,y,1);hidexyz(x-1,y,1);hidexyz(y,y+1,1);hidexyz(x,y-1,1);
showxyz(x+2,y,2);showxyz(x-2,y,2);showxyz(y,y+2,2);showxyz(x,y-2,2);
delay(10000);
hidexyz(x+2,y,2);hidexyz(x-2,y,2);hidexyz(y,y+2,2);hidexyz(x,y-2,2);
}
/* 下雨 */
void rain()
{
char i,j,x,y;
clr();
showz(0);
for(i=0;i<4;i++)
for(j=0;j<8;j++)
{
x=(uchar)((rand())%8 );
y=(uchar)((rand())%8 );
fallxy(x,y);
effect_drop(x,y);
}
}
/* 烟花 */
void fireworks()
{
char i,j,x,y;
clr();
showz(7);
for(i=0;i<4;i++)
for(j=0;j<8;j++)
{
x=(uchar)((rand())%8 );
y=(uchar)((rand())%8 );
risexy(x,y);
effect_fireworks(x,y);
}
}
/************************特效************************/
/* 侧面循环滚动 */
void roll_around()
{
char i,temp1,temp2;
temp1=show_buf[0][0];
for(i=0;i<7;i++) show_buf[0][i]=show_buf[0][i+1];
show_buf[0][7]=show_buf[1][7];
temp2=show_buf[7][0];
for(i=7;i>1;i--) show_buf[i][0]=show_buf[i-1][0];
show_buf[1][0]=temp1;
temp1=show_buf[7][7];
for(i=7;i>1;i--) show_buf[7][i]=show_buf[7][i-1];
show_buf[7][1]=temp2;
for(i=1;i<6;i++) show_buf[i][7]=show_buf[i+1][7];
show_buf[6][7]=temp1;
}
/* 数组复制 */
void szncpy( char op[], char src[],char n)
{
char i;
for(i=0;i<n;i++)
{
op[i]=src[i];
}
}
/* 从里向外移位显示(无拖放) */
void croy()
{
char i,*ps=show_buf,temp[8];
szncpy(temp,ps,8);
for(i=0;i<7;i++)
{
ps=&show_buf[i][0];
szncpy(ps,ps+8,8);
}
szncpy(&show_buf[7][0],temp,8);
}
/* 从里向外移位显示(有拖放) */
void croyy()
{
char i,*ps=show_buf,temp[8],temp2[8];
szncpy(temp,ps,8);
for(i=1;i<8;i++)
{
ps=&show_buf[i][0];
szncpy(ps,temp,8);
delay(2000);
}
for(i=0;i<7;i++)
{
ps=&show_buf[i][0];
szncpy(ps,temp2,8);
delay(2000);
}
}
/************************组合效果************************/
void perform1()
{
char i;
- 1
- 2
前往页