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

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

?? snake.c

?? Brew2.0開發的,簡單的貪吃蛇游戲.本人在學習時編的!
?? C
字號:
/*===========================================================================

FILE: snake.c
===========================================================================*/
/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "AEEModGen.h"          // Module interface definitions
#include "AEEAppGen.h"          // Applet interface definitions
#include "AEEShell.h"           // Shell interface definitions
#include "snake.bid"
#include "AEEStdLib.h" 
//add service
#include "AEEFile.h"          // AEE File Manager Services

/* definition */

/*-------------------------------------------------------------------
Function Prototypes
-------------------------------------------------------------------*/
static boolean snake_HandleEvent(IApplet * pi, AEEEvent eCode, 
                                      uint16 wParam, uint32 dwParam);
static boolean Snake_InitAppData(IApplet * pi);

/*===============================================================================
FUNCTION DEFINITIONS
=============================================================================== */
/*----------------------snake game---------------------------*/
typedef struct {
   int x;
   int y;
   }SNAKE;
typedef enum{
UP=0,
LEFT,
RIGHT,
DOWN
}SNAKE_DIRECTION;
typedef struct _CSnakeApp
{
AEEApplet a; // Mandatory data member
int AreaWidth; // Stores the area width
int AreaHeight; // Stores the area height
int gameover;//indicate whether game over
int food_x;//the x cordinate for food
int food_y;//the y cordinate for food
SNAKE_DIRECTION current_snake_direction;
int snake_length;
int score;
SNAKE snake[200];
}CSnakeApp;

#define LEFT_LIMIT      1
#define UP_LIMIT        1

#define SNAKE_HEAD_X LEFT_LIMIT+7
#define SNAKE_HEAD_Y UP_LIMIT+7

#define BLOCK_SIZE 6 //less than or equal to 6
/*translate an integer into decimal sting*/
unsigned int up_Itoa(AECHAR * buffer, int eger)
{
	int len, ueger;
	unsigned char minusP;

	minusP = (eger < 0);

	if(minusP)
	{
		if(buffer) 
		{
			*(buffer++) = '-';
		}
		ueger = (int)(0 - eger);
	}
	else
	{
		ueger = (unsigned int)eger;
	}

	{
		unsigned int tmp;

		tmp = ueger;
		len = 1;
		while ( (tmp /= 10) ) len += 1;
	}

	{
		unsigned int pt;

		pt = len;
		if (buffer) buffer[pt] = 0;

		while(pt--) 
		{
			if (buffer)
			{
				buffer[pt] = (char)('0' + (ueger % 10));
			}
			ueger /= 10;
		}
	}
	return (len + 1 + minusP);
}
//====================================================================
// Function: write_video
// Description: draw a frame
// input value position(x,y)
//====================================================================
void write_video
(
      CSnakeApp * pMe, 
      int x,
      int y,
      RGBVAL color,
      unsigned char full
 )
{
     AEERect rect;
     rect.x=x;
     rect.y=y;
     rect.dx=BLOCK_SIZE;
     rect.dy=BLOCK_SIZE;
     if(full)
 	    IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           RGB_BLACK,// RGBVAL 
                           color,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
     	
 	 else
 	 	IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           RGB_WHITE,// RGBVAL 
                           RGB_WHITE,// RGBVAL 
                           IDF_RECT_FRAME | IDF_RECT_FILL);
}
/**/
void init_frame(CSnakeApp * pMe)
{
  AEERect rect;
  rect.x=LEFT_LIMIT*BLOCK_SIZE-1;
     rect.y=UP_LIMIT*BLOCK_SIZE-1;
     rect.dx=(pMe->AreaWidth-LEFT_LIMIT+1)*BLOCK_SIZE+2;
     rect.dy=(pMe->AreaHeight-UP_LIMIT+1)*BLOCK_SIZE+2;
 	 IDISPLAY_DrawRect(pMe->a.m_pIDisplay,
                           &rect,
                           MAKE_RGB(0,0,255),// RGBVAL 
                           MAKE_RGB(0,0,255),// RGBVAL 
                           IDF_RECT_FRAME );//| IDF_RECT_FILL);
}
void init_snake(CSnakeApp * pMe)
{int i;

 pMe->snake_length=7;
 pMe->current_snake_direction=RIGHT;
 for(i=0;i<pMe->snake_length;i++)
 {pMe->snake[i].x=SNAKE_HEAD_X-i;
 pMe->snake[i].y=SNAKE_HEAD_Y;
 }
 for(i=pMe->snake_length-1;i>=0;i--)
 write_video(pMe,pMe->snake[i].x*BLOCK_SIZE,pMe->snake[i].y*BLOCK_SIZE,MAKE_RGB(128,128,128),TRUE);
 
}

void generate_food(CSnakeApp *pMe)
{
 int i;
 int found=FALSE;
 while(!found)
 {
  pMe->food_x=(int)GET_UPTIMEMS();;
  pMe->food_x=(pMe->food_x%(pMe->AreaWidth-LEFT_LIMIT-2)+pMe->snake[0].x+pMe->snake[2].y)%(pMe->AreaWidth-LEFT_LIMIT-2);
  pMe->food_y=(int)GET_UPTIMEMS();;
  pMe->food_y=(pMe->food_y%(pMe->AreaHeight-UP_LIMIT-2)+pMe->snake[1].y+pMe->snake[3].x)%(pMe->AreaHeight-UP_LIMIT-2);
  pMe->food_x=pMe->food_x+LEFT_LIMIT+1;
  pMe->food_y=pMe->food_y+UP_LIMIT+1;
  for(i=0;i<pMe->snake_length;i++)
  {
  if(pMe->food_x==pMe->snake[i].x&&pMe->food_y==pMe->snake[i].y) break;
  }

  if(i>=pMe->snake_length) found=TRUE;

 }
  write_video(pMe,pMe->food_x*BLOCK_SIZE,pMe->food_y*BLOCK_SIZE,MAKE_RGB(255,0,0),TRUE);
 }
boolean isself(CSnakeApp *pMe)
{int i;

 for(i=1;i<pMe->snake_length;i++)
 if(pMe->snake[0].x==pMe->snake[i].x&&pMe->snake[0].y==pMe->snake[i].y) 
 break;
 
 if(i>=pMe->snake_length)
 	return FALSE;
 else 
 	return TRUE;
}

static void display_score(CSnakeApp *pMe)
{

 AECHAR game_score[15]={'s','c','o','r','e',':',0,0,0,0,0,0,0,0,0};
 up_Itoa(game_score+6,(int)pMe->score);
	   IDISPLAY_DrawText(pMe->a.m_pIDisplay,    // Display instance
	                           AEE_FONT_BOLD,       // Use BOLD font
	                           game_score,              // Text - Normally comes from resource
	                           -1,                  // -1 = Use full string length
	                           0,   // x-cordinate
	                           (pMe->AreaHeight+UP_LIMIT)*BLOCK_SIZE+1, // y-cordinate
	                           NULL,                // No clipping
	                           IDF_ALIGN_CENTER);// | IDF_ALIGN_MIDDLE);
 
}

static void update_map(CSnakeApp *pMe)
{
	int j;
	for(j=0;j<pMe->snake_length;j++)
	write_video(pMe,pMe->snake[j].x*BLOCK_SIZE,pMe->snake[j].y*BLOCK_SIZE,MAKE_RGB(128,128,128),FALSE);
	for(j=pMe->snake_length-1;j>0;j--)
	{
		pMe->snake[j].x=pMe->snake[j-1].x;
		pMe->snake[j].y=pMe->snake[j-1].y;
	}
              switch(pMe->current_snake_direction)
                   {
                   	case UP:
		              pMe->snake[0].y--;
		              if(pMe->snake[0].y<UP_LIMIT)
		              pMe->snake[0].y=pMe->AreaHeight;
	              break;
                    case DOWN:
		              pMe->snake[0].y++;
		              if(pMe->snake[0].y>pMe->AreaHeight)
		              pMe->snake[0].y=UP_LIMIT;
	              break;
                    case LEFT:
		              pMe->snake[0].x--;
		              if(pMe->snake[0].x<LEFT_LIMIT)
		              pMe->snake[0].x=pMe->AreaWidth;
	              break;
                    case RIGHT:
		              pMe->snake[0].x++;
		              if(pMe->snake[0].x>pMe->AreaWidth)
		              pMe->snake[0].x=LEFT_LIMIT;
	              break;
                   }

		     for(j=pMe->snake_length-1;j>=0;j--)
		     write_video(pMe,pMe->snake[j].x*BLOCK_SIZE,pMe->snake[j].y*BLOCK_SIZE,MAKE_RGB(128,128,128),TRUE);
		     
		     if(pMe->snake[0].x==pMe->food_x&&pMe->snake[0].y==pMe->food_y)
		     {generate_food(pMe);
		      pMe->snake_length++;
		      pMe->score+=8;
		      display_score(pMe);
		     }
		    
		      if(isself(pMe))
		      pMe->gameover=TRUE;
		      if(!pMe->gameover)
		      ISHELL_SetTimer(pMe->a.m_pIShell, 100, (PFNNOTIFY) update_map, (AEEApplet *) pMe);
		      else{
		      
		      	}
			  IDISPLAY_Update (pMe->a.m_pIDisplay);
}
/*===========================================================================

FUNCTION: AEEClsCreateInstance

DESCRIPTION
	This function is invoked while the app is being loaded. All Modules must provide this 
	function. Ensure to retain the same name and parameters for this function.
	In here, the module must verify the ClassID and then invoke the AEEApplet_New() function
	that has been provided in AEEAppGen.c. 

   After invoking AEEApplet_New(), this function can do app specific initialization. In this
   example, a generic structure is provided so that app developers need not change app specific
   initialization section every time except for a call to IDisplay_InitAppData(). 
   This is done as follows: InitAppData() is called to initialize AppletData 
   instance. It is app developers responsibility to fill-in app data initialization 
   code of InitAppData(). App developer is also responsible to release memory 
   allocated for data contained in AppletData -- this can be done in 
   IDisplay_FreeAppData().

PROTOTYPE:
   int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)

PARAMETERS:
	clsID: [in]: Specifies the ClassID of the applet which is being loaded

	pIShell: [in]: Contains pointer to the IShell object. 

	pIModule: pin]: Contains pointer to the IModule object to the current module to which
	this app belongs

	ppObj: [out]: On return, *ppObj must point to a valid IApplet structure. Allocation
	of memory for this structure and initializing the base data members is done by AEEApplet_New().

DEPENDENCIES
  none

RETURN VALUE
  AEE_SUCCESS: If the app needs to be loaded and if AEEApplet_New() invocation was
     successful
  EFAILED: If the app does not need to be loaded or if errors occurred in 
     AEEApplet_New(). If this function returns FALSE, the app will not be loaded.

SIDE EFFECTS
  none
===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
   *ppObj = NULL;
		
   if(ClsId == AEECLSID_SNAKE){
      if(AEEApplet_New(sizeof(CSnakeApp), ClsId, pIShell,po,(IApplet**)ppObj,
         (AEEHANDLER)snake_HandleEvent,NULL)
         == TRUE)
      {
		 // Add your code here .....
         if(Snake_InitAppData((IApplet * ) * ppObj) == TRUE)
         return (AEE_SUCCESS);
      }
   }
	return (EFAILED);
}

/*===========================================================================

FUNCTION snake_HandleEvent

DESCRIPTION
	This is the EventHandler for this app. All events to this app are handled in this
	function. All APPs must supply an Event Handler.

PROTOTYPE:
	boolean snake_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

PARAMETERS:
	pi: Pointer to the AEEApplet structure. This structure contains information specific
	to this applet. It was initialized during the AEEClsCreateInstance() function.

	ecode: Specifies the Event sent to this applet

   wParam, dwParam: Event specific data.

DEPENDENCIES
  none

RETURN VALUE
  TRUE: If the app has processed the event
  FALSE: If the app did not process the event

SIDE EFFECTS
  none
===========================================================================*/
static boolean snake_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{ 
   int timer=100;
   CSnakeApp *pMe=(CSnakeApp *)pi;
   
   switch (eCode) 
	{
      case EVT_APP_START:                        	   
	
		init_frame(pMe); 
		timer=100;
		init_snake(pMe);
		generate_food(pMe);        
		IDISPLAY_Update (pMe->a.m_pIDisplay);
		ISHELL_SetTimer(pMe->a.m_pIShell, timer, (PFNNOTIFY) update_map, (AEEApplet *) pMe);
		return(TRUE);
		
      case EVT_APP_STOP:

		    // Add your code here .....

         return TRUE;
	//case 
	case EVT_KEY:
		switch (wParam)
         {
			case AVK_CLR:
		       ISHELL_CancelTimer(pMe->a.m_pIShell, (PFNNOTIFY) update_map, (AEEApplet *) pMe);
               	return(FALSE);
				
			case AVK_UP:
				 if(pMe->current_snake_direction!=DOWN)
         			{
	         		      pMe->current_snake_direction=UP;
         			}
         		break;
			case AVK_DOWN:
	 			if(pMe->current_snake_direction!=UP)
	                	{
	         		      pMe->current_snake_direction=DOWN;
	                	}

         		break;
			case AVK_LEFT:
				 if(pMe->current_snake_direction!=RIGHT)
                   		 { 
         		      		pMe->current_snake_direction=LEFT;
                	 	}
         		break;
			case AVK_RIGHT:
				if(pMe->current_snake_direction!=LEFT)
         			 {
                      		pMe->current_snake_direction=RIGHT;        			
         			 }
         		break;
			
			}

         	IDISPLAY_Update (pMe->a.m_pIDisplay);
		 return(TRUE);
      default:
         break;
   }
   return FALSE;
}
/*initialize applet-specific data.*/
static boolean Snake_InitAppData(IApplet * pi)
{
	AEEDeviceInfo di;

	 CSnakeApp *pMe=(CSnakeApp *)pi;

	ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&di);
    pMe->AreaWidth=(di.cxScreen-LEFT_LIMIT)/BLOCK_SIZE-1;
	pMe->AreaHeight=(di.cyScreen-UP_LIMIT)/BLOCK_SIZE-2;
	pMe->gameover=FALSE;

	return TRUE;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美va欧美不卡在线| 欧美色图免费看| 蜜桃av一区二区在线观看| 一区二区三区四区视频精品免费| 国产免费成人在线视频| 久久综合色婷婷| 久久久久久久久久久久久女国产乱| 欧美日韩1234| 欧美精品黑人性xxxx| 欧美日韩中文字幕一区| 欧美性猛片xxxx免费看久爱| 色综合中文字幕| 色悠久久久久综合欧美99| 91免费看`日韩一区二区| thepron国产精品| 色美美综合视频| 欧美日韩久久久久久| 91精品国产综合久久久久久漫画| 欧美一区在线视频| 亚洲精品在线电影| 中文字幕久久午夜不卡| 中文字幕日韩一区| 亚洲电影在线免费观看| 美女一区二区三区| 国产成人精品一区二| k8久久久一区二区三区| 色激情天天射综合网| 欧美日韩一级二级| 久久免费精品国产久精品久久久久| 欧美极品aⅴ影院| 亚洲精品菠萝久久久久久久| 午夜欧美2019年伦理| 国产真实乱对白精彩久久| www.日韩在线| 久久精品一区二区三区av| 中文字幕二三区不卡| 亚洲欧美日韩一区二区 | 天堂影院一区二区| 久久精品二区亚洲w码| 成人激情av网| 欧美一区二区三区视频在线观看| 日韩制服丝袜av| 亚洲va国产天堂va久久en| 久久国产精品免费| 99精品国产91久久久久久| 欧美一区二区三区婷婷月色| 中文子幕无线码一区tr| 亚洲v日本v欧美v久久精品| 国产乱人伦精品一区二区在线观看| 色网综合在线观看| 精品国产一区二区三区不卡| 一区二区三区产品免费精品久久75| 日韩电影一二三区| 91亚洲永久精品| 精品国产1区二区| 亚洲一区视频在线观看视频| 国产成人av网站| 日韩免费成人网| 婷婷久久综合九色综合伊人色| 高清视频一区二区| 精品国产成人在线影院| 午夜精品免费在线| 色成年激情久久综合| 国产精品毛片大码女人| 韩国一区二区三区| 日韩欧美成人一区二区| 午夜不卡av在线| 欧美做爰猛烈大尺度电影无法无天| 欧美激情一区在线观看| 国产精品综合av一区二区国产馆| 国产精品家庭影院| 国产麻豆精品在线观看| 91精品国产一区二区三区蜜臀 | 九色综合国产一区二区三区| 欧美视频一区二区三区在线观看| 国产精品乱人伦中文| 韩国欧美国产一区| 欧美本精品男人aⅴ天堂| 日本在线不卡一区| 制服丝袜国产精品| 免费成人在线影院| 日韩一区二区三区高清免费看看| 五月婷婷综合在线| 这里只有精品99re| 日av在线不卡| 精品国产1区2区3区| 国内一区二区在线| 久久久噜噜噜久久中文字幕色伊伊| 老司机精品视频线观看86| 欧美电视剧免费全集观看| 毛片一区二区三区| 久久久美女毛片| 99久久精品国产毛片| 亚洲欧洲精品一区二区三区| 99国产欧美另类久久久精品 | 亚洲欧美二区三区| 欧美艳星brazzers| 美女www一区二区| 久久久91精品国产一区二区三区| 国产成a人无v码亚洲福利| 最新欧美精品一区二区三区| 在线视频国产一区| 日本美女视频一区二区| 久久精品人人爽人人爽| 色婷婷综合五月| 丝袜美腿一区二区三区| 精品国内片67194| 成人教育av在线| 午夜精品久久久久久久| 久久亚洲一级片| 91麻豆精品一区二区三区| 亚洲国产另类av| 久久久亚洲精品一区二区三区| 7777精品伊人久久久大香线蕉的 | 久久久国产精品不卡| 97se亚洲国产综合自在线| 亚洲电影第三页| 久久久久久久久久看片| 一本大道av伊人久久综合| 麻豆精品在线视频| 亚洲视频在线观看三级| 日韩欧美一区电影| 色诱视频网站一区| 国产精品1区2区3区| 亚洲韩国精品一区| 国产欧美日韩不卡| 5月丁香婷婷综合| 97se亚洲国产综合在线| 精品一区二区久久久| 亚洲一区在线观看免费观看电影高清| 精品福利一区二区三区| 欧美日韩性生活| 粉嫩av亚洲一区二区图片| 免费视频最近日韩| 亚洲图片一区二区| 国产精品久久久久久户外露出| 日韩欧美aaaaaa| 欧美电影在线免费观看| 91麻豆123| 成人丝袜18视频在线观看| 精品一区二区在线播放| 性感美女久久精品| 亚洲一区视频在线观看视频| 中文字幕一区二区三区乱码在线 | 不卡的av中国片| 国产在线精品不卡| 日本sm残虐另类| 国产**成人网毛片九色| 国产麻豆精品久久一二三| 日本不卡的三区四区五区| 亚洲成人资源网| 亚洲国产毛片aaaaa无费看| 亚洲激情网站免费观看| 亚洲人成电影网站色mp4| 国产欧美日韩精品a在线观看| 久久女同精品一区二区| 欧美zozozo| 亚洲精品一区二区三区福利| 日韩精品一区国产麻豆| 日韩一卡二卡三卡| 日韩欧美一区二区三区在线| 日韩午夜在线观看视频| 日韩一区二区在线看| 日韩区在线观看| 久久只精品国产| 国产女人18毛片水真多成人如厕 | 亚洲欧美综合另类在线卡通| 中国av一区二区三区| 国产精品久久久久久久久快鸭| 国产精品美女久久久久久2018 | 国产精品区一区二区三| 国产精品嫩草99a| 亚洲欧美日韩久久精品| 亚洲一区二区三区四区在线 | 精品一区中文字幕| 国产精品白丝jk黑袜喷水| 成人激情视频网站| 在线亚洲人成电影网站色www| 欧美日韩一本到| 日韩欧美一区中文| 中文字幕va一区二区三区| 一区二区免费在线| 琪琪一区二区三区| 成人免费毛片片v| 在线观看91精品国产入口| 日韩欧美二区三区| 国产精品久久久久久一区二区三区| 亚洲黄色av一区| 精品一区二区三区在线观看国产 | 亚洲人吸女人奶水| 日韩电影免费一区| 国产成人av电影在线播放| 欧美日韩一区二区三区四区| 日韩精品一区二区三区在线观看 | 日韩一区有码在线| 蜜桃视频第一区免费观看| 成+人+亚洲+综合天堂| 欧美一区二区在线播放| 国产精品剧情在线亚洲| 麻豆91精品视频|