区域编号相等的时候,游戏即判定获胜,读取相应的time与step值,并判断是否创纪录。
void PT_Map_Init(void) // 初始化(生成随机位置)及拼图是否能完成 { u8 size; u8 i,t,a, b; u8 d=1; signed char w,h; size=PT_Size*PT_Size; srand(RTC->CNTL);//得到种子 for(i=0;i<size;i++)Cur_Table[i]=i;
// Cur_Table[size]=size-1; //最后一个图片,必须放在原位,否则游戏无法完成 // 初始化(生成随机位置) i=0; while(i++<size||d==0)// 交换至少单位数量次 { do { a = rand()%(size); b = rand()%(size); }while(a==b); t=Cur_Table[a]; Cur_Table[a]=Cur_Table[b]; Cur_Table[b]=t; // 计算距离,必须要模为1有解 if(Cur_Table[a]==(size-1)|| Cur_Table[b]==(size-1)) { w=a%PT_Size-b%PT_Size+1; h=a/PT_Size-b/PT_Size; w=w<0?-w:w; h=h<0?-h:h; d=(d+w+h)%2; }else d=!d; } }
u8 Need_Move(u8 key) { u8 size; size=PT_Size*PT_Size; if(key+1<size && key+1>=0) if(Cur_Table[key+1]==size-1)