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

📄 mainc.c

📁 扫雷程序,基于51系列
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <d:\Keil\C51\INC\Cygnal\c8051F020.h>

#define		uchar	unsigned char 	
#define		uint	unsigned int	



uchar		m	,key	,keyflag=0	,*qarray,*rampointer,*qcon;			
uchar		code 		wordstart[]={""};
uchar		code 		word[]={""};		
uchar		 ram[800]={0};

sbit		P2_3=P2^3;
sbit		Z=P2^2;
sbit		P2_4=P2^4;
sbit		P2_5=P2^5;
sbit		P2_6=P2^6;
sbit		P2_7=P2^7;
sbit		P3_0=P3^0;


bit			flagbit0,flagbitzhang;
//sbit		P1_7=P1^7;
void drawline(uchar x,uchar y,uchar  xy,uchar flagbit);
void drawbox(uchar	 x1,uchar y1,uchar	x2,uchar y2);
void writeword(uchar  x,uchar  y);
void writeword16(uchar x, uchar y);
void config (void);
delaymin(uchar x)
{uchar	i	,j;
 for(i=0;i<x;x++)
	for(j=0;j<255;j++);
}


void screen()
{uchar	ii	,ji	,flag;

 bit q;
 uchar	add,addmid;
 uint  jiii;
 

	for(ji=240;ji>0;ji-=3)
	{DAC1H=ji;
	 jiii=(80-ji/3)*10;

		for(ii=0;ii<240;ii+=3)
			{DAC0H=ii;
			 
			 if(ii%24==0)flag=ram[ii/24+jiii];
			 if(ii%3==0)
				{//z=~(bit)((flag>>(7-(ii%24)/3)&0x01))^1;
					add=7-(ii%24)/3;
					addmid=flag>>add;
				   q=(bit)(addmid&0x01);
				   Z=~q;
				  
				   
				}
			
			}
	
	}
	
}





keypress()
{
 uchar	x;
 P4	=	0x3f;
 x	=	P4&0x3f;
 if(x==0x3f){key=0;return;}
 P4	=	0x3f;
 delaymin(5);
 x	=	P4&0x3f;
 if (x==0x3f){key=0;return;}
 
 
	switch(x)
			{case 0x3e:key=1;break;
			case 0x3d:key=2;break;
 		    case 0x3b:key=3;break;
            case 0x37:key=4;break;
			case 0x2f:key=5;break;
			case 0x1f:key=6;break;
		 	default:key=0;
			}
		 

}

void keyfine()
{
 keypress();

}


//void keyint() interrupt 2 using 1
//{

//keyfine();
//}
void initime1() interrupt 1 using 2
{TF0=0;
 TR0=0;
 TH0=0;
 TL0=0;
 TR0=1;
 //screenflag=screenflag^1;
}



//////////////////


void main()
{uchar 	i	,j	,huaflagpre=1,huaflagcon=1;
 uchar  code  nondiscovery[8] ={0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00};
 uchar	code  bomb[8]		  ={0x08,0x1c,0x70,0x7e,0x7e,0x7a,0x78,0x00};
 uchar	code  finger[8]		  ={0x0c,0x1e,0x1e,0x3e,0x7f,0x7f,0x3e,0x1c};
 uchar  code  biaoji[8]		  ={0x20,0x30,0x38,0x3c,0x3e,0x20,0x20,0x20};
 uchar  code  shuzi[10][8]={{0x18,0x24,0x42,0x42,0x42,0x42,0x24,0x18},{0x08,0x18,0x28,0x08,0x08,0x08,0x08,0x3c},
 							{0x18,0x24,0x24,0x08,0x10,0x20,0x20,0x3c},{0x18,0x24,0x04,0x18,0x18,0x04,0x24,0x18},
							{0x04,0x04,0x14,0x24,0x44,0x7e,0x04,0x0e},{0x3c,0x20,0x20,0x38,0x04,0x04,0x24,0x18},
							{0x18,0x24,0x20,0x38,0x24,0x24,0x24,0x18},{0x3c,0x24,0x04,0x08,0x08,0x10,0x10,0x10},
							{0x18,0x24,0x24,0x18,0x24,0x24,0x24,0x18},{0x18,0x24,0x24,0x24,0x1c,0x04,0x24,0x18}};
 uchar  code  gameover[8][8]={{0x3c,0x62,0x42,0x40,0x5e,0x4c,0x54,0x34},{0x18,0x24,0x42,0x42,0x7e,0x42,0x42,0x42},
 							  {0x42,0x66,0x66,0x5a,0x99,0x99,0x81,0x81},{0x7f,0x40,0x40,0x7e,0x40,0x40,0x40,0x7e},
							  {0x3c,0x42,0x81,0x81,0x81,0x81,0x42,0x3c},
							  {0x42,0x42,0x42,0x42,0x24,0x24,0x24,0x18},{0x7f,0x40,0x40,0x7e,0x40,0x40,0x40,0x7e},
							  {0x78,0x44,0x44,0x78,0x70,0x48,0x44,0x42}},
 		
/* 			  youwin[9][8]={{0},{0x42,0x42,0x42,0x24,0x3c,0x18,0x18,0x18},
			  				{0x3c,0x42,0x81,0x81,0x81,0x81,0x42,0x3c},{0x42,0x42,0x42,0x42,0x42,0x42,0x66,0x18},
							{0},{0x81,0x81,0x81,0x99,0x5a,0x5a,0x24,0x24},
							{0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0x3c},{0x58,0x24,0x42,0x42,0x42,0x42,0x42,0x42},
							{0}};*/
			  welldone[8][8]={{0x81,0x81,0x81,0x99,0x5a,0x5a,0x24,0x24},{0x7f,0x40,0x40,0x7e,0x40,0x40,0x40,0x7e},
			  				  {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3e},{0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3e},
							  {0xf8,0x84,0x82,0x82,0x82,0x82,0x84,0xf8},{0x3c,0x42,0x81,0x81,0x81,0x81,0x42,0x3c},
							  {0x58,0x24,0x42,0x42,0x42,0x42,0x42,0x42},{0x7f,0x40,0x40,0x7e,0x40,0x40,0x40,0x7e}};
 uchar			  air[32]={0};
 uchar			qing[32]={0x00,0x40,0x47,0xFC,0x30,0x40,0x23,0xF8,0x00,0x40,0x07,0xFE,0xF0,0x00,0x13,0xF8,
						0x12,0x08,0x13,0xF8,0x12,0x08,0x13,0xF8,0x16,0x08,0x1A,0x08,0x12,0x28,0x02,0x10};
 uchar			deng[32]={0x20,0x80,0x3E,0xFC,0x28,0xA0,0x45,0x10,0x85,0x10,0x3F,0xF8,0x01,0x00,0xFF,0xFE,
							0x00,0x20,0x00,0x20,0x7F,0xFC,0x04,0x20,0x02,0x20,0x02,0x20,0x00,0xA0,0x00,0x40};
 uchar			dai[32]={0x10,0x40,0x18,0x40,0x13,0xFC,0x28,0x40,0x4C,0x40,0x88,0x40,0x17,0xFE,0x10,0x10,
						0x30,0x10,0x57,0xFE,0x10,0x10,0x11,0x10,0x11,0x10,0x10,0x10,0x10,0x50,0x10,0x20};
 uchar			yi[32]={0x00,0x00,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x04,0x00,0x0F,0xFC,
						0x11,0x24,0x62,0x24,0x04,0x44,0x18,0x84,0x63,0x04,0x0C,0x04,0x70,0x14,0x00,0x08};
 uchar			nan[32]={0x00,0xA0,0x00,0x90,0xF9,0x10,0x09,0xFE,0x8B,0x20,0x4B,0x20,0x2D,0xFC,0x11,0x20,
							0x19,0x20,0x29,0xFC,0x25,0x20,0x45,0x20,0x81,0x20,0x01,0xFE,0x01,0x00,0x01,0x00};
 
 uchar			zhong[32]={0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
							0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00}; 
 uchar			zhang[32]={0x10,0x80,0x10,0x60,0x10,0x20,0xFF,0xFE,0x12,0x04,0x10,0x90,0x19,0x0C,0x12,0x04,
							0x31,0xF0,0xD0,0x20,0x10,0x40,0x10,0x82,0x11,0x02,0x11,0x02,0x50,0xFE,0x20,0x00,},
				cai[32]={0x00,0x20,0x11,0x20,0x11,0x20,0x11,0x24,0xFD,0x3E,0x11,0xE4,0x17,0x24,0x11,0x24,
							0x11,0x24,0x11,0x34,0x11,0x28,0x1D,0x20,0x31,0x02,0xC1,0x02,0x00,0xFE,0x00,0x00,},
				xia[32]={0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,0x1D,0x70,0x01,0x00,0x1D,0x70,0x01,0x00,
							0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,};
 bit    updown=0;
 uchar  nandu=15;
 uchar  tiaoshi;
 uchar  xdata array[8][10]={0};//雷 标记 已显示 周围是否已显示  周围雷数
 uchar  random,randper,randshu;
 uchar  bombflagcont,bombflagcontfan,i1,j1,j2,i2;
 uchar	k;//k是时间v是速度
 uchar	outflag=0;
 uint   randsize;
 bit screenflag,scanflag;//.
  EA	=	1;
  EX1	=	0;
  CKCON	=	0X04;
  TMOD	=	0x01;
  TH0	=	0x00;
  TL0	=	0X00;
  TR0	=	1;
  ET0	=	1;
  rampointer	=	ram;
  
   config();
start:
	
  flagbit0=	0;
  drawbox(0,0,79,79);
  
for(i1=0;i1<5;i1++){
for(i=1;i<=4;i++)//1
 {  qarray=zhang;
  writeword16(4-i,10);
   qarray=cai;
  writeword16(4+i,30);
  qarray=xia;
  writeword16(4-i,50);
 
   for(j=0;j<4;j++)screen();
   
   qarray=air;
  writeword16(4-i,10);
  qarray=air;
  writeword16(4+i,30);
  qarray=air;
  writeword16(4-i,50);

}
for(i=1;i<=4;i++)//2
 {  qarray=zhang;
  writeword16(i,10);
   qarray=cai;
  writeword16(8-i,30);
  qarray=xia;
  writeword16(i,50);
 
   for(j=0;j<4;j++)screen();
   
   qarray=air;
  writeword16(i,10);
  qarray=air;
  writeword16(8-i,30);
  qarray=air;
  writeword16(i,50);

}
for(i=1;i<=4;i++)//3
 {  qarray=zhang;
  writeword16(4+i,10);
   qarray=cai;
  writeword16(4-i,30);
  qarray=xia;
  writeword16(4+i,50);
 
   for(j=0;j<5;j++)screen();
   
   qarray=air;
  writeword16(4+i,10);
  qarray=air;
  writeword16(4-i,30);
  qarray=air;
  writeword16(4+i,50);

}
for(i=1;i<=4;i++)//4
 {  qarray=zhang;
  writeword16(8-i,10);
   qarray=cai;
  writeword16(i,30);
  qarray=xia;
  writeword16(8-i,50);
 
   for(j=0;j<5;j++)screen();
   
   qarray=air;
  writeword16(8-i,10);
  qarray=air;
  writeword16(i,30);
  qarray=air;
  writeword16(8-i,50);

}
}

/*  flagbit0=	1;
  
  
  drawline(0,00,79,1);
  drawline(4,00,79,0);
  drawline(6,00,79,0);
  drawline(9,00,79,0);
  drawline(13,00,79,0);
  drawline(17,00,70,0);
  drawline(40,00,60,0);
  drawline(78,30,50,0);
  //////////////////////
  //flagbit0=	1;
 
  drawline(00,00,79,1);
  drawline(20,10,79,1);
  drawline(00,20,79,1);
  drawline(00,00,79,1);
 // drawline(13,40,79,1);
 // drawline(14,50,79,1);
 // drawline(16,60,79,1);
 // drawline(0,00,79,1);
  
  for(i=0;i<20;i++)screen();
  flagbit0=	0;
  //for(i=0;i<20;i++)screen();
  drawbox(0,0,79,79);
  //for(j1=0;j1<250;j1++)screen();

 */
 for(i1=0;i1<3;i1++)
   for(i=40;i<80;i++)
   	{flagbit0=1;
    

    drawline(79-i,79-i,i,1);
    drawline(79-i,i,i,1);
    drawline(79-i,79-i,i,0);
    drawline(i,79-i,i,0);
    screen();
	flagbit0=0;
	drawline(79-i,79-i,i,1);
    drawline(79-i,i,i,1);
    drawline(79-i,79-i,i,0);
    drawline(i,79-i,i,0);
	}
	
	
 flagbit0=0;
  drawbox(0,0,79,79);
 
 flagbit0=1;
  //writeword(4,30,zhang);
  drawline(13,40,66,1);
  drawline(13,60,66,1);
  drawline(13,40,60,0);
  drawline(66,40,60,0);
  drawbox (16,45,31,55);

   key=0;
   for(i=0;i<5;i++)screen();
  qarray=yi;
  writeword16(1,10);
   qarray=zhong;
  writeword16(4,10);
  qarray=nan;
  writeword16(7,10);
  huaflagpre=1;
  huaflagcon=1;
 while(1)//界面游戏开始并等待按键得到模式信息跳出,
	{for(i=0;i<5;i++)screen();
     keyfine();
	 ///////
/*	switch(key)
	{case 0x01	:	P2_3=~P2_3;	break;
	 case 0x02	:	P2_4=~P2_4;	break;
	 case 0x03	:	P2_5=~P2_5;	break;
	 case 0x04	:	P2_6=~P2_6;	break;
	 case 0x05	:	P2_7=~P2_7;	break;
	 case 0x06	:	P3_0=~P3_0;	break;

	}*/
	 ////////
	 if(key!=0){if(key==1||key==3){if(huaflagpre!=1)huaflagcon-=1;}
				else if(key==2||key==4){if(huaflagpre!=3)huaflagcon+=1;}
				else if(key!=0)break;
/////
				if(huaflagpre!=huaflagcon){flagbit0=0;


										   switch(huaflagpre)
												{
												 case 1:drawbox(16,45,31,55);break;
												 case 2:drawbox(32,45,47,55);break;
												 case 3:drawbox(48,45,63,55);break;
												}
										  
										   flagbit0=1;
										   switch(huaflagcon)
												{
												 case 1:drawbox(16,45,31,55);nandu=10;break;
												 case 2:drawbox(32,45,47,55);nandu=15;break;
												 case 3:drawbox(48,45,63,55);nandu=20;break;
												}

										  }

				huaflagpre=huaflagcon;

				key=0;
				}
	}//界面结束



////////////

  flagbit0=0;
  drawbox(0,0,79,79);
  flagbit0=1;
  drawbox(7,40,72,60);
  flagbit0=0;
  drawbox(9,43,70,56);
  qarray=qing;
  writeword16(1,10);
  qarray=deng;
  writeword16(4,10);
  qarray=dai;
  writeword16(7,10);
  //drawword()//进度的百分比
 key=0;
///////////////////加入界面按键产生
//  while(key){screen();keyfine();}//按b键产生随机数
	randper=0;//an pai ge shu yi gong  60 ge
	randshu=0;//lei shu
 	flagbit0=1;
  	for(i=0;i<10;i++)
		{for(j=0;j<8;j++)
		   {screen();
			randsize=(uint)(nandu-randshu)*15/(80-randper);//产生为十五个
			random	=TL0&0x0f;
			if(randsize>(uint)random)
			  {	array[i][j]=0x80;
				randshu+=1;
			   }
		
			randper+=1;
			drawbox(10,46,10+(uchar)randper*3/4,54);
			screen();
     	   }
		}
		screen();

  
  screen();
/////
EA=0;

		for(i=0;i<10;i++)
    		{for(j=0;j<8;j++)
				{if(array[i][j]==0){    bombflagcont=0;
										for(i1=i-1;i1<=i+1;i1++)
										{if(i1>=10)continue;//判断是否出格
										
										 for(j1=j-1;j1<=j+1;j1++)
										      {if(j1>=8)continue;//
											  
											  if((array[i1][j1]&0x80)==0x80)bombflagcont++;
											  }
										}
										array[i][j]=array[i][j]|bombflagcont;

⌨️ 快捷键说明

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