📄 mainc.c
字号:
}
screen();
}
}
flagbit0=0;
drawbox(0,0,79,79);
////////////////
/* for(i=0;i<10;i++)
for(j=0;j<8;j++)
{if(array[i][j]&0x80){qarray=bomb;writeword(i,10*j,bomb);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,10*j,bomb);}
screen();
}
while(9)screen();*/
////////////////
flagbit0=1;
for(i=0;i<10;i++)
for(j=0;j<64;j+=8)
{qarray=nondiscovery;
writeword(i,j);//画游戏界面10*8
}
key=0;
EA=1;
i=0;
j=0;
screen();
qarray=bomb;
writeword(1,72);
qarray=&shuzi[0][0];
writeword(2,72);
qarray=&shuzi[0][0];
writeword(3,72);
bombflagcont=0;
bombflagcontfan=0;
screenflag=0;//手与雷替换
outflag=0;
while(!outflag)
{
screen();
if(screenflag){ qarray=finger;
writeword(i,8*j);
}
else if(array[i][j]&0x40){qarray=biaoji;writeword(i,8*j);}
else if(!(array[i][j]&0x20)){qarray=nondiscovery;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,8*j);}
//biaoji and picture display together! step are 20;
for(k=0;k<4;k++)
screen();
screenflag=screenflag^1;
keyfine();
if(!key)continue;
switch(key)
{case 1:if(j==0)break;
else if(array[i][j]&0x40){qarray=biaoji;writeword(i,8*j);}
else if(!(array[i][j]&0x20)){qarray=nondiscovery;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,8*j);}
j-=1;break;
case 2:if(j==7)break;
else if(array[i][j]&0x40){qarray=biaoji;writeword(i,8*j);}
else if(!(array[i][j]&0x20)){qarray=nondiscovery;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0]; writeword(i,8*j);}
j+=1;break;
case 3:if(i==0)break;
else if(array[i][j]&0x40){qarray=biaoji;writeword(i,8*j);}
else if(!(array[i][j]&0x20)){qarray=nondiscovery;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,8*j);}
i-=1;break;
case 4:if(i==9)break;
else if(array[i][j]&0x40){qarray=biaoji;writeword(i,8*j);}
else if(!(array[i][j]&0x20)){qarray=nondiscovery;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,8*j);}
i+=1;break;
case 5:if((array[i][j]&0x20)||array[i][j]&0x40)break;
array[i][j]=array[i][j]|0x20;
if(array[i][j]>=0x80){outflag=1;
qarray=bomb;
writeword(i,8*j);}
bombflagcontfan++;
if(bombflagcontfan==(80-nandu))outflag=2;
if(array[i][j]<0x80){qarray=&shuzi[array[i][j]&0x0f][0];
writeword(i,8*j);//加 周围显示 扫描八块
}
tiaoshi=array[i][j];
if((array[i][j]&0x8f)==0)
{scanflag=1;
array[i][j]=array[i][j]|0x10;
for(i1=i-1;i1<i+2;i1++)
{if(i1>10)continue;
for(j1=j-1;j1<j+2;j1++)
{if(j1>8)continue;
if(array[i1][j1]&0x20)continue;
array[i1][j1]=array[i1][j1]|0x20;
qarray=&shuzi[array[i1][j1]&0x0f][0];
writeword(i1,8*j1);
}
}
while(scanflag)
{scanflag=0;
screen();
for(i1=0;i1<8;i1++)
{for(j1=0;j1<10;j1++)
{if((array[i][j]&0x37)==0x20)//显示为一 周围为0 雷数为零
{scanflag=1;//扫描得到掀起的黑块
array[i][j]=array[i][j]|0x10;//周围已显示标记置一
for(i2=i1-1;i2<i1+2;i2++)
{ if(i2>=8)continue;
for(j2=j1-1;j2<j1+2;j2++)
{if(j2>=10)continue;
if(array[i2][j2]&0x20)continue;
array[i2][j2]=array[i2][j2]|0x20;//已显示 且显示
qarray=&shuzi[array[i][j]&0x0f][0];
writeword(i,8*j);
}
}
}
}
}
}
}
break;
case 6:if((array[i][j]&0x20))break;
qarray=biaoji;
writeword(i,8*j);
array[i][j]=array[i][j]^0x40;
if(array[i][j]&0x40){bombflagcont++;
if(bombflagcont==0x0a)bombflagcont=0x10;}
else {bombflagcont--;
if(bombflagcont==0x0a)bombflagcont=0x09;}
qarray=&shuzi[(bombflagcont&0xf0)>>4][0];
writeword(2,72);
qarray=&shuzi[bombflagcont&0x0f][0];
writeword(3,72);
break;
}
}
/////////////一为输二为赢显示片尾动画
for(i=0;i<=10;i++)
screen();
switch(outflag)//一为中雷 二为胜利
{case 1:for(i=0;i<10;i++)
for(j=0;j<8;j++)
{if(array[i][j]&0x80){qarray=bomb;writeword(i,8*j);}
else {qarray=&shuzi[array[i][j]&0x0f][0];writeword(i,8*j);}
screen();
}
qcon=gameover;
for(i=0;i<255;i++)screen();
break;
case 2:qcon=welldone;
break;
}
flagbit0=0;
drawbox(0,0,79,79);
flagbit0=1;
key=0;j=0;j1=0;key=0;
updown=1;//虽然是向下 但程序第一次就取反
for(k=0;key!=5;)
{keyfine();
flagbit0=0;
for(i=0;i<8;i++)
{qarray=air;
writeword(1+i,j);
}
flagbit0=1;
for(i=0;i<8;i++)
{qarray=qcon+8*i;
writeword(1+i,j1);
}
for(i=0;i<2;i++)screen();
j=j1;
if(k==8)updown^=1;
if(k==0)updown^=1;
if(!updown){k++;j1=k*k;continue;}//updown=0向下加速度
k--;
j1=k*k;
}
for(i=0;i<8;i++)
for(j=0;j<10;j++)
array[i][j]=0;
goto start;
}
///////////////////////////
void drawline(uchar x,uchar y,uchar xy,uchar flagbit)
{uchar elecont ,midvary ,midbit ,mid=0xff;//移一位就是移零位
uchar beginbit,endbit;
uint beginchar,endchar;
char midvv=0x80;
uchar midvvv=0x80;
uchar tiaoshi;
beginchar=(uint)(y*10)+(uint)(x/8);
beginbit=x%8;
if(flagbit){endchar=(uint)(y*10)+(uint)(xy/8);
endbit=xy%8;
elecont=endchar-beginchar;
if(beginbit>0)
{midvary=ram[beginchar];
if(flagbit0)midvary=midvary|(mid>>beginbit);
else midvary=midvary&(~(mid>>beginbit));
ram[beginchar]=midvary;
tiaoshi=ram[beginchar];///////////////
}
else if(flagbit0){ram[beginchar]=0xff;}
else {ram[beginchar]=0x00;}
if(elecont>1)
for(elecont-=1;elecont>0;elecont--)
{if(flagbit0){tiaoshi=ram[beginchar+elecont];
ram[beginchar+elecont]=0xff;
tiaoshi=ram[beginchar+elecont];}//////////
else ram[beginchar+elecont]=0x00;
}
if(endbit<7){midvary=ram[endchar];
if(flagbit0){ ram[endchar]=midvary|(uchar)(midvv>>endbit);tiaoshi=ram[endchar];}//char是否四舍五入
else ram[endchar]=midvary&(~(uchar)(midvv>>endbit));
}
else if(flagbit0){ram[endchar]=0xff;}
else {ram[endchar]=0x00;}
}
else {//endchar=beginchar+10*(xy-beginchar);
//elecont=endchar-beginchar;
elecont=xy-y;
midbit=midvvv>>beginbit;
for(;elecont!=255;elecont--)
{if(flagbit0){ ram[beginchar+elecont*10]=ram[beginchar+elecont*10]|midbit;
}
else {ram[beginchar+elecont*10]=ram[beginchar+elecont*10]&(~midbit);}
}
}
}
void drawbox(uchar x1, uchar y1 ,uchar x2 ,uchar y2)
{
for(;y1<=y2;y1++)
{
drawline(x1,y1,x2,1);
}
}
void writeword(uchar x,uchar y)
{char n=0;
uint xxx;
for(xxx=10*y+x;n<8;n++,xxx=xxx+10,qarray++)
{
ram[xxx]=*qarray;
}
}
void writeword16(uchar x, uchar y)
{char n=0;
uint xxx;
for(xxx=10*y+x;n<16;n++,xxx=xxx+10,qarray++)
{
ram[xxx]=*qarray;
qarray++;
ram[xxx+1]=*qarray;
}
}
/*void changword(uchar idata *region)
{
}
*/
//------------------------------------------------------------------------------------
void config (void) {
OSCICN = 0x17;
WDTCN = 0x07; // Watchdog Timer Control Register
WDTCN = 0xDE; // Disable WDT WDTCN = 0xAD;
XBR0 = 0x00; // XBAR0: Initial Reset Value
XBR1 = 0x00; // XBAR1: Initial Reset Value
XBR2 = 0x40; // XBAR2: Initial Reset Value
// Select Pin I/0
// NOTE: Some peripheral I/O pins can function as either inputs or
// outputs, depending on the configuration of the peripheral. By default,
// the configuration utility will configure these I/O pins as push-pull
// outputs.
// Port configuration (1 = Push Pull Output)
P0MDOUT = 0x01; // Output configuration for P0
P1MDOUT = 0x00; // Output configuration for P1
P2MDOUT = 0xFF; // Output configuration for P2
P3MDOUT = 0x00; // Output configuration for P3
P74OUT = 0x04; // Output configuration for P4-7
P1MDIN = 0xFF; // Input configuration for P1
// View port pinout
// The current Crossbar configuration results in the
// following port pinout assignment:
// Port 0
// P0.0 = GP I/O (Push-Pull Output)
// P0.1 = GP I/O (Open-Drain Output/Input)
// P0.2 = GP I/O (Open-Drain Output/Input)
// P0.3 = GP I/O (Open-Drain Output/Input)
// P0.4 = GP I/O (Open-Drain Output/Input)
// P0.5 = GP I/O (Open-Drain Output/Input)
// P0.6 = GP I/O (Open-Drain Output/Input)
// P0.7 = GP I/O (Open-Drain Output/Input)
// Port 1
// P1.0 = GP I/O (Open-Drain Output/Input)
// P1.1 = GP I/O (Open-Drain Output/Input)
// P1.2 = GP I/O (Open-Drain Output/Input)(Digital)
// P1.3 = GP I/O (Open-Drain Output/Input)(Digital)
// P1.4 = GP I/O (Open-Drain Output/Input)(Digital)
// P1.5 = GP I/O (Open-Drain Output/Input)(Digital)
// P1.6 = GP I/O (Open-Drain Output/Input)(Digital)
// P1.7 = GP I/O (Open-Drain Output/Input)(Digital)
// Port 2
// P2.0 = GP I/O (Open-Drain Output/Input)
// P2.1 = GP I/O (Open-Drain Output/Input)
// P2.2 = GP I/O (Open-Drain Output/Input)
// P2.3 = GP I/O (Open-Drain Output/Input)
// P2.4 = GP I/O (Open-Drain Output/Input)
// P2.5 = GP I/O (Open-Drain Output/Input)
// P2.6 = GP I/O (Open-Drain Output/Input)
// P2.7 = GP I/O (Open-Drain Output/Input)
// Port 3
// P3.0 = GP I/O (Open-Drain Output/Input)
// P3.1 = GP I/O (Open-Drain Output/Input)
// P3.2 = GP I/O (Open-Drain Output/Input)
// P3.3 = GP I/O (Open-Drain Output/Input)
// P3.4 = GP I/O (Open-Drain Output/Input)
// P3.5 = GP I/O (Open-Drain Output/Input)
// P3.6 = GP I/O (Open-Drain Output/Input)
// P3.7 = GP I/O (Open-Drain Output/Input)
EMI0CF = 0x00; // External Memory Configuration Register
CPT1CN = 0x00; // Comparator 1 Control Register
//Comp1 marker
//----------------------------------------------------------------
// Reference Control Register Configuration
//----------------------------------------------------------------
REF0CN = 0x02; // Reference Control Register
//----------------------------------------------------------------
// DAC Configuration
//----------------------------------------------------------------
DAC0CN = 0x84; // DAC0 Control Register
DAC0L = 0x00; // DAC0 Low Byte Register
DAC0H = 0x00; // DAC0 High Byte Register
DAC1CN = 0x84; // DAC1 Control Register
DAC1L = 0x00; // DAC1 Low Byte Register
DAC1H = 0x00; // DAC1 High Byte Register
RSTSRC = 0x00; // Reset Source Register
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -