亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ptgame.c

?? 基于stm32的MP3播放器
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "COMM.H"
//拼圖游戲代碼
//支持 3*3 4*4 5*5三個等級,要繼續添加也是比較容易的
//基本只要修改圖片編號Cur_Table的大小,PT_Size的大小就可以了
//不過要注意不要超出數據類型的范圍						    
//正點原子@SCUT
//2009/05/30 
//V1.2												  

//存儲在sram里面的 圖片起始地址(在SD卡上) 列表
u32 *Pic_Addr=(u32*)iclip;//注意 0:表示預覽圖片的地址 1~n,表示1~n塊圖片的地址
u8 Cur_Table[26];//圖片編號存儲列表	5*5時大小為25+1=26

u8 Xscal;        //倍乘數
//這四個變量需要保存到EEPROM里面
u8 PT_Size=3;    //拼圖游戲的難度級別 3、4兩個值

u8  PT_New=0; //是否已經在玩?1,沒有在玩,必須更新。0,已經在玩,但是未完成,可以不更新。
u16 PT_Step=0;//拼圖所用步驟
u16 PT_Time=0;//拼圖所用時間	
								   
const u8 *PTGmenu_F1[1]={"拼圖游戲"};//第1級父目錄目錄
const u8 *PTGmenu_S1[4]={"繼續","新游戲","最佳排行","游戲設置"};//第1級子目錄
const u8 *PTGmenu_S2[3]={"簡單","一般","困難"}; //第2級子目錄 設置	 

#define PT_BASIC 1 //基本信息
#define PT_TABLE 2 //圖表信息	 

//保存當前游戲信息
//地址區間:412~443
void Save_PTG_Info(u8 type)
{			 
	u8 i;
	if(type==PT_BASIC)//保存基本信息
	{										
		FM24C16_WriteOneByte(412,PT_Size);//保存圖片大小
		FM24C16_WriteOneByte(413,PT_New); //保存是否已經在玩
		//保存當前所用步驟
		FM24C16_WriteOneByte(414,(PT_Step>>8)&0xff);
		FM24C16_WriteOneByte(415,PT_Step&0xff);		
		//保存當前所用時間
		FM24C16_WriteOneByte(416,(PT_Time>>8)&0xff);
		FM24C16_WriteOneByte(417,PT_Time&0xff);
	}else if(type==PT_TABLE)//保存圖標信息
	{
		for(i=0;i<26;i++)FM24C16_WriteOneByte(418+i,Cur_Table[i]);//保存當前圖表信息	  
	}
}
//讀取當前游戲信息
//地址區間:412~443 
void Read_PTG_Info(u8 type)
{			 
	u8 i;
	if(type==PT_BASIC)//讀取基本信息
	{										
		PT_Size=FM24C16_ReadOneByte(412);//讀取圖片大小
		PT_New=FM24C16_ReadOneByte(413); //讀取是否已經在玩
		//讀取當前所用步驟
		PT_Step=FM24C16_ReadOneByte(414);
		PT_Step<<=8;
		PT_Step+=FM24C16_ReadOneByte(415);	   
		//讀取當前所用時間
		PT_Time=FM24C16_ReadOneByte(416);
		PT_Time<<=8;
		PT_Time+=FM24C16_ReadOneByte(417);		  
	}else if(type==PT_TABLE)//保存圖標信息
	{
		for(i=0;i<26;i++)Cur_Table[i]=FM24C16_ReadOneByte(418+i);//讀取當前圖表信息	  
	}
}
//保存最佳值
//level:等級 0~2 
// step:步數
// time:用時
//地址區間:444~	455
void Save_PTG_Best(u8 level,u16 step,u16 time)
{
	FM24C16_WriteOneByte(444+level*4,(step>>8)&0xff);
	FM24C16_WriteOneByte(445+level*4,step&0xff);		
	//保存當前所用時間
	FM24C16_WriteOneByte(446+level*4,(time>>8)&0xff);
	FM24C16_WriteOneByte(447+level*4,time&0xff);	
}
//讀取最佳值
//level:等級 0~2 == 3 4 5 
// step:步數
// time:用時
//地址區間:444~	455
void Read_PTG_Best(u8 level,u16 *step,u16 *time)
{				
	//讀取當前所用步驟								    
	*step=FM24C16_ReadOneByte(444+level*4);
	*step<<=8;
	*step+=FM24C16_ReadOneByte(445+level*4);	 
	//讀取當前所用時間
	*time=FM24C16_ReadOneByte(446+level*4);
	*time<<=8;
	*time+=FM24C16_ReadOneByte(447+level*4);		
}

//對指定列表,得到圖片起始坐標點
//這個函數與LCD顯示有關
//table:固定區域值 0~PT_Size*PT_Size
//xpos :x坐標值
//ypos :y坐標值	
//CHECK OK 09/05/30			 
void Get_Ps_Addr(u8 table,u8 *xpos,u8 *ypos)
{
	u8 x,y;						 
	for(y=0;y<PT_Size;y++)
	{
		for(x=0;x<PT_Size;x++)
		{
			if(table==y*PT_Size+x)
			{
				*xpos=Xscal*x+5;
				*ypos=Xscal*y+5;
				return;
			}
		}
	}
	if(table==PT_Size*PT_Size)//第PT_Size*PT_Size格的起始地址
	{
		*xpos=Xscal*(PT_Size-1)+5;
		*ypos=Xscal*PT_Size+5;
	}
}
/////////////////////////////////////////////////////////////////////
//檢查拼圖游戲獲勝的算法
//返回值:0,沒成功;1,成功了
//支持從3*3~15*15的棋盤大小
//CHECK OK 09/05/30
u8 PT_Win_Chk(void)
{
	u8 t;
	u8 size;
	size=PT_Size*PT_Size; 
	for(t=0;t<size;t++){if(Cur_Table[t]!=t)break;}    
	if(t==size)return 1;
	return 0;
}
//初始化(生成隨機位置)	 
//帶檢測拼圖能否完成的算法
//CHECK OK 09/05/30
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;	 
	}	 
	for(i=0;i<size;i++)
	{
		if(Cur_Table[i]==size-1){Cur_Table[i]=size;break;}	   
	}
}

//裝載游戲圖片
//支持從3*3~15*15的棋盤大小
//CHECK OK 09/05/30
void Load_Game_PIC(void) 
{
	FileInfoStruct TempPic;//部分圖片的臨時存放空間	    
	u8 t;
	u8 temp;
	u8 tempx,tempy; 
	u8 size;
	size=PT_Size*PT_Size;   									  
	TempPic.F_StartCluster=Pic_Addr[0];//加載預覽圖片		   
	TempPic.F_Type=T_BMP;//指定為BMP圖片
	AI_LoadPicFile(&TempPic,3,242,79,318);//裝載預覽圖片 
	//加載	  
	for(t=0;t<size+1;t++)
	{
		temp=Cur_Table[t];
		Get_Ps_Addr(t,&tempx,&tempy);   
		if(temp==size)//空格所在區域,填充灰色	
		{
		 	TFT_Fill(tempx,tempy,tempx+Xscal-2,tempy+Xscal-2,LGRAY);	 
		}else
		{
			TempPic.F_StartCluster=Pic_Addr[temp+1];//圖片地址		   
			AI_LoadPicFile(&TempPic,tempx,tempy,tempx+Xscal-1,tempy+Xscal-1);	 
		}
	}	 
}
//sour:按鍵所按的固定編號
//dest:空格所在的固定編號
//空格一定是在dest區里面
//CHECK OK 09/05/30
void Move_Pic(u8 sour,u8 dest)
{
	FileInfoStruct PicPart;//部分圖片的臨時存放空間	    
	u8 pic_real_addr;
	u8 tempx,tempy;			 

	pic_real_addr=Cur_Table[sour]+1;//得到圖片的編號地址 
	PicPart.F_StartCluster=Pic_Addr[pic_real_addr];
	PicPart.F_Type=T_BMP;//指定為BMP圖片	
	//清空sour區的圖片,就是把空格移到這個區
	Get_Ps_Addr(sour,&tempx,&tempy);//得到源坐標   
	TFT_Fill(tempx,tempy,tempx+Xscal-2,tempy+Xscal-2,LGRAY);											    	 
	//把sour區的圖片部分顯示到dest區
	Get_Ps_Addr(dest,&tempx,&tempy);//得到目標坐標
	AI_LoadPicFile(&PicPart,tempx,tempy,tempx+Xscal-1,tempy+Xscal-1);												 
	Cur_Table[dest]=Cur_Table[sour];//把sour區的圖片編號賦給dest區
	Cur_Table[sour]=PT_Size*PT_Size;//空格在sour區了,調換完成 	
}   
	    
//返回值:PT_Size*PT_Size+1,不需要移動
//0~PT_Size*PT_Size 需要移動,與key交換
//拼圖游戲的核心算法		   
//支持從3*3~15*15的棋盤大小
//CHECK OK 09/05/30
u8 Need_Move(u8 key)
{
	u8 temp;
	u8 size;
	u8 i;
	size=PT_Size*PT_Size;	  
	if(Cur_Table[key]==size)return size+1;//點中了空格,不移動
	else 
	{
		///////////////////////////////////判斷是不是需要減PT_Size	 
		if(key>=PT_Size)//判斷減PT_Size(3,4,5...)
		{
			if(key==size)temp=size-1;//按中了最后一個 9,對于這個按鍵,-1相當于其他按鍵-size
			else temp=key-PT_Size;
			if(Cur_Table[temp]==size)return temp;//空格與此次按鍵值相鄰,返回空格所在地址
		}	
		///////////////////////////////////判斷是不是需要加PT_Size     
		if(key<(size-PT_Size))//判斷加PT_Size
		{
			temp=key+PT_Size;
			if(Cur_Table[temp]==size)return temp;//空格與此次按鍵值相鄰,返回空格所在地址
		}    
		///////////////////////////////////判斷是不是需要減1 
		for(i=0;i<PT_Size;i++)//邊際處理,3:0,3,6;4:0,4,8,12;5:0,5,10,15,20....這些數值不需要減1
		{
			if(key==PT_Size*i)break;
		}
		if(i==PT_Size)//需要減1的
		{
			temp=key-1;			    
			if(Cur_Table[temp]==size)return temp;//空格與此次按鍵值相鄰,返回空格所在地址
		}	 
		///////////////////////////////////判斷是不是需要加1
		for(i=0;i<PT_Size;i++)//邊際處理
		{
			if((key+1)==PT_Size*i)break;
		}
		if(i==PT_Size)//需要加1的
		{
			temp=key+1;//判斷+1		 
		    if(temp==(size+1))return size+1;//不需要移動  
			if(Cur_Table[temp]==size)return temp;//空格與此次按鍵值相鄰,返回空格所在地址
		}	 
		return size+1;//不需要移動
	}
}
/////////////////////////////////////////////////////////////////////
//拼圖游戲的按鍵值獲取函數
//返回按鍵值 
//CHECK OK 09/05/30
u8 PTGame_Key_To_Num(void)
{
	u8 t,ytemp;
	if(Is_In_Area(100,300,133,316))return 0XFF;//選擇了退出按鍵,退出模式		 
	for(t=0;t<PT_Size;t++)//返回常規按鍵
	{	  		   	
		for(ytemp=0;ytemp<PT_Size;ytemp++)
		if(Is_In_Area(5+Xscal*t,5+Xscal*ytemp,5+Xscal*(t+1),5+Xscal*(ytemp+1)))return t+ytemp*PT_Size+1;
	}    
	if(PT_Size==3&&Is_In_Area(159,236,236,313))return 10;
	else if(PT_Size==4&&Is_In_Area(179,237,237,314))return 17;
	else if(PT_Size==5&&Is_In_Area(188,234,234,280))return 26;
	return 0;//按鍵無效
}
//在指定位置開始顯示四個數字
//x,y:開始坐標
//CHECK OK 09/05/30
void Show_4Num(u8 x,u16 y,u16 num)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区在线播放| 亚洲视频免费看| 日本成人在线视频网站| 欧美日韩午夜影院| 亚洲成av人影院在线观看网| 91成人网在线| 日韩高清不卡在线| 精品国产一区二区国模嫣然| 亚洲视频一区在线| 中文字幕欧美三区| 黄页网站大全一区二区| 久久嫩草精品久久久精品| 风流少妇一区二区| 国产精品乱码人人做人人爱| 色综合久久综合中文综合网| 亚洲永久精品大片| 日韩欧美中文字幕精品| 国产一区二区三区美女| 中文字幕综合网| 欧美日韩卡一卡二| 国产乱码精品一区二区三区忘忧草| 久久精品日产第一区二区三区高清版| 成人app网站| 午夜不卡av免费| 久久看人人爽人人| 色成人在线视频| 六月丁香婷婷色狠狠久久| 国产日产欧美一区| 欧美日韩一区二区电影| 国产一区二区三区在线观看免费视频| 最新中文字幕一区二区三区| 56国语精品自产拍在线观看| 国产一区二区视频在线| 夜夜精品视频一区二区| 精品国产乱码久久| 日本韩国欧美一区二区三区| 久久精品国产久精国产爱| 综合久久综合久久| 久久综合色综合88| 欧美亚州韩日在线看免费版国语版| 久久国产精品无码网站| 亚洲精品乱码久久久久久| 久久综合五月天婷婷伊人| 欧美最新大片在线看| 国产精品77777| 午夜精品福利久久久| 国产精品盗摄一区二区三区| 欧美成人性战久久| 欧美日韩国产首页| 99久久免费视频.com| 国内精品第一页| 天堂蜜桃91精品| 亚洲人成网站色在线观看| 国产日韩精品一区| 欧美tk丨vk视频| 欧美欧美午夜aⅴ在线观看| 欧美日韩中文另类| 国产欧美一区二区三区鸳鸯浴| 欧美亚洲丝袜传媒另类| 国产精品88888| 麻豆国产一区二区| 香蕉成人伊视频在线观看| 亚洲欧美视频一区| 国产精品久久久久久久久免费桃花| 日韩一区二区三区四区 | 欧美日韩国产首页| 色婷婷久久99综合精品jk白丝| 国产91精品一区二区麻豆网站| 蜜臀av性久久久久蜜臀av麻豆| 午夜精品福利一区二区蜜股av| 亚洲男人的天堂av| 亚洲三级在线观看| 亚洲日本在线天堂| 亚洲色图色小说| 亚洲欧美日韩国产综合在线| 中文字幕亚洲一区二区va在线| 国产欧美一区二区三区在线老狼| 亚洲精品一区二区三区福利| 欧美成人高清电影在线| 精品国产一区二区三区久久久蜜月| 日韩视频在线一区二区| 精品福利一二区| www成人在线观看| 久久精品亚洲精品国产欧美kt∨ | 日韩欧美电影一二三| 欧美高清视频一二三区| 911精品国产一区二区在线| 这里是久久伊人| 欧美大片国产精品| 久久综合九色综合久久久精品综合| 精品国产乱码久久久久久久| 国产午夜亚洲精品不卡| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲视频一区二区免费在线观看| 亚洲日本在线看| 一区二区三区丝袜| 午夜电影网亚洲视频| 精品一二线国产| 国产91精品免费| 色婷婷综合五月| 欧美精品第一页| 久久综合精品国产一区二区三区| 国产欧美久久久精品影院| 亚洲欧美日韩一区| 日韩av电影免费观看高清完整版| 精品一二三四区| 91一区一区三区| 欧美一级高清片| 国产精品人妖ts系列视频| 亚洲一区在线视频观看| 蜜桃一区二区三区四区| 国产91清纯白嫩初高中在线观看 | 亚洲一二三四在线观看| 蜜桃视频在线观看一区| 福利一区二区在线观看| 欧美三片在线视频观看| 久久久精品tv| 一区二区三区不卡视频在线观看| 琪琪久久久久日韩精品| 成人晚上爱看视频| 欧美日韩不卡在线| 久久久久亚洲蜜桃| 亚洲成在人线在线播放| 国产麻豆成人传媒免费观看| 色综合久久66| 久久久一区二区三区捆绑**| 亚洲乱码一区二区三区在线观看| 蜜臀精品久久久久久蜜臀| 色综合一区二区| 久久影院视频免费| 亚洲成a人v欧美综合天堂| 丁香婷婷深情五月亚洲| 91精品福利在线一区二区三区| 国产精品久久久久天堂| 久久黄色级2电影| 欧美性色黄大片手机版| 中文字幕国产一区| 精品一区二区三区视频在线观看 | 国产剧情一区二区三区| 欧美亚洲动漫制服丝袜| 国产精品视频一二三区| 久久精品国产精品青草| 欧美在线一区二区三区| 国产精品欧美经典| 狠狠色丁香久久婷婷综合丁香| 欧美怡红院视频| 亚洲婷婷在线视频| 成人禁用看黄a在线| 精品日韩在线观看| 日韩国产高清在线| 欧美性猛交一区二区三区精品| 国产精品久久国产精麻豆99网站| 国产一区二区三区四区五区入口 | 久久久www免费人成精品| 天天综合天天做天天综合| 色综合色综合色综合色综合色综合| 久久久久久久免费视频了| 狂野欧美性猛交blacked| 91麻豆精品国产自产在线观看一区| 亚洲永久免费av| 欧美手机在线视频| 亚洲国产美女搞黄色| 欧美性受xxxx| 亚洲地区一二三色| 欧美精品在欧美一区二区少妇| 亚洲自拍偷拍综合| 欧美日韩免费观看一区二区三区| 亚洲一区在线观看免费| 欧美性xxxxxxxx| 亚洲va欧美va人人爽午夜| 欧美午夜精品一区二区蜜桃| 亚洲综合一区二区精品导航| 欧洲av一区二区嗯嗯嗯啊| 亚洲午夜精品在线| 51久久夜色精品国产麻豆| 日韩在线卡一卡二| 精品日韩在线一区| 国产高清不卡一区二区| 中文字幕成人在线观看| av在线免费不卡| 亚洲免费观看在线观看| 91精彩视频在线观看| 亚洲二区在线观看| 精品少妇一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 国产女主播视频一区二区| 91免费视频观看| 五月婷婷激情综合网| 日韩精品在线一区二区| 国产福利一区在线| 亚洲美女少妇撒尿| 欧美一级精品大片| 国产xxx精品视频大全| 亚洲蜜臀av乱码久久精品蜜桃| 欧美艳星brazzers| 蜜桃精品在线观看| 日本一区二区三区在线不卡| 日本道免费精品一区二区三区| 日本午夜精品一区二区三区电影| 2022国产精品视频|