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

📄 main.c

📁 s3c44b0上边的各个功能实现 ADS1.2
💻 C
📖 第 1 页 / 共 2 页
字号:
	
void GamePlay(void)
{	
	uint32 i;
	snake.life=0;
	snake.direction=1;
	snake.x[0]=0;snake.y[0]=6;	//蛇头
	snake.x[1]=1;snake.y[1]=6;
	snake.node=2;				//节数
	food.x=7;					
	food.y=6;
	DrawBeanSnake(food.x,food.y);
	food.yes=1;
	PrintScore(112,54,score);
	while(1)
	{
	if(food.yes==0)
		{
		food.x=food.x+3;
		food.y++;
		if(food.x>17)
			food.x=0;
		if(food.y>9)
			food.y=0;	
		DrawBeanSnake(food.x,food.y);
		food.yes=1;
		}
	if(food.yes==1)//避免豆子显示在蛇身上而使豆子被清掉
		{
		DrawBeanSnake(food.x,food.y);
		}
	for(i=snake.node-1;i>0;i--)
		{
		 snake.x[i]=snake.x[i-1];
		 snake.y[i]=snake.y[i-1];
		}
	switch(snake.direction)
		{
		 case 1:snake.x[0]+=1;break;
		 case 2:snake.x[0]-=1;break;
		 case 3:snake.y[0]-=1;break;
		 case 4:snake.y[0]+=1;break;
		}	
	for(i=3;i<snake.node;i++)		//从蛇的第四节开始判断是否撞到自己,因为蛇头为两节,第三节不可能拐过来
		{
		 if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])	
			 {
			  GameOver();
			  snake.life=1;
			  break;
			 }
		}
	if(snake.x[0]>17||snake.y[0]>9)	//判断蛇是否撞到墙
		{
		 GameOver();
		 snake.life=1;
		}
	if(snake.life==1)	//如果蛇死就跳出循环,重新开始
	break;
	for(i=0;i<snake.node;i++)		//画蛇
		DrawBeanSnake(snake.x[i], snake.y[i]);
	OSTimeDly(GameSpeed);
		if(snake.x[0]==food.x&&snake.y[0]==food.y)	//吃到食物后
		{
		 food.yes=0;
		 snake.node++;
		 score+=1;
		 PrintScore(112,54,score);
		}		 
	ClearSnake(snake.x[snake.node-1], snake.y[snake.node-1]);	//清除蛇的最后一节			
	/*if(key==ESC)
		break;
	else if(key==UP&&snake.direction!=4)	//判断是否往相反的方向移动
		 snake.direction=3;
		else if(key==RIGHT&&snake.direction!=2)	
			 snake.direction=1;
			else if(key==LIFT&&snake.direction!=1)	
				 snake.direction=2;
				else if(key==DOWN&&snake.direction!=3)	
					 snake.direction=4;*/
	}//END while
}



/****************************************************************************
* 名称:IniPicture()
* 功能:游戏开始时屏幕的边框初始化
*		
* 入口参数:无
* 出口参数:无
* 说明:无
****************************************************************************/
void IniGamePicture(void)
{
    GUI_Initialize();
    GUI_PutHZ(125-12, 0,  (uint8 *)tan0, 16, 16);		//边上显示"贪吃蛇"
    GUI_PutHZ(125-12, 16, (uint8 *)chi0, 16, 16);
    GUI_PutHZ(125-12, 32, (uint8 *)she0, 16, 16);
    GUI_Rectangle(0,0,125-13,63,2);		//画边界框
    DrawBeanSnake(0,6);
    DrawBeanSnake(1,6);
}
/****************************************************************************
* 名称:IniDesignInformation()
* 功能: 显示设计者信息
*		
* 入口参数:无
* 出口参数:无
* 说明:无
****************************************************************************/
void IniDesignInformation(void)
{
	uint32 i=1;
	GUI_PutHZ(i*18, 0,   (uint8 *)huang0,16, 16);		//黄石理工学院 设计者 周义
	i++;
    GUI_PutHZ(i*18, 0,   (uint8 *)shi0,  16, 16);
    i++;
    GUI_PutHZ(i*18, 0,   (uint8 *)li0,   16, 16);
    i++;
    GUI_PutHZ(i*18, 0,   (uint8 *)gong0, 16, 16);
    i++;
    GUI_PutHZ(i*18, 0,   (uint8 *)xue0,  16, 16);
    i++;
    GUI_PutHZ(i*18, 0,   (uint8 *)yuan0, 16, 16);
    
    i=2;
    GUI_PutHZ(i*18, 18,  (uint8 *)she4,  16, 16);
    i++;
    GUI_PutHZ(i*18, 18,  (uint8 *)ji0,   16, 16);
    i++;
    GUI_PutHZ(i*18, 18,  (uint8 *)zhe0,  16, 16);
    
    i=3;
    GUI_PutHZ(i*18, 36,  (uint8 *)zhou0, 16, 16);
    i++;
    GUI_PutHZ(i*18, 36,  (uint8 *)yi0,   16, 16);
    OSTimeDlyHMSM(0,0,0,50);
}
/****************************************************************************
* 名称:GUI_PutHZ_Gai()
* 功能:	GUI_PutHZ修改版,坐标(0,0)到(8,4)
*		
* 入口参数:x
*			y
*			dat
* 出口参数:无
* 说明:无
****************************************************************************/
void GUI_PutHZ_Gai(uint32 x, uint32 y, uint8 *dat)
{
	//GUI_PutHZ(x*16, y*16, *dat, 16, 16);
}


/****************************************************************************
* 名称:LedInit()
* 功能: Led口的输入输出定义
*		
* 入口参数:无
* 出口参数:无
* 说明:无
****************************************************************************/
void LedInit(void)
{
 	PINSEL0=0x00000000;
 	PINSEL1=0x00000000;
 	IODIR=0xffffffff;
 	IOSET=LED1;
 	IOSET=LED2;
 	IOSET=LED3;
}

/****************************************************************************
* 名称:LedInit()
* 功能: Led口的输入输出定义
*		
* 入口参数:无
* 出口参数:无
* 说明:无
****************************************************************************/
void KeyInit(void)
{
	PINSEL0=0x00000000;
 	PINSEL1=0x00000000;
 	IODIR  =0xe83fffff;
}	

/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,然后启动系统。
****************************************************************************/
int  main(void)
{
	OSInit ();																										
	OSTaskCreate(Task0,    (void *)0, &TaskStk[TaskStkLengh - 1],      10);	
	OSTaskCreate(TaskLed1, (void *)0, &TaskLed1Stk[TASK_STK_SIZE - 1], 30);
    OSTaskCreate(TaskLed2, (void *)0, &TaskLed2Stk[TASK_STK_SIZE - 1], 35);
    OSTaskCreate(TaskLed3, (void *)0, &TaskLed3Stk[TASK_STK_SIZE - 1], 31);
	OSStart ();
	return 0;															
}

/*********************************************************************************************************
**                            Task0 任务0
** 功能:主任务,游戏的显示任务
********************************************************************************************************/
void  Task0(void *pdata)
{   
	
	pdata = pdata;
	TargetInit ();
	LedInit();
	GUI_Initialize();       // 初始化LCM
    GUI_SetColor(1, 0);     // 设置前景色和背景色
    OSTimeDly(10);
    IniDesignInformation();
    OSTimeDly(10);
    IniGamePicture();
    GamePlay();   
	
	while (1)
	{
		OSTimeDly(10);
	}
}

/*********************************************************************************************************
**                            TaskLed1 任务1
** 功能:LED闪烁任务,显示操作系统的运行状况
********************************************************************************************************/
void  TaskLed1(void *pdata)
{   
   
    pdata=pdata;
	TargetInit();
	LedInit();
	while(1)
	{
	IOSET=LED2;
	OSTimeDlyHMSM(0,0,0,50); 
	IOCLR=LED2;
	//OSTaskSuspend(5);
	OSTimeDlyHMSM(0,0,0,50);  
	}                                
	while(1);
}

/*********************************************************************************************************
**                            TaskLed2 任务2
** 功能:键盘扫描任务
********************************************************************************************************/
void  TaskLed2(void *pdata)
{   
	//POSMSG pMsg;
	pdata=pdata;
	TargetInit();
	KeyInit();
	while(1)
	{
	if((IO0PIN&KEY_UP)==0)
		{
		OSTimeDlyHMSM(0,0,0,5);
		if((IO0PIN&KEY_UP)==0)
			{
			snake.direction=3;
			IOSET=LED2;
			while((IO0PIN&KEY_UP)==0);
			}
		}	
	if((IO0PIN&KEY_DOWN)==0)
		{
		OSTimeDlyHMSM(0,0,0,5);
		if((IO0PIN&KEY_DOWN)==0)
			{
			snake.direction=4;
			IOCLR=LED2;
			while((IO0PIN&KEY_DOWN)==0);
			}
		}	
	if((IO0PIN&KEY_LIFT)==0)
		{
		OSTimeDlyHMSM(0,0,0,5);
		if((IO0PIN&KEY_LIFT)==0)
			{
			snake.direction=2;
			while((IO0PIN&KEY_LIFT)==0);
			}
		}					
	if((IO0PIN&KEY_RIGHT)==0)
		{
		OSTimeDlyHMSM(0,0,0,5);
		if((IO0PIN&KEY_RIGHT)==0)
			{
			snake.direction=1;
			while((IO0PIN&KEY_RIGHT)==0);
			}
		}
	//pMsg=OSCreateMessage(0,(snake.direction+1),snake.direction>>16);
	//if(pMsg)
	//	SendMessage(pMsg);	
    OSTimeDlyHMSM(0,0,0,5);
    }//end while		
	                                 
	while(1);
}
/*********************************************************************************************************
**                            TaskLed3 任务3
** 功能:LED闪烁任务,显示操作系统的运行状况
********************************************************************************************************/
void  TaskLed3(void *pdata)
{  
	//uint8 txmsg;
	uint32 j;
	//txmsg = 'A';
	pdata=pdata;
	TargetInit();
	LedInit();
	while(1)
	{
	
	for(j=0;j<=2;j++)
	{
	IOSET=LED3;
	OSTimeDlyHMSM(0,0,0,50);
	IOCLR=LED3;
	OSTimeDlyHMSM(0,0,0,50);
	}
	//OSMboxPost(TxMbox,(void *)&txmsg);
	}                                
	while(1);
}  
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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