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

📄 zhuoxiaoji.c

📁 汗诺塔
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */#include "..\ucos-ii\add\osaddition.h"#include <string.h>#include <math.h>#include <stdlib.h>//记录9个格子的位置structRECT Rect[9];structRECT *pRect[9];//记录一些相关位置,StepRect位置显示游戏等级,CountRect位置显示总共出现的小鸡的数目//CatchRect位置显示抓到的小鸡的数目,ScoreRect位置显示当前的分数u8 StepRectX,StepRectY,TotalCountRectX,TotalCountRectY;u8 CatchCountRectX,CatchCountRectY,ScoreRectX,ScoreRectY;u8 Step;         //游戏等级u8 TotalCount;   //总共出现的小鸡的数目u8 CatchCount;   //抓到的小鸡的数目u8 Score;        //游戏当前的分数u8 CurrentPos;   //小鸡当前正在哪一个格子中BOOLEAN gameover,pause;BOOLEAN gamepass;BOOLEAN initfinished;//记录初始化是否完成,用于协调多个任务,确保其它任务在主任务初始化结束后再开始工作PDC pdc;//绘图用的DCchar bmp_hitchick[12]={'1','4','5','_','8','0',' ',' ','B','M','P',0}; //击中小鸡的图片char bmp_misschick[12]={'1','4','5','_','8','1',' ',' ','B','M','P',0}; //没有击中小鸡的图片char bmp_gameend[12]={'1','4','5','_','9','0',' ',' ','B','M','P',0}; //游戏通关的图片char bmp_logo[12]={'1','4','5','_','5','9',' ',' ','B','M','P',0}; //登录图片char bmp_gamepass[12]={'1','4','5','_','7','0',' ',' ','B','M','P',0}; //游戏过关图片char bmp_gameover[12]={'1','4','5','_','7','1',' ',' ','B','M','P',0}; //游戏结束图片char bmp_frame[12]={'1','2','7','_','3','9',' ',' ','B','M','P',0}; char bmp_chick[12]={'1','2','7','_','3','5',' ',' ','B','M','P',0}; char bmp_gamepause[12]={'1','2','7','_','3','7',' ',' ','B','M','P',0};char bmp_empty[12]={'1','2','7','_','4','0',' ',' ','B','M','P',0};     ///******************任务定义***************///OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Task堆栈void Main_Task(void *Id);               //Main_Task,主要对一些变量进行初始化#define Main_Task_Prio     12           //Main_Task的优先级OS_STK Led_Flash_Stack[STACKSIZE]= {0, }; //LED闪烁任务堆栈void Led_Flash_Task(void *Id);            //LED闪烁任务#define Led_Flash_Prio           60       //LED闪烁任务的优先级OS_STK Display_Task_Stack[STACKSIZE*8]={0, };   //Display_Task堆栈void Display_Task(void *Id);                   //Display_Task,主要实时更新LCD屏幕的显示#define Display_Task_Prio     20               //Display_Task任务的优先级/**************已经定义的OS任务*************#define SYS_Task_Prio				1#define Touch_Screen_Task_Prio		9#define Main_Task_Prio     12#define Key_Scan_Task_Prio      58#define Lcd_Fresh_prio           59#define Led_Flash_Prio           60***************************************////////////*****************事件定义*****************///OS_EVENT *Nand_Rw_Sem;                   //Nand_Flash读写控制权旗语//and you can use it as folloeing://    Nand_Rw_Sem=OSSemCreate(1);        //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件////    OSSemPend(Nand_Rw_Sem,0,&err);//    OSSemPost(Nand_Rw_Sem);OS_EVENT *Uart_Rw_Sem;                   //Uart读写控制权旗语//and you can use it as folloeing://    Uart_Rw_Sem=OSSemCreate(1);        //创建Uart读写控制权旗语,初值为1满足互斥条件////    OSSemPend(Uart_Rw_Sem,0,&err);//    OSSemPost(Uart_Rw_Sem);//////////////////////////////////////////////////////////void Led_Flash_Task(void *Id)//指示RTOS处于正常工作中{  unsigned char led_state;  Uart_Printf(0,"\n10");  for (;;)  {    Led_Display(led_state);    led_state=~led_state;    OSTimeDly(250);  }}//Led_Flash_Taskvoid initOSGUI()	//初始化操作系统的图形界面{	structRECT rect;	initOSMessage();	initOSList();	initOSDC();	initOSCtrl();	initOSFile();}///////////////////////////////////////////////////////                  Main function.                //////////////////////////////////////////////////////int Main(int argc, char **argv){	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //	OSInit();               // needed by uC/OS-II //	uHALr_ResetMMU();	LCD_Init();             //初始化LCD模块	LCD_printf("LCD initialization is OK\n");	LCD_printf("240 x 128  Text Mode\n");	LoadFont(); //加载字体	LoadConfigSys();//加载配置文件	  // create the tasks in uC/OS and assign increasing //  // priorities to them so that Task3 at the end of  //  // the pipeline has the highest priority.          //	LCD_printf("Create task on uCOS-II...\n");	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);	OSTaskCreate(Led_Flash_Task,  (void *)0,  (OS_STK *)&Led_Flash_Stack[STACKSIZE-1],  Led_Flash_Prio  );	OSTaskCreate(Display_Task,(void *)0,  (OS_STK *)&Display_Task_Stack[STACKSIZE-1],  Display_Task_Prio); 	OSAddTask_Init();//创建一些缺省任务,包括键盘任务、触摸屏任务等  	LCD_printf("Starting uCOS-II...\n");	LCD_printf("Entering graph mode...\n");	LCD_ChangeMode(DspGraMode);       		initOSGUI();	InitRtc();	Nand_Rw_Sem=OSSemCreate(1);   //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//	OSStart();              // start the game //	// never reached //	return 0;}//main//////////////////////////////////////////////////////////////////////////////////////////////	///////////////////////////////////////////////////////////////////////////void PauseGame(){    if(gameover == FALSE)	{		pause = !(pause);		{			ShowBmp(pdc,bmp_frame, 0, 0);		}	}}//////////////////////////////////////////////////////////////////////////////void RestartGame(){	gameover = FALSE;	pause = FALSE;    	gamepass = FALSE;    	Step = 1;    	TotalCount = 0;    	CatchCount = 0;    	Score = 0;    	CurrentPos = 100;	ShowBmp(pdc,bmp_frame, 0, 0);}////////////////////////////////////////////////////////////////////////////////void StartNextGame(){	if (Step == 5)	{		ShowBmp(pdc,bmp_gameend, 41, 95);//显示游戏通关图片		gameover = TRUE;		gamepass = FALSE;		Step = 1;	}	else	{		gameover = FALSE;		pause = FALSE;    	gamepass = FALSE;    	Step++;    	TotalCount = 0;    	CatchCount = 0;    	CurrentPos = 100;		ShowBmp(pdc,bmp_frame, 0, 0);	}}	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////void onKey(int nkey, int fnkey){	    switch(nkey)	{			case 0://key 1 -- choose grid1			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 1)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[0].left, Rect[0].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[0].left, Rect[0].top);//显示没有抓住小鸡的图片				}			}			return;		case 1://key 2 -- choose grid2			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 2)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[1].left, Rect[1].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[1].left, Rect[1].top);//显示没有抓住小鸡的图片				}			}			return;				case 2://key 3 -- choose grid3			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 3)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[2].left, Rect[2].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[2].left, Rect[2].top);//显示没有抓住小鸡的图片				}			}			return;			case 4://key 4 -- choose grid4			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 4)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[3].left, Rect[3].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[3].left, Rect[3].top);//显示没有抓住小鸡的图片				}			}			return;			case 5://key 5 -- choose grid5			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 5)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[4].left, Rect[4].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[4].left, Rect[4].top);//显示没有抓住小鸡的图片				}			}			return;				case 6://key 6 -- choose grid6			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 6)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[5].left, Rect[5].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[5].left, Rect[5].top);//显示没有抓住小鸡的图片				}			}			return;				case 8://key 7 -- choose grid7			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 7)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[6].left, Rect[6].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[6].left, Rect[6].top);//显示没有抓住小鸡的图片				}			}			return;			case 9://key 8 -- choose grid8			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 8)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[7].left, Rect[7].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[7].left, Rect[7].top);//显示没有抓住小鸡的图片				}			}			return;			case 10://key 9 -- choose grid9			if ( (gameover!=TRUE)&&(pause!=TRUE) )			{								if (CurrentPos == 9)				{					CatchCount++;					Score+=5;					ShowBmp(pdc,bmp_hitchick,Rect[8].left, Rect[8].top);//显示抓住小鸡的图片						}				else				{					ShowBmp(pdc,bmp_misschick, Rect[8].left, Rect[8].top);//显示没有抓住小鸡的图片				}			}			return;			case 11://key 确定 -- New Game			if (gamepass == FALSE)				RestartGame();			else				StartNextGame();			return;		case 15://key 取消 -- Pause Game			PauseGame();			return;			default:			return;			}}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////void Main_Task(void *Id)             //Main_Test_Task{	POSMSG  pMsg;	Wnd MainWindow;	PWnd pMainWindow;	structRECT MainwinRect;	structRECT* pMainwinRect;			char Main_Wnd_Caption_8[]="Catch Chick";	U16 Main_Wnd_Caption_16[20];	initfinished = FALSE;	gameover = FALSE;	pause = FALSE;    	gamepass = FALSE;    	    	Step = 1;    	TotalCount = 0;    	CatchCount = 0;    	Score = 0;    	CurrentPos = 100;		pMainWindow=&MainWindow;	pMainwinRect = &MainwinRect;	MainwinRect.bottom = 235;	MainwinRect.left = 1;	MainwinRect.right = 320;	MainwinRect.top = 5;		pRect[0] = &Rect[0];	Rect[0].bottom = 81;	Rect[0].left = 19;	Rect[0].right = 66;	Rect[0].top = 28;	pRect[1] = &Rect[1];	Rect[1].bottom = 81;	Rect[1].left = 85;	Rect[1].right = 132;	Rect[1].top = 28;	pRect[2] = &Rect[2];	Rect[2].bottom = 81;	Rect[2].left = 152;	Rect[2].right = 199;	Rect[2].top = 28;	pRect[3] = &Rect[3];	Rect[3].bottom = 148;	Rect[3].left = 19;	Rect[3].right = 66;	Rect[3].top = 95;	pRect[4] = &Rect[4];	Rect[4].bottom = 148;	Rect[4].left = 85;	Rect[4].right = 132;	Rect[4].top = 95;		pRect[5] = &Rect[5];	Rect[5].bottom = 148;	Rect[5].left = 152;	Rect[5].right = 199;	Rect[5].top = 95;	pRect[6] = &Rect[6];	Rect[6].bottom = 212;	Rect[6].left = 19;	Rect[6].right = 66;	Rect[6].top = 159;	pRect[7] = &Rect[7];	Rect[7].bottom = 212;	Rect[7].left = 85;	Rect[7].right = 132;	Rect[7].top = 159;		pRect[8] = &Rect[8];	Rect[8].bottom = 212;	Rect[8].left = 152;	Rect[8].right = 199;	Rect[8].top = 159;	StepRectX = 255;	StepRectY = 50;		TotalCountRectX = 255;	TotalCountRectY = 96;		CatchCountRectX = 255;	CatchCountRectY = 139;		ScoreRectX = 255;	ScoreRectY = 179;	pdc = CreateDC();	ClearScreen();//清屏	ShowBmp(pdc,bmp_logo, 1, 1);//显示登录图片	OSTimeDly(2000);//使显示持续一段时间	ClearScreen();//清屏	strChar2Unicode(Main_Wnd_Caption_16, Main_Wnd_Caption_8);	pMainWindow =CreateWindow(120, pMainwinRect, FONTSIZE_SMALL,WND_STYLE_MODE, Main_Wnd_Caption_16, NULL);	DrawWindow(pMainWindow);		ClearScreen();	ShowBmp(pdc,bmp_frame, 0, 0);	initfinished = TRUE;//初始化部分结束		while(1)	{		pMsg = WaitMessage(0);		switch (pMsg->Message)		{			case OSM_KEY:				onKey(pMsg->WParam, pMsg->LParam);		}		DeleteMessage(pMsg);		OSTimeDly(50);	}		DestoryDC(pdc);}		///////// Display_Task /////////////void Display_Task(void *Id){	//	int tempi;	U16 tempstr[20];		//判断主任务的初始化部分是否完成,如果完成则继续下面的显示工作,否则不再继续向下执行,交出CPU使用权	if (initfinished == FALSE)	   OSTimeDly(2000);		while(1)  	{  		 		if (gameover == TRUE)  		{  			OSTimeDly(4000*1-700*Step);  			continue;	  		}  		else if (pause == TRUE)  		{  			ShowBmp(pdc,bmp_gamepause, 41, 95);//显示游戏暂停图片			OSTimeDly(4000*1-700*Step);			continue;		}		else		{									for(tempi=0;tempi<9;tempi++)			FillRect2(pdc, pRect[tempi], GRAPH_MODE_NORMAL, RGB(255, 255, 255));			CurrentPos = rand()%9;//产生一个0-8之间的随机整数            ShowBmp(pdc,bmp_chick, Rect[CurrentPos].left, Rect[CurrentPos].top);//在制定的框中显示小鸡			TotalCount++;			CurrentPos++;			Int2Unicode(Step,tempstr);			TextOut(pdc, StepRectX, StepRectY, tempstr, TRUE, FONTSIZE_SMALL);			Int2Unicode(TotalCount,tempstr);			TextOut(pdc, TotalCountRectX, TotalCountRectY, tempstr, TRUE, FONTSIZE_SMALL);			Int2Unicode(CatchCount,tempstr);			TextOut(pdc, CatchCountRectX, CatchCountRectY, tempstr, TRUE, FONTSIZE_SMALL);			Int2Unicode(Score,tempstr);			TextOut(pdc, ScoreRectX, ScoreRectY, tempstr, TRUE, FONTSIZE_SMALL);			if (TotalCount >= 20)			{				gameover = TRUE;				if (CatchCount >= 10)				{					gamepass = TRUE;					ShowBmp(pdc,bmp_gamepass, 41, 95);//显示游戏过关图片				}				else				{					ShowBmp(pdc,bmp_gameover, 41, 95);//显示游戏结束图片				}			}						OSTimeDly(4000*1-700*Step);				}  		}}															     

⌨️ 快捷键说明

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