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

📄 mainc.c

📁 扫雷程序,基于51系列
💻 C
📖 第 1 页 / 共 2 页
字号:
									}
					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 + -