Beispiel #1
0
//-------------------補助関数---------------------------------
int Next(){
	if( GetInputEvent( INP_B0 ))
		return 1;
	if( GetInputEvent( INP_B2 ))
		return 1;
	if( GetInputState( INP_B6 ))
		return 1;
	return 0;
}
/**********************************************************************
 * 函数名称: AutoPlayThreadFunction
 * 功能描述: "连播页面"的主线程函数: 用于读取输入数据
 * 输入参数: ptParentPageParams - 内含上一个页面(父页面)的参数
 * 输出参数: 无
 * 返 回 值: 无
 * 修改日期        版本号     修改人	      修改内容
 * -----------------------------------------------
 * 2013/02/08	     V1.0	  韦东山	      创建
 ***********************************************************************/
static void AutoPageRun(PT_PageParams ptParentPageParams)
{
	T_InputEvent tInputEvent;
	int iRet;
    char *pcTmp;
    
    g_bAutoPlayThreadShouldExit = 0;

    /* 获得配置值: 显示哪一个目录下的文件, 显示图片的间隔 */
    GetPageCfg(&g_tPageCfg);

    /* 如果ptParentPageParams.strCurPictureFile[0] != '\0'
     * 自动播放这个目录下的图片: ptParentPageParams.strCurPictureFile
     */
    if (ptParentPageParams->strCurPictureFile[0] != '\0')
    {
        strcpy(g_tPageCfg.strSeletedDir, ptParentPageParams->strCurPictureFile);
        pcTmp = strrchr(g_tPageCfg.strSeletedDir, '/');
        *pcTmp = '\0';        
    }
        
    /* 1. 启动一个线程来连续显示图片 */
    pthread_create(&g_tAutoPlayThreadID, NULL, AutoPlayThreadFunction, NULL);

    /* 2. 当前线程等待触摸屏输入, 先做简单点: 如果点击了触摸屏, 让线程退出 */
    while (1)
    {
        iRet = GetInputEvent(&tInputEvent);
        if (0 == iRet)
        {
            pthread_mutex_lock(&g_tAutoPlayThreadMutex);
            g_bAutoPlayThreadShouldExit = 1;   /* AutoPlayThreadFunction线程检测到这个变量为1后会退出 */
            pthread_mutex_unlock(&g_tAutoPlayThreadMutex);
            pthread_join(g_tAutoPlayThreadID, NULL);  /* 等待子线程退出 */
            return;
        }
    }

}
Beispiel #3
0
int CPlayer::StepFrame()
{
	int i;
	VECT former = m_pos;
	switch(m_state)
	{
	case 0://通常状態
		//移動処理
		if(GetInputState(INP_RIGHT) && GetRight() < SCREEN_WIDTH)
			m_pos.x += PLAYER_SPEED;
		while(CollTikei())
		{
			m_pos.x --;
			if(m_pos.x < 0 && m_muteki==0)
			{
				Damage();
				break;
			}
		}
		if(GetInputState(INP_LEFT) && GetLeft() > 0)
			m_pos.x -= PLAYER_SPEED;
		if(CollTikei())
			m_pos.x = former.x;
		if(GetInputState(INP_DOWN) && GetBottom() < SCREEN_HEIGHT)
			m_pos.y += PLAYER_SPEED;
		if(GetInputState(INP_UP) && GetTop() > 0)
			m_pos.y -= PLAYER_SPEED;
		if(CollTikei())
			m_pos.y = former.y;
		//ショット
		if(GetInputState(INP_B0))
		{
			m_shottime++;
			if(m_shottime%(8-m_power/2) == 0)
			{
				g_pResource->sndShot.Play(0);
				g_pshot.Add(new CPlayerShot(&g_pResource->imgPlayerShot, m_surasuta.GetPos()-VECT(10,5), VECT(20,0)));
				g_pshot.Add(new CPlayerShot(&g_pResource->imgPlayerShot, m_surasuta.GetPos()+VECT(-10,5), VECT(20,0)));
			}
			if(m_shottime%(10) == 0)
			{
				if(m_power>0)
				{
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot2, GetCenter()+VECT(0,5), VECT(10,3)));
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot1, GetCenter()-VECT(0,5), VECT(10,-3)));
				}
				if(m_power>3)
				{
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot2, GetCenter()+VECT(0,5), VECT(10,1.5)));
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot1, GetCenter()-VECT(0,5), VECT(10,-1.5)));
				}
				if(m_power>5)
				{
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot2, GetCenter()+VECT(0,5), VECT(10,7)));
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot1, GetCenter()-VECT(0,5), VECT(10,-7)));
				}
				if(m_power>7)
				{
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot2, GetCenter()+VECT(0,5), VECT(10,5)));
					g_pshot.Add(new CPlayerShot(&g_pResource->imgSubShot1, GetCenter()-VECT(0,5), VECT(10,-5)));
				}
			}
		}
		//無敵処理
		if(m_muteki>0)
			m_muteki--;
		//吸い込み
		if(GetInputState(INP_B1))
		{
			for(i=0; i<ITEM_NUM; ++i)
				if(g_item[i])
					g_item[i]->Pull();
			for(i=0; i<ENEMYSHOT_NUM; ++i)
				if(g_enemyShot[i])
					g_enemyShot[i]->Pull(GetCenter());
		}
		//当たり判定:アイテム
		if(m_anmtime%2)
		for(i=0; i<ITEM_NUM; ++i){
			if(g_item[i]){
				if(this->IsColl(g_item[i])){
					g_pResource->sndItem.Play(0);
					g_pScore->item ++;
					g_pScore->score += SCORE_ITEM;
					m_item++;
					if(m_item%(80+150*m_power) == 0 && m_power<10)
						m_power++;
					SAFE_DELETE(g_item[i]);
					break;
				}
			}
		}
		//当たり判定:敵
		if(m_muteki==0){
			for(i=0; i<ENEMY_NUM; ++i){
				if(g_enemy[i]&&g_enemy[i]->GetHP()!=20){
					if(this->IsColl2(g_enemy[i])){
						Damage();
						break;
					}
				}
			}
		}
		//当たり判定:敵弾
		if(m_muteki==0){
			for(i=0; i<ENEMYSHOT_NUM; ++i){
				if(g_enemyShot[i]){
					if(this->IsColl2(g_enemyShot[i])){
						Damage();
						break;
					}
				}
			}
		}
		//アニメ処理
		m_anmtime++;
		if(m_anmtime==PLAYER_ANMCYCLE)
			m_anmtime=0;
		//描画
		//本体(無敵でない・無敵中点滅オン・ポーズ寸前)
		if(m_muteki==0||m_anmtime%5||GetInputEvent(INP_B3))
			m_pimg->Draw2(100, m_pos.x, m_pos.y, m_anmtime*3/PLAYER_ANMCYCLE, GetInputState(INP_LEFT));
		//スラスタ
		if(GetInputState(INP_B0) && GetInputState(INP_B1))	//吸い込み+ショット
			m_surasuta.StepFrame(m_pos,3);
		else if(GetInputState(INP_B0))//ショット(変形
			m_surasuta.StepFrame(m_pos,2);
		else if(GetInputState(INP_B1))//吸い込み
			m_surasuta.StepFrame(m_pos,1);
		else//なんもなし
			m_surasuta.StepFrame(m_pos,0);
		break;
	case 1://出現モーション中
		m_anmtime++;
		m_pos.x += (30.0-m_anmtime)/5;
		m_pimg->Draw2(100, m_pos);					//本体
		m_surasuta.StepFrame(m_pos,4);
		if(m_anmtime > 40)
		{
			m_anmtime = 0;
			m_muteki = PLAYER_MUTEKI;
			m_state = 0;//通常状態に戻す
		}
		break;
	case 2://死亡モーション(墜落)中
		m_anmtime++;
		m_pos.y += (double)m_anmtime/5;
		m_pimg->Draw2(100, m_pos, 0, 2);
		m_surasuta.StepFrame(m_pos,4);
		if(m_anmtime > 40)
		{
			//ゲームオーバーチェックは墜落が終わってから
			if(m_zanki<0)
				return 0;
			m_pos = VECT(-40,105);
			m_anmtime = 0;
			m_state = 1;
		}
		break;
	}
	//残機数描画
	for(i=0;i<m_zanki;++i)
		g_pResource->imgZanki.Draw2(70,130+i*20,215);
	return 1;
}
Beispiel #4
0
/* ./show_file [-s Size] [-f freetype_font_file] [-h HZK] <text_file> */
int main(int argc, char **argv)
{
	int iError;
	unsigned int dwFontSize = 16;
	char acHzkFile[128];
	char acFreetypeFile[128];
	char acTextFile[128];

	char acDisplay[128];

	char cOpr;
	int bList = 0;

	T_InputEvent tInputEvent;

	acHzkFile[0]  = '\0';
	acFreetypeFile[0] = '\0';
	acTextFile[0] = '\0';

	strcpy(acDisplay, "fb");
	
	while ((iError = getopt(argc, argv, "ls:f:h:d:")) != -1)
	{
		switch(iError)
		{
			case 'l':
			{
				  bList = 1;
				  break;
			}
			case 's':
			{
				  dwFontSize = strtoul(optarg, NULL, 0);
				  break;
			}
			case 'f':
			{
				  strncpy(acFreetypeFile, optarg, 128);
				  acFreetypeFile[127] = '\0';
				  break;
			}			
			case 'h':
			{
					strncpy(acHzkFile, optarg, 128);
					acHzkFile[127] = '\0';
					break;
			}
			case 'd':
			{
				strncpy(acDisplay, optarg, 128);
				acDisplay[127] = '\0';
				break;
			}
			default:
			{
					printf("Usage: %s [-s Size] [-d display] [-f font_file] [-h HZK] <text_file>\n", argv[0]);
					printf("Usage: %s -l\n", argv[0]);
					return -1;
					break;
			}
		}
	}

	if (!bList && (optind >= argc))
	{
		printf("Usage: %s [-s Size] [-d display] [-f font_file] [-h HZK] <text_file>\n", argv[0]);
		printf("Usage: %s -l\n", argv[0]);
		return -1;
	}
		
	iError = DisplayInit();
	if (iError)
	{
		printf("DisplayInit error!\n");
		return -1;
	}

	iError = FontsInit();
	if (iError)
	{
		printf("FontsInit error!\n");
		return -1;
	}

	iError = EncodingInit();
	if (iError)
	{
		printf("EncodingInit error!\n");
		return -1;
	}


	iError = InputInit();
	if (iError)
	{
		printf("InputInit error!\n");
		return -1;
	}


	if (bList)
	{
		printf("supported display:\n");
		ShowDispOpr();

		printf("supported font:\n");
		ShowFontOpr();

		printf("supported encoding:\n");
		ShowEncodingOpr();

		printf("supported input:\n");
		ShowInputOpr();
		
		return 0;
	}

	strncpy(acTextFile, argv[optind], 128);
	acTextFile[127] = '\0';
		
	iError = OpenTextFile(acTextFile);
	if (iError)
	{
		printf("OpenTextFile error!\n");
		return -1;
	}

	iError = SetTextDetail(acHzkFile, acFreetypeFile, dwFontSize);
	if (iError)
	{
		printf("SetTextDetail error!\n");
		return -1;
	}

	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

	iError = SelectAndInitDisplay(acDisplay);
	if (iError)
	{
		printf("SelectAndInitDisplay error!\n");
		return -1;
	}

	iError = AllInputDevicesInit();
	if (iError)
	{
		DBG_PRINTF("Error AllInputDevicesInit\n");
		return -1;
	}
	
	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
	iError = ShowNextPage();
	DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
	if (iError)
	{
		printf("Error to show first page\n");
		return -1;
	}

	printf("Enter 'n' to show next page, 'u' to show previous page, 'q' to exit: ");

	while (1)
	{

		if (0 == GetInputEvent(&tInputEvent))
		{
			if (tInputEvent.iVal == INPUT_VALUE_DOWN)
			{
				ShowNextPage();
			}
			else if (tInputEvent.iVal == INPUT_VALUE_UP)
			{
				ShowPrePage();			
			}
			else if (tInputEvent.iVal == INPUT_VALUE_EXIT)
			{
				return 0;
			}
		}
	}
	return 0;
}