Пример #1
0
int main()
{	
	system("clear");

	for(int i=0;i<2;i++){
		map_init(&gScreenBuffer[i]);
		map_new(&gScreenBuffer[i],35,16);
	}

	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien.dat");

	map_init(&gPlasmaModel);
	map_load(&gPlasmaModel,"plasma.dat");

	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien.dat");
	
	double TablePosition[] = {0,6.0};

	for(int i=0;i<2;i++)
	{
		_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
		alien_init(pObj,&gAlienModel);
		pObj->m_fXpos = 0;:
		pObj->m_fYpos = 2;
		pObj->m_nFSM = 1;
	}
Пример #2
0
int main()
{
	_S_MAP_OBJECT screenBuf;
	map_init(&screenBuf);
	map_new(&screenBuf,16,16);

	map_PutTile(&screenBuf,6,5,4);
	map_PutTile(&screenBuf,5,5,4);
	map_PutTile(&screenBuf,4,5,4);
	map_PutTile(&screenBuf,6,6,4);
	map_PutTile(&screenBuf,5,6,4);
	map_PutTile(&screenBuf,4,6,4);
	map_PutTile(&screenBuf,6,7,4);
	map_PutTile(&screenBuf,5,7,4);
	map_PutTile(&screenBuf,4,7,4);

	_S_MAP_OBJECT humanObj;
	map_init(&humanObj);
	map_load(&humanObj,"human.dat");
	puts("\r\n-------------------------");
	map_drawTile_trn(&humanObj,5,5,&screenBuf);
	map_dump(&screenBuf,Default_Tilepalete);

	


	//map_dump(&carObj,Tilepalette);
	//map_dump(&screenBuffer,Tilepalette);


	return 0;
}
Пример #3
0
Rock_Sprite *set_level_rocco(Rock_Scroll_Map *map)
{
    map_load(map);
    sprites_set_objects(map);

    return sprite_get_object(map->rocco_index);
}
Пример #4
0
//初期化
void init(void){

	PG_Load();//自機のグラ読み込み
	map_load();//マップの読み込み


	//ミクの初期位置
	miku.x = 320; miku.y = 240;
	miku.r_haba =32 ; miku.tate = 64;
	miku.haba = 48;
	miku.muki = 0;//初期の向き 下向き


	//スピード
	miku.spd = 4; miku.n_spd = 3;

	//アニメーション
	int aloop=10;//デフォルトアニメループカウンタ
	miku.anime_c = aloop;
	

	//////////////////////////




}
Пример #5
0
int cl_change_map(char *map_name, int gamemode)
{

    client.screenpos.x = 0;
    client.screenpos.y = 0;
    client.health = 0; /* To make sure statusbar updates */
    client.map_target_active = 0;

    draw_load_screen(client.loadscreen);

    /* Load the map */
    if( !(map = map_load(client.map, L_BASE|L_OBJECT|L_TOPLEVEL|L_TEXT, MAP))){
	printf("** ERROR LOADING MAP %s! **\n", client.map);
	cl_network_disconnect();
	client.state = MENU; /* Go back to menu */
	return 0;
    }

    /* Load tileset and store pixmap id's in tileset tables  */
    maptext_init(map->text_root);
    tileset_load(map->tileset);
    preload_entities(map_name, gamemode);

    client.state = GAME_JOIN;  /* Status of JOINING on the server */
    cl_netmsg_send_ready();    /* Request to be ACTIVE on the server */
    cl_net_finish();

    /* Clear the map buffer if map doesn't take up the entire buffer as there
       will still be stuff there from the last map */
    if( map->width < client.view_w || map->height < client.view_h )
	clear_area(win.map_buf, 0, 0, client.view_w, client.view_h, "black");
    return 1;

}
Пример #6
0
int main(int argc, char** argv)
{
    map_config_t config;
    dataset_t* dataset;
    map_t* map;

    configure(&config, argc, argv);

    if(config.ot == OT_CREATE)
    {
        dataset = dataset_load(config.infile);
        if(dataset)
        {
            map = map_create(dataset, &config.level);
            if(config.print)
                map_print(map);
            map_save(config.outfile, map);
            map_destroy(map);
        }
        dataset_destroy(&dataset);
    }
    else if(config.ot == OT_READ)
    {
        map = map_load(config.infile);
        if(config.print)
            map_print(map);
        map_destroy(map);
    }
    return 0;
}
Пример #7
0
int main()
{
	system("clear");

	for(int i=0;i<2;i++) {
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,16);
	
	
	}

	map_init(&gPlayer);
	map_load(&gPlayer,"plane1.dat");
	
	Plane_init(&gPlayerObject,&gPlayer,17,10);
	
	set_conio_terminal_mode();
	acc_tick = last_tick = 0;

	while(bLoop) {

		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~\r");
			}
			//gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch);
			gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch);
		}

		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
			
			gPlayerObject.fpDraw(&gPlayerObject,&gScreenBuf[1]);
			//Plane_Draw(&gPlayerObject,&gScreenBuf[1]);

			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}
	}


	return 0;
}
Пример #8
0
Файл: game.c Проект: chaem/test
void gameStart_Play()
{
	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,22);

	}

	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien.dat");

	map_init(&gBulletModel);
	map_load(&gBulletModel,"bullet1.dat");

	map_init(&gPlaneModel);
	map_load(&gPlaneModel,"plane1.dat");

	map_init(&gLaserModel);
	map_load(&gLaserModel,"plasma.dat");

	alien_init(&gTestAlienObject,&gAlienModel);
	bullet_init(&gTestBulletObject,0,0,0,&gBulletModel);
	Plane_init(&gPlaneObject,&gPlaneModel,0,0);
	laser_init(&gLaserObject,0,0,0,&gLaserModel);

	gTestAlienObject.m_pBullet = &gTestBulletObject;
	
	gPlaneObject.m_fXpos = 17;
	gPlaneObject.m_fYpos = 20;
	gPlaneObject.m_nFSM = 1;
	gTestAlienObject.m_fXpos = -10;
	gTestAlienObject.m_fYpos = 1;
	gTestAlienObject.m_nFSM = 1;

    system("clear");

}
Пример #9
0
int main()
{
	char TilePalete[] = {'.','#'.'@'};
	_S_MAP_OBJECT carObj;
	map_init(&carObj);
	
	map_load(&carObj,"car.dat");
	puts("-----load complete----------------")

	//system("clear");
	//
	map_dump(&carObj,TilePalete);
	
	return 0;
}
Пример #10
0
Файл: ex4.c Проект: chaem/test
int main()
{
	char Tilepalette[] = {'.','#','@'};
	_S_MAP_OBJECT screenBuffer;
	map_init(&screenBuffer);
	map_new(&screenBuffer,16,16);

	_S_MAP_OBJECT carObj;map_init(&carObj);map_load(&carObj,"car.dat");

	puts("\r\n----------------");

	{
		_S_MAP_OBJECT *pObj = &carObj;
		
		
		for(int iy=0;iy < pObj->m_header.m_nHeight;iy++) {
			for(int ix = 0; ix < pObj->m_header.m_nWidth;ix++) {
				map_PutTile(&screenBuffer,ix + 5,iy + 5,
						pObj->m_pBuf[iy*pObj->m_header.m_nWidth + ix]);
			
			}
		
		}
		

		for(int iy=0;iy < pObj->m_header.m_nHeight;iy++) {
			for(int ix = 0; ix < pObj->m_header.m_nWidth;ix++) {
				map_PutTile(&screenBuffer,iy+10,ix+10,
						pObj->m_pBuf[iy*pObj->m_header.m_nWidth + ix]);
		
			}
		}
	
	}

	
	//map_dump(&carObj,Tilepalette);

	map_dump(&screenBuffer,Tilepalette);

	return 0;
	
}
Пример #11
0
void gamestate(GAMESTATE state) {
	DARNIT_KEYS k;
	switch(_gamestate) {
		case GAMESTATE_GAME:
			if(state!=GAMESTATE_PAUSE)
				map_cleanup();
		case GAMESTATE_MENU:
			d_keymapping_set(game_keymap);
			break;
		default:
			break;
	}
	switch(state) {
		case GAMESTATE_MENU:
			if(platform.platform&DARNIT_PLATFORM_HANDHELD)
				d_keymapping_set(menu_keymap_handheld);
			else
				d_keymapping_set(menu_keymap_desktop);
			break;
		case GAMESTATE_GAME:
			memset(&k, 0xFF, sizeof(DARNIT_KEYS));
			d_keys_set(k);
			if(_gamestate==GAMESTATE_PAUSE)
				break;
			_gamestate=state;
			map_load(0);
			score = 0;
			break;
		case GAMESTATE_HIGHSCORE:
		case GAMESTATE_INSTRUCTIONS:
		case GAMESTATE_GAMEOVER:
		case GAMESTATE_PAUSE:
			memset(&k, 0xFF, sizeof(DARNIT_KEYS));
			d_keys_set(k);
			break;
		default:
			break;
	}
	_gamestate=state;
}
Пример #12
0
int main(int argc, char* args[]) {
  if (init() == FALSE) {
    return 1;
  }
  if (load_files() == FALSE) {
    return 1;
  }

  message = TTF_RenderText_Solid(font, window_footer_str, font_color);
  if (message == NULL) {
    return 1;
  }

  Uint32 frameStart = 0;
  int rightMouseButtonDown = FALSE;
  int quit = FALSE;
  while (quit == FALSE) {
    frameStart = SDL_GetTicks();

    while (SDL_PollEvent(&event)) {
      if (event.type == SDL_MOUSEBUTTONDOWN) {
        if (event.button.button == SDL_BUTTON_RIGHT)
          rightMouseButtonDown = TRUE;
        else if (event.button.button == SDL_BUTTON_LEFT)
          map_select_tile(event.button.x, event.button.y);
      }
      if (event.type == SDL_MOUSEBUTTONUP) {
        if (event.button.button == SDL_BUTTON_RIGHT) {
          rightMouseButtonDown = FALSE;
          map_move_reset();
        }
      }
      if (event.type == SDL_MOUSEMOTION) {
        if (rightMouseButtonDown == TRUE) {
          map_move(event.button.x, event.button.y);
        }
      }
      if (event.type == SDL_KEYDOWN) {
        switch (event.key.keysym.sym) {
          case SDLK_g: map_toggle_grid(); break;
          case SDLK_PLUS: map_resize(1); break;
          case SDLK_MINUS: map_resize(-1); break;
          case SDLK_l: map_load(); break;
          default: ;
        }
      }
      if (event.type == SDL_QUIT) {
        quit = TRUE;
      }
    }

    SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0));
    map_show();
    apply_surface(
      screen_width - message->w, screen_height - message->h, message, screen
    );

    if (SDL_Flip(screen) == -1) {
      return 1;
    }

    if ((SDL_GetTicks() - frameStart) < (1000 / FPS)) {
      SDL_Delay((1000 / FPS) - (SDL_GetTicks() - frameStart));
    }
  }

  clean_up();
  return 0;
}
Пример #13
0
int main()
{
	//srand((float)time(NULL)); //랜덤 함수
	
	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],40,25);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane3.dat");

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma1.dat");

	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien1.dat");

	map_init(&gMissileModel);
	map_load(&gMissileModel,"missile.dat");

	map_init(&gFishModel);
	map_load(&gFishModel,"fish1.dat");

//비행기 init
	Plane_init(&gPlayerObject,&gPlayerModel,20,22);

	gPlayerObject.m_nFSM = 1;
	
//에일리언 총알 init
	for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++)
	{
		bullet_init(&gBulletObject[i],0,0,0,&gBulletModel);
		
	}

//비행기 총알 init
	for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++)
	{
		bullet_init(&gMissileObject[i],0,0,0,&gMissileModel);
		
	}

//에일리언 갯수와 위치
	double TablePosition1[] = {0,6.0,30.0,13.0};

	for(int i=0;i<4;i++)
	{
	
		_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
		alien_init(pObj,&gAlienModel);
		pObj->m_fXpos = TablePosition1[i];
		pObj->m_fYpos = 2;
		pObj->m_nFSM = 1;
		
		gAlienObjects[i].m_pBullet = &gBulletObject[i];
	}

//물고기 init
	//srand(time(NULL));
	double TablePosition2[] = {6.0,19.0,31.0};
	//double TablePosition3[] = {5.0,15.0};
	
	for(int i=0;i<3;i++) 
	{
		_S_FISH_OBJECT *pObj = &gFishObject[i];
		Fish_init(pObj,&gFishModel);
		pObj->m_fXpos = TablePosition2[i]; //rand() % 20; 랜덤값을 불러온다
		pObj->m_fYpos = 2;
		pObj->m_nFSM = 2;
		
		
	}
	

	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	system("clear");

//플레이상태로 만들기
	gPlayerObject.m_nFSM = 1;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			} //비행기 총알
			else if(ch=='j') {
				for(int i=0;i<sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT);i++) {
					_S_BULLET_OBJECT *pObj = &gMissileObject[i];
					
						if(pObj->m_nFSM == 0) { //슬립상태라면....
							gMissileObject[i].pfFire(pObj,gPlayerObject.m_fXpos,gPlayerObject.m_fYpos,
							10,0,-1,5.0);
							break;
					}
				}
			}		
	
	//비행기apply
			gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);
		}
	
	//비행기총알 apply
		for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++)
		{	
			_S_BULLET_OBJECT *pObj = &gMissileObject[i];
			pObj->pfApply(pObj,delta_tick);
		}	
	//에일리언총알 apply	
		for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++)
		{	
			_S_BULLET_OBJECT *pObj = &gBulletObject[i];
			pObj->pfApply(pObj,delta_tick);
		}	

	//에일리언apply
		for(int i=0;i<4;i++)
	
		{		
			_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
			pObj->pfApply(pObj,delta_tick);
		}	
	
	//물고기 apply	
	for(int i=0;i<3;i++)
	
		{		
			_S_FISH_OBJECT *pObj = &gFishObject[i];
			pObj->pfApply(pObj,delta_tick);
		}	
	
	//충돌-에일리언총알에 비행기가 맞을때
		for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++)
		{
			_S_BULLET_OBJECT *pObj = &gBulletObject[i];
			
				if(pObj->m_nFSM != 0) {
				
					double dist = getDistance_1(pObj,&gPlayerObject); 

						if(dist < 0.25) {  
							pObj->m_nFSM = 0;
							gPlayerObject.m_nFSM = 0;
							printf("---------------GAME OVER----------------\r\n");
							bLoop = 0;
				}

			}
		}
	
	//충돌-에일리언이 비행기 총알에 맞을때
		for(int i=0;i< sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT) ;i++)
		{
			_S_BULLET_OBJECT *pObj = &gMissileObject[i];
			
				if(pObj->m_nFSM != 0) {
				
					double dist = getDistance_2(pObj,&gAlienObjects[i]); 
		
						if(dist < 4.0) {  
							gAlienObjects[i].m_nFSM = 0;	
							//printf("---------------GAME WIN----------------\r\n");
				}
			}
		}
	
	//충돌-물고기에 비행기가 맞을때
		for(int i=0;i<2;i++)
		{
			_S_FISH_OBJECT *pObj = &gFishObject[i];
			
				if(pObj->m_nFSM != 0) {
				
					double dist = getDistance_3(pObj,&gPlayerObject); 

						if(dist < 1.0) {  
							//pObj->m_nFSM = 0;
							gPlayerObject.m_nFSM = 0;
							printf("---------------GAME OVER----------------\r\n");
							bLoop = 0;
				}

			}
		}
		
		//타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			
            gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
		
		//비행기draw	
			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]); 

		//에일리언 draw	
            for(int i=0;i<4;i++)	
			{
				_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);

			}
		
		//에일리언 총알 draw
			for(int i=0;i< sizeof(gBulletObject)/sizeof(_S_BULLET_OBJECT) ;i++)
			{	
				_S_BULLET_OBJECT *pObj = &gBulletObject[i];
			 	pObj->pfDraw(pObj,&gScreenBuf[1]);
			}	
		//비행기 총알 draw
			for(int i=0;i<sizeof(gMissileObject)/sizeof(_S_BULLET_OBJECT);i++) 
			{
					_S_BULLET_OBJECT *pObj = &gMissileObject[i];		
					pObj->pfDraw(pObj,&gScreenBuf[1]);
			}
		//물고기 draw
			 for(int i=0;i<3;i++)	
			{
				_S_FISH_OBJECT *pObj = &gFishObject[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);

			}
	
			map_dump(&gScreenBuf[1],Default_Tilepalete);
			
			puts("move : w,a,s,d \r");
			puts("quit : q \r");
			
			acc_tick = 0;
		}

	}

	return 0;

}
Пример #14
0
int main()
{
    set_conio_terminal_mode();
	acc_tick=last_tick=0;
	
    system("clear");

	for(int i =0;i<2;i++) //총알
	{
		map_init(&gScreenBuffer[i]);
		map_new(&gScreenBuffer[i],35,16);
	}

	
	map_init(&gPlayer);
	map_load(&gPlayer,"plane1.dat");

	Plane_init(&gPlayerObject,&gPlayer,17,10);

	double target_x,target_y;
	double center_x,center_y;
	center_x = 14;
	center_y = 7;
	
	target_x = 14;
	target_y = 3;
	
	double angle = 0;
	
	
	
	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		
		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
			//Plane_Apply(&gPlayerObject,delta_tick,ch);
            
            gPlayerObject.fpApply(&gPlayerObject,delta_tick,ch);
        }
         
         //apply 위치

		angle += (delta_tick * 45);
		double tx,ty;
		double rad = angle/180.0 * 3.141592;
		tx = (target_x - center_x) *cos(rad) - (target_y - center_y) * sin(rad);
		ty = (target_x - center_x) *sin(rad) - (target_y - center_y) * cos(rad);
		tx += center_x;
		ty += center_y;
		

        //타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			gotoxy(0,0);
			//map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
			map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]);
			map_PutTile(&gScreenBuffer[1],tx,ty,2); 
            map_PutTile(&gScreenBuffer[1],center_x,center_y,5); 
			map_PutTile(&gScreenBuffer[1],target_x,target_y,1) ;
			
			gPlayerObject.fpDraw(&gPlayerObject,&gScreenBuffer[1]);

            //gotoxy(0,0);
			//Plane_Draw(&gPlayerObject,&gScreenBuf[1]);

			//map_dump(&gScreenBuf[1],Default_Tilepalete);
            map_dump(&gScreenBuffer[1],Default_Tilepalete);
            
			acc_tick = 0;
		}

	}

	
	return 0;

}
Пример #15
0
int main()
{
	{
		int err = pthread_create(&tid,NULL,&InputThread,NULL);
		if(err != 0) {
			printf("err : %s \r\n",strerror(err));
		}
		else {
			printf("thread create success \r\n");
		}
	}

	struct sockaddr_in server;

	socket_desc = socket(AF_INET,SOCK_STREAM,0);
	if(socket_desc == -1)
	{
		puts("err create socket");
	}
	server.sin_addr.s_addr = inet_addr("127.0.0.1");
	server.sin_family = AF_INET;
	server.sin_port = htons(8080);
	if(connect(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) {
		puts("connect error");
		return 1;
	}

	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,16);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane.dat");

	Plane_init(&gPlayerObject,&gPlayerModel,15,10);
	gPlayerObject.m_nFSM = 1;
	system("clear");

	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
		
			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]);
			
			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;

}
Пример #16
0
int main()
{
	system("clear");

	for(int i=0;i<2;i++) {
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,16);
	
	
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane1.dat");

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma.dat");
	
	Plane_init(&gPlayerObject,&gPlayerModel,17,10);
	bullet_init(&gTestBullet,0,0,0,&gBulletModel);

	set_conio_terminal_mode();
	acc_tick = last_tick = 0;

	//플레이상태로 만들기
	gPlayerObject.m_nFSM = 1;
	
	
	while(bLoop) {

		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~\r");
			}
			else if(ch == 'j') {
				
				double bullet_pos_x = 0;
				double bullet_pos_y = 0;

				double target_pos_x = gPlayerObject.m_fXpos;
				double target_pos_y = gPlayerObject.m_fYpos;

				double vx = target_pos_x - bullet_pos_x;
				double vy = target_pos_y - bullet_pos_y;
				double dist = sqrt(vx*vx+vy*vy);
				
				vx /= dist;
				vy /= dist;
				

				gTestBullet.pfFire(&gTestBullet,bullet_pos_x,bullet_pos_y,10.0,vx,vy,10);

			}

			gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);
		}
		gTestBullet.pfApply(&gTestBullet,delta_tick);

		if(gTestBullet.m_nFSM != 0) {
			double bullet_pos_x = gTestBullet.m_fXpos;
			double bullet_pos_y = gTestBullet.m_fYpos;

			double target_pos_x = gPlayerObject.m_fXpos;
			double target_pos_y = gPlayerObject.m_fYpos;

			double vx = target_pos_x - bullet_pos_x;
			double vy = target_pos_y - bullet_pos_y;
			double dist = sqrt(vx*vx+vy*vy);

			if(dist < 0.25) {
				gTestBullet.m_nFSM = 0;
				gPlayerObject.m_nFSM = 0;
	
			}

		}



		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]);
			gTestBullet.pfDraw(&gTestBullet,&gScreenBuf[1]);
				
			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}
	}


	return 0;
}
Пример #17
0
/* TODO: comment this more. Sorry --lk */
void map_editor_input(state_stack* stack, SDL_Event *sdlEvent) {
	state_desc *top = (state_desc*) table_ind(stack, stack->m_len-1);
	map_editor *mapEditor = (map_editor*) top->m_pData;
	
	if (sdlEvent->type == SDL_QUIT) {
		// TODO: Check for unsaved changes
		state_stack_kill(stack);
	}
	
	// Handle keys which do the same thing no matter what the current state is.
	if (_editor_handle_generic_event(mapEditor, sdlEvent)) { return; }

	// We may as well always check for this, because why not?
	if (sdlEvent->type == SDL_MOUSEMOTION) {
		mapEditor->m_iMouseX = sdlEvent->motion.x;
		mapEditor->m_iMouseY = sdlEvent->motion.y;
	}

	switch (mapEditor->m_iMapEditorState) {
		case MAPEDITOR_EDIT:
			if  (sdlEvent->type == SDL_KEYDOWN) {
				// TODO: bounds checking.
				if (sdlEvent->key.keysym.sym == SDLK_LEFT) {
					mapEditor->m_iActiveTile--;
				}
				if (sdlEvent->key.keysym.sym == SDLK_RIGHT) {
					mapEditor->m_iActiveTile++;
				}
			}

			if (sdlEvent->type == SDL_MOUSEBUTTONDOWN) { // Drag map on right click & hold
				if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) {
					mapEditor->m_bDragMap = true;
				}
			}

			if (sdlEvent->type == SDL_MOUSEBUTTONUP) {
				if (sdlEvent->button.button == 1) { // place tile
					rect tempSrc = _tile_rect(mapEditor->m_iActiveTile);
					rect tempDst = {((mapEditor->m_iMouseX + g_map.m_rectView.x) / 32) * 32, ((mapEditor->m_iMouseY + g_map.m_rectView.y) / 32) * 32, 32, 32};
					g_map.m_map[(mapEditor->m_iMouseX + g_map.m_rectView.x) / 32][(mapEditor->m_iMouseY + g_map.m_rectView.y) / 32].m_iTileID = mapEditor->m_iActiveTile;
					image_draw_to(g_map.m_imageMap, g_map.m_imageTiles, &tempSrc, &tempDst);
					map_draw_view(); // Only redraw what's currently visible (unless the map maker is psychic the current view is what changed)
					if (mapEditor->m_bGrid == true) {
						map_draw_grid_view();
					}
				}
				if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { // stop dragging map
					mapEditor->m_bDragMap = false;
				}
			}

			if (sdlEvent->type == SDL_MOUSEMOTION) {
				if (mapEditor->m_bDragMap == true) {
					map_move(sdlEvent->motion.xrel, sdlEvent->motion.yrel);
				}
			}
			break;

		/* Rename map. */
		case MAPEDITOR_NAME:
			if (util_textInput(sdlEvent, &g_map.m_cName) == 1) {
				mapEditor->m_iMapEditorState = MAPEDITOR_EDIT;
			}
			break;

		/* Load map. */
		case MAPEDITOR_LOAD:
			if (util_textInput(sdlEvent, &g_map.m_cName) == 1) {
				map_load(g_map.m_cName);
				map_draw();
				mapEditor->m_iMapEditorState = MAPEDITOR_EDIT;
			}
			break;

		case MAPEDITOR_TILE:
			// Draw tilesheet
			// Input based on tile sheet, not map.
			// Choose tile on click
			// g_iMapEditorState = MAPEDITOR_EDIT
			break;

		/* collision editor. */
		case MAPEDITOR_WALK:
			if  (sdlEvent->type == SDL_KEYDOWN) {
				if (sdlEvent->key.keysym.sym == SDLK_LEFT) {
					if (mapEditor->m_cMapWalk > 0) {
						mapEditor->m_cMapWalk--;
					}
				}
				if (sdlEvent->key.keysym.sym == SDLK_RIGHT) {
					if (mapEditor->m_cMapWalk < WALK_MAX) {
						mapEditor->m_cMapWalk++;
					}
				}
			}

			if (sdlEvent->type == SDL_MOUSEBUTTONDOWN) { // Drag map on right click & hold
				if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) {
					mapEditor->m_bDragMap = true;
				}
			}
			if (sdlEvent->type == SDL_MOUSEBUTTONUP) {
				if (sdlEvent->button.button == 1) { // place walk
					g_map.m_map[(mapEditor->m_iMouseX + g_map.m_rectView.x) / 32][(mapEditor->m_iMouseY + g_map.m_rectView.y) / 32].m_cWalk = mapEditor->m_cMapWalk;
					map_draw_view(); // Only redraw what's currently visible
					map_editor_draw_walk_view();
					if (mapEditor->m_bGrid == true) {
						map_draw_grid_view();
					}
				}
				if (sdlEvent->button.button == 2 || sdlEvent->button.button == 3) { // stop dragging map
					mapEditor->m_bDragMap = false;
				}
			}

			if (sdlEvent->type == SDL_MOUSEMOTION) {
				if (mapEditor->m_bDragMap == true) {
					map_move(sdlEvent->motion.xrel, sdlEvent->motion.yrel);
				}
			}
			break;
		default:
			break;
	}

	return;
}
Пример #18
0
int main()
{
	system("clear");

	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,30);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane5.dat");


	map_init(&gBulletModel);
	map_load(&gBulletModel,"target5.dat");


	Plane_init(&gPlayerObject,&gPlayerModel,17,24);
	bullet_init(&gTestBullet,0,0,0,&gBulletModel);

	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	gPlayerObject.m_nFSM = 1;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("Good bye~ \r");
			}
			else if (ch == 'j') {

				double vx,vy;
				gTestBullet.m_fXpos = 0;
				gTestBullet.m_fYpos = 0;
				getDirection(&gTestBullet,&gPlayerObject,&vx,&vy);
				gTestBullet.pfFire(&gTestBullet,
				gTestBullet.m_fXpos,
				gTestBullet.m_fYpos,
				10,vx,vy,10);
			}

			gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);
		}

		gTestBullet.pfApply(&gTestBullet,delta_tick);

		if(gTestBullet.m_nFSM != 0)	{
	
			double dist = getDistance(&gTestBullet,&gPlayerObject);

			if(dist < 2.0) {
				gTestBullet.m_nFSM = 0;
				gPlayerObject.m_nFSM = 0;
			}

		}


		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);

			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]);
			gTestBullet.pfDraw(&gTestBullet,&gScreenBuf[1]);	

			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}
	}

	return 0;
}
Пример #19
0
int main()
{
	set_conio_terminal_mode();
	acc_tick = last_tick = 0;

	for(int i=0;i<2;i++) {
		map_init(&gScreenBuffer[i]);
		map_new(&gScreenBuffer[i],35,15);

	}

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma.dat");
	bullet_init(&gBulletObject,0,0,0,&gBulletModel);
	
	system("clear");

	while(bLoop) {

		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~\r");
			}
			else if(ch == 'j') {
				double vx,vy,c;
				vx = 1.0;
				vy = 1.0;
				c = sqrt(vx*vx + vy*vy);
				vx /= c; vy /= c;

				bullet_fire(&gBulletObject,17,7,1.0,vx,vy,10.0);

			}

		}


		//apply 위치
		bullet_apply(&gBulletObject,delta_tick);

		
		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]);
			bullet_draw(&gBulletObject,&gScreenBuffer[1]);
			gotoxy(0,0);
			map_dump(&gScreenBuffer[1],Default_Tilepalete);
			acc_tick = 0;
		}
	}


	return 0;
}
Пример #20
0
int main()
{
	int bLoop = 1;

	MapObject.m_header.m_nSkima = 1;
	MapObject.m_pBuf = NULL;
	char TilePalette[] = {'.','#','@','%'};

	while(bLoop)
	{
		char szCmd[32];
		gets(szCmd);
		char *pTemp = strtok(szCmd," ");
		if(!strcmp(pTemp,"exit")) {
			bLoop = 0;
			if ( MapObject.m_pBuf ) {
				free(MapObject.m_pBuf);
			}
		}

		else if(!strcmp(pTemp,"dump")) {
			map_dump( &MapObject,TilePalette);
		}
		else if(!strcmp(pTemp,"new")) {
			// new 8 4
			int nWidth = atoi(strtok(NULL," "));
			int nHeight = atoi(strtok(NULL," "));
			map_new( &MapObject,nWidth,nHeight);
		}
		else if(!strcmp(pTemp,"put")) {
			//put 1 2 1 (x y tile_index)
			int x,y,tile_index;
			x = atoi(strtok(NULL," "));
			y = atoi(strtok(NULL," "));
			tile_index = atoi(strtok(NULL," "));
			//MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + x ] = tile_index;
			map_PutTile(&MapObject,x,y,tile_index);
		}
		else if(!strcmp(pTemp,"hline")) {
			//hline 1 1 (x tile_index)
			int xpos, tile_index;
			xpos = atoi(strtok(NULL," "));
			tile_index = atoi(strtok(NULL," "));

			for(int iy=0;iy<MapObject.m_header.m_nHeight;iy++){
				MapObject.m_pBuf[ iy*MapObject.m_header.m_nWidth + xpos ] = tile_index;
			}
		}
		else if(!strcmp(pTemp,"vline")) {
			int ypos, tile_index;
			ypos = atoi(strtok(NULL," "));
			tile_index = atoi(strtok(NULL," "));

			for(int ix=0;ix<MapObject.m_header.m_nWidth;ix++) {
				MapObject.m_pBuf[ ix + ypos*MapObject.m_header.m_nWidth ] = tile_index;
			}
		}
		else if(!strcmp(pTemp,"save")) {
			//save filename
			char *pTemp = strtok(NULL," ");
			map_save(&MapObject,pTemp);
			puts("Save OK");
		}
		else if(!strcmp(pTemp,"load")) {
			//load filename
			char *pTemp = strtok(NULL," ");
			map_load(&MapObject,pTemp);
			puts("Load OK");	
		}
		else if(!strcmp(pTemp,"tridraw_1")) {
			// tridraw_1 1(tile index)
			
			int nTileIndex = atoi(strtok(NULL," "));
			int nHeight = MapObject.m_header.m_nHeight;
			int nWidth = MapObject.m_header.m_nWidth;
					
			for(int iy=0;iy<nHeight;iy++) {
				for(int ix=0;(ix<iy) && (ix<nWidth);ix++) {
					MapObject.m_pBuf[ iy*nWidth +ix ]=nTileIndex;
				}
			}

		}

		
		else if(!strcmp(pTemp,"draw_cross")) {
			//draw_cross 1 2 1
			int x,y,tile_index;
			x = atoi(strtok(NULL," "));
			y = atoi(strtok(NULL," "));
			tile_index = atoi(strtok(NULL," "));
			
			MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + x ] = tile_index;
			MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + (x+1) ] = tile_index;
			MapObject.m_pBuf[ y*MapObject.m_header.m_nWidth + (x-1) ] = tile_index;
			MapObject.m_pBuf[ (y-1)*MapObject.m_header.m_nWidth + x ] = tile_index;
			MapObject.m_pBuf[ (y+1)*MapObject.m_header.m_nWidth + x ] = tile_index;






		}



	}

	return 0;
}
Пример #21
0
int main(int argc, char *argv[])
{
	if (argc < 2) {
		gnPlayerIndex = 0;
	}
	else {
		gnPlayerIndex = atoi(argv[1]);
	}
	printf("ready player %d \r\n",gnPlayerIndex);

// socket connecting try
	struct sockaddr_in server;

	socket_desc = socket(AF_INET,SOCK_STREAM,0);
	if(socket_desc == -1)
	{
		puts("err create socket");
	}
	server.sin_addr.s_addr = inet_addr("127.0.0.1");
	server.sin_family = AF_INET;
	server.sin_port = htons(8080);
	if(connect(socket_desc,(struct sockaddr *)&server,sizeof(server)) < 0) {
		puts("connect error");
		return 1;
	}

	puts("connect ok!");
// thread operate
	{
		int err = pthread_create(&tid,NULL,&InputThread,NULL);
		if(err != 0) {
			printf("err : %s \r\n",strerror(err));
		}
		else {
			printf("thread create success \r\n");
		}
	}

	{
		int err = pthread_create(&tid,NULL,&ListenThread,NULL);
		if(err != 0) {
			printf("err : %s \r\n",strerror(err));
		}
		else {
			printf("thread create success \r\n");
		}
	}
	puts("sytemp ready!");
	sleep(3);

// game resource loading
	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,16);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane1.dat");

	Plane_init(&gPlayerObject[0],&gPlayerModel,0,0);
	gPlayerObject[0].m_nFSM = 1;

	Plane_init(&gPlayerObject[1],&gPlayerModel,0,0);
	gPlayerObject[1].m_nFSM = 1;

	puts("object setup complete!");
	sleep(1);	
	system("clear");

	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	while(bLoop) {
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
		
			gPlayerObject[0].pfDraw(&gPlayerObject[0],&gScreenBuf[1]);
			gPlayerObject[1].pfDraw(&gPlayerObject[1],&gScreenBuf[1]);

			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;

}
Пример #22
0
int main()
{

	for(int i=0;i<2;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,35);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"airplane.dat");
	
	map_init(&gBulletModel);
	map_load(&gBulletModel,"bullet1.dat");
	
	map_init(&gAlienModel);
	map_load(&gAlienModel,"tank1.dat");
	
	Plane_init(&gPlayerObject,&gPlayerModel,17,10);
	//bullet_init(&gBulletModel,0,0,0,&gBulletModel);
		
	gPlayerObject.m_nFSM = 1;

	double TablePosition[] = {0,8,16,24};
	
/*	for(int i=0;i<2;i++)
	{
		_S_BULLET_OBJECT *pObj = &gBulletObject[i];
		bullet_init(pObj,&gBulletObject[i];
		pObj->m_nFSM = 1;
	}
*/
	for(int i=0;i<4;i++)
	{
		_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
		alien_init(pObj,&gAlienModel);
		pObj->m_fXpos = TablePosition[i];
		pObj->m_fYpos = 2;
		pObj->m_nFSM = 1;
	}
/*	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	int targetx,targety;

	int fire_x, fire_y;
*/
	
	system("clear");
	
	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간 입력
		
/*		fire_x = gAlienObjects.m_nXpos;
		fire_y = gAlienObjects.m_nYpos;

		targetx = gPlayerObject.m_nXpos;
		targety = gPlayerObject.m_nypos;
*/	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
/*			else if(ch == 'j') {
				double vx,vy,c;
				vx = targetx - fire_x;
				vy = targety - fire_y;
				c = sqrt(vx*vx+vy*vy);
				vx /= c;
				vy /= c;

				bullet_fire(&gBulletObject,fire_x,fire_y,10.0,vx,vy,10.0);
			
			}*/
		gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);
//		bullet_apply(&gBulletObject,delta_tick);
		}

		for(int i=0;i<4;i++ ) 
		{
			_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
			pObj->pfApply(pObj,delta_tick);

		}


		//타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
	//		bullet_draw(&gBulletObjects, &gScreenBuf[1]);
			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]);
				
			for(int i=0;i<4;i++ ) 
			{
				_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);
			}

			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;
}
Пример #23
0
Файл: ex1.c Проект: chaem/test
int main()
{
	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	for (int i=0; i<2; i++) {
		map_init(&gScreenBuffer[i]);
		map_new(&gScreenBuffer[i],35,15);

	}
	map_init(&gMissile);
	map_load(&gMissile,"plasma.dat");
	missile_init(&gMissileObject,0,0,0,&gMissile);

	system("clear");	

	//target
	int targetx, targety;
	targety = 3;
	targetx = 2; 

	int fire_x = 24;
	int fire_y = 12;


	while(bLoop) {
		//time process
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//input
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
			else if (ch == 'j') {
				double vx, vy, c;
				vx = targetx - fire_x;
				vy = targety - fire_y;
				c = sqrt(vx*vx + vy*vy);
				vx /= c;
				vy /= c;
		
				missile_fire(&gMissileObject,
				fire_x, fire_y,
				10.0, vx, vy,
				10);
					
			}
			else if (ch == 'a') {
				targetx -= 1;

			}
			else if (ch == 'd') {
				targetx += 1;

			}

		}

		// apply location
		missile_apply(&gMissileObject,delta_tick);

		// time calculate
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]);
			missile_draw(&gMissileObject,&gScreenBuffer[1]);	
			gotoxy(0,0);
			
			map_PutTile(&gScreenBuffer[1],fire_x,fire_y,1);
			map_PutTile(&gScreenBuffer[1],targetx,targety,5);

			map_dump(&gScreenBuffer[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;

}
Пример #24
0
int
main(int argc, char **argv)
{
	char val[4096];
	char listener_name[80];
	char backend_name[80];
	const char *config_file = DEFAULT_CONFIG_FILE;
	config_object_t *config = NULL;
	map_object_t *map = NULL;
	const listener_plugin_t *lp;
	const backend_plugin_t *p;
	listener_context_t listener_ctx = NULL;
	backend_context_t backend_ctx = NULL;
	int debug_set = 0, foreground = 0, wait_for_init = 0;
	int opt, configure = 0;

	config = sc_init();
	map = map_init();

	if (!config || !map) {
		perror("malloc");
		return -1;
	}

	while ((opt = getopt(argc, argv, "Ff:d:cwlh")) != EOF) {
		switch(opt) {
		case 'F':
			printf("Background mode disabled\n");
			foreground = 1;
			break;
		case 'f':
			printf("Using %s\n", optarg);
			config_file = optarg;
			break;
		case 'd':
			debug_set = atoi(optarg);
			break;
		case 'c':
			configure = 1;
			break;
		case 'w':
			wait_for_init = 1;
			break;
		case 'l':
			plugin_dump();
			return 0;
		case 'h':
		case '?':
			usage();
			return 0;
		default:
			return -1;
		}
	}

	if (configure) {
		return do_configure(config, config_file);
	}

	if (sc_parse(config, config_file) != 0) {
		printf("Failed to parse %s\n", config_file);
		return -1;
	}

	if (debug_set) {
		snprintf(val, sizeof(val), "%d", debug_set);
		sc_set(config, "fence_virtd/@debug", val);
	} else {
		if (sc_get(config, "fence_virtd/@debug", val, sizeof(val))==0)
			debug_set = atoi(val);
	}

	dset(debug_set);

	if (!foreground) {
		if (sc_get(config, "fence_virtd/@foreground",
			   val, sizeof(val)) == 0)
			foreground = atoi(val);
	}

	if (!wait_for_init) {
		if (sc_get(config, "fence_virtd/@wait_for_init",
			   val, sizeof(val)) == 0)
			wait_for_init = atoi(val);
		if (!wait_for_init) {
			/* XXX compat */
			if (sc_get(config, "fence_virtd/@wait_for_backend",
				   val, sizeof(val)) == 0)
				wait_for_init = atoi(val);
		}
	}

	if (dget() > 3)
		sc_dump(config, stdout);

	if (sc_get(config, "fence_virtd/@backend", backend_name,
		   sizeof(backend_name))) {
		printf("Failed to determine backend.\n");
		printf("%s\n", val);
		return -1;
	}

	dbg_printf(1, "Backend plugin: %s\n", backend_name);

	if (sc_get(config, "fence_virtd/@listener", listener_name,
		   sizeof(listener_name))) {
		printf("Failed to determine backend.\n");
		printf("%s\n", val);
		return -1;
	}

	dbg_printf(1, "Listener plugin: %s\n", listener_name);

#ifdef _MODULE
	if (sc_get(config, "fence_virtd/@module_path", val,
		   sizeof(val))) {
#ifdef MODULE_PATH
		snprintf(val, sizeof(val), MODULE_PATH);
#else
		printf("Failed to determine module path.\n");
		return -1;
#endif
	}

	dbg_printf(1, "Searching %s for plugins...\n", val);

	opt = plugin_search(val);
	if (opt > 0) {
		dbg_printf(1, "%d plugins found\n", opt);
	} else {
		printf("No plugins found\n");
		return 1;
	}

#endif
	if (dget() > 3)
		plugin_dump();

	lp = plugin_find_listener(listener_name);
	if (!lp) {
		printf("Could not find listener \"%s\"\n", listener_name);
		return 1;
	}

	p = plugin_find_backend(backend_name);
	if (!p) {
		printf("Could not find backend \"%s\"\n", backend_name);
		return 1;
	}

	daemon_init(basename(argv[0]), foreground);
	signal(SIGINT, exit_handler);
	signal(SIGTERM, exit_handler);
	signal(SIGQUIT, exit_handler);

	syslog(LOG_NOTICE, "fence_virtd starting.  Listener: %s  Backend: %s", backend_name, listener_name);

	while (p->init(&backend_ctx, config) < 0) {
		if (!wait_for_init) {
			if (foreground) {
				printf("Backend plugin %s failed to initialize\n",
				       backend_name);
			}
			syslog(LOG_ERR,
			       "Backend plugin %s failed to initialize\n",
			       backend_name);
			return 1;
		}
		sleep(5);
	}

	if (map_load(map, config) < 0) {
		syslog(LOG_WARNING, "Failed to load static maps\n");
	}

	/* only client we have now is mcast (fence_xvm behavior) */
	while (lp->init(&listener_ctx, p->callbacks, config, map,
			backend_ctx) != 0) {
		if (!wait_for_init) {
			if (foreground) {
				printf("Listener plugin %s failed to initialize\n",
				       listener_name);
			}
			syslog(LOG_ERR,
			       "Listener plugin %s failed to initialize\n",
			       listener_name);
			return 1;
		}
		sleep(5);
	}

	while (run && lp->dispatch(listener_ctx, NULL) >= 0);

	syslog(LOG_NOTICE, "fence_virtd shutting down");

	map_release(map);
	sc_release(config);

	lp->cleanup(listener_ctx);
	p->cleanup(backend_ctx);

	daemon_cleanup();

	return 0;
}
Пример #25
0
int main()
{	
	system("clear");

	for(int i=0;i<2;i++){
		map_init(&gScreenBuffer[i]);
		gScreenBuffer[i].fpnew(&gScreenBuffer[i],35,16);
		//map_new(&gScreenBuffer[i],35,16);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane.dat");

	Plane_init(&gPlayerObject,&gPlayerModel,17,10);
	bullet_init(&gBulletObject,0,0,0,&gPlayerModel);

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma.dat");

	bullet_init(&gBulletObject,0,0,0,&gBulletModel);
	
	set_conio_terminal_mode();
	acc_tick=last_tick=0;
	acc_bullet_delay_tick=0;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
			else if(ch=='j'){
				double bullet_posx=0;
				double bullet_posy=0;

				double target_posx=gPlayerObject.m_fXpos;
				double target_posy=gPlayerObject.m_fYpos;

				double vx=target_posx-bullet_posx;
				double vy=target_posy-bullet_posy;

				double dist=sqrt(vx*vx+vy*vy);

				vx/=dist; vy/=dist;

				gBulletObject.pfFire(&gBulletObject,bullet_posx,bullet_posy,10,vx,vy,10.0);
			}
			gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);
			//Plane_Apply(&gPlayerObject,delta_tick,ch);
		}

		acc_bullet_delay_tick+=delta_tick;
		if(acc_bullet_delay_tick>2.0){	//2초동안 방향설정

			acc_bullet_delay_tick=0;

			double bullet_posx=gBulletObject.m_fXpos;
			double bullet_posy=gBulletObject.m_fYpos;

			double target_posx=gPlayerObject.m_fXpos;
			double target_posy=gPlayerObject.m_fYpos;

			double vx=target_posx-bullet_posx;
			double vy=target_posy-bullet_posy;

			double dist=sqrt(vx*vx+vy*vy);

			vx/=dist; vy/=dist;

			gBulletObject.m_fvx=vx;
			gBulletObject.m_fvy=vy;
		}


		//apply위치
		gBulletObject.pfApply(&gBulletObject,delta_tick);
	
		//타이밍 계산 
		acc_tick += delta_tick;
		
		if(acc_tick > 0.1) {
			//puts("tick..\r");
			gotoxy(0,0);
			map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]);
			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuffer[1]);
			gBulletObject.pfDraw(&gBulletObject,&gScreenBuffer[1]);
			
			//Plane_Draw(&gPlayerObject,&gScreenBuffer[1]);
			map_dump(&gScreenBuffer[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;

}
Пример #26
0
int main()
{

	for(int i=0;i<2;i++){
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],45,30);
	}

	map_init(&gPlayerModel);
	map_load(&gPlayerModel,"plane1.dat");

	map_init(&gPlasmaModel);
	map_load(&gPlasmaModel,"plasma.dat");

	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien.dat");

	map_init(&gPlaneBulletModel);
	map_load(&gPlaneBulletModel,"bullet1.dat");

	map_init(&gPotal);
	map_load(&gPotal,"potal.dat");

	map_init(&gPotalBulletModel);
	map_load(&gPotalBulletModel,"potal_bullet.dat");

	Plane_init(&gPlayerObject,&gPlayerModel,30,26);
	Potal_init(&gPlayerPotal,&gPotal,1,1);
	Potal_Bullet_init(&gPotalBulletObject,0,0,0,&gPotalBulletModel);

	gPlayerObject.m_nFSM=1;

	for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){
		bullet_init(&gPlaneBulletObjects[i],0,0,0,&gPlaneBulletModel);
	}

	for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){
		bullet_init(&gBulletObjects[i],0,0,0,&gPlasmaModel);
	}

	double TablePosition[]={0,10,20,30,40};

	for(int i=0;i<5;i++){
		_S_ALIEN_OBJECT *pObj=&gAlienObjects[i];
		alien_init(pObj,&gAlienModel);
		pObj->m_fXpos=TablePosition[i];
		pObj->m_fYpos=5;
		pObj->m_nFSM=1;
		gAlienObjects[i].m_pBullet=&gBulletObjects[i];

	}

	system("clear");

	set_conio_terminal_mode();
	acc_tick=last_tick=0;
	acc_guid_delay_tick=0;
	acc_bullet_delay_tick=0;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//실시간 입력
		if(kbhit()!=0) {
			char ch = getch();
			if(ch=='q') {
				bLoop=0;
				puts("bye~ \r");
			}

			else if(ch=='j') {

				for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) {
					double vx,vy,c;

					vx=gAlienObjects[i].m_fXpos-gPlayerObject.m_fXpos;
					vy=gAlienObjects[i].m_fYpos-gPlayerObject.m_fYpos;
					c=sqrt(vx*vx+vy*vy);
					vx/=c;	vy/=c;

					_S_BULLET_OBJECT *pObj = &gPlaneBulletObjects[i];
					if(pObj->m_nFSM==0) { //슬립상태
						pObj->pfFire(pObj,gPlayerObject.m_fXpos,gPlayerObject.m_fYpos,10.0,vx,vy,10.0);
						break;
					}
				}

			}
			
			_S_Potal_Bullet_Object *pObj=&gPotalBulletObject;
			if(pObj->m_nFSM==0){
				double potal_bullet_posx=gPlayerPotal.m_nXpos;
				double potal_bullet_posy=gPlayerPotal.m_nYpos;

				double target_x=gPlayerObject.m_fXpos;
				double target_y=gPlayerObject.m_fYpos;

				double vx=target_x-potal_bullet_posx;
				double vy=target_y-potal_bullet_posy;

				/*  double angle=0;
					angle+=(delta_tick*45);
					double rad=(angle/180.0)*PI;

					double vx=(target_x-potal_bullet_posx)*cos(rad)-(target_y-potal_bullet_posy)*sin(rad);
					double vy=(target_x-potal_bullet_posx)*sin(rad)+(target_y-potal_bullet_posy)*cos(rad);

*/
				double dist=sqrt(vx*vx+vy*vy);
				vx/=dist; vy/=dist;

				Potal_Bullet_Fire(&gPotalBulletObject,gPlayerPotal.m_nXpos,gPlayerPotal.m_nYpos,10,vx,vy,10.0);
			}
			gPlayerObject.pfApply(&gPlayerObject,delta_tick,ch);	

		}
		//apply
		Potal_Bullet_Apply(&gPotalBulletObject,delta_tick);

		for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) {
			_S_BULLET_OBJECT *pObj=&gPlaneBulletObjects[i];
			pObj->pfApply(pObj,delta_tick);

		}

		for(int i=0;i<5;i++ ){
			_S_ALIEN_OBJECT *pObj=&gAlienObjects[i];
			pObj->pfApply(pObj,delta_tick);

		}

		//potal_bullet
		{
			double potal_bullet_posx=gPlayerPotal.m_nXpos;
			double potal_bullet_posy=gPlayerPotal.m_nYpos;

			double target_x=gPlayerObject.m_fXpos;
			double target_y=gPlayerObject.m_fYpos;

			/*	double vx=target_x-potal_bullet_posx;
				double vy=target_y-potal_bullet_posy;*/

			double angle=0;
			angle+=(delta_tick*45);
			double rad=(angle/180.0)*PI;

			double vx=(target_x-potal_bullet_posx)*cos(rad)-(target_y-potal_bullet_posy)*sin(rad);
			double vy=(target_x-potal_bullet_posx)*sin(rad)+(target_y-potal_bullet_posy)*cos(rad);

			double dist=sqrt(vx*vx+vy*vy);

			if(dist<0.1){
				gPotalBulletObject.m_nFSM=0;
			}
		}

		acc_bullet_delay_tick+=delta_tick;
		if(acc_bullet_delay_tick>2.0){	//2초동안 방향설정

			acc_bullet_delay_tick=0;

			double bullet_posx=gPotalBulletObject.m_fXpos;
			double bullet_posy=gPotalBulletObject.m_fYpos;

			double target_posx=gPlayerObject.m_fXpos;
			double target_posy=gPlayerObject.m_fYpos;

			double vx=target_posx-bullet_posx;
			double vy=target_posy-bullet_posy;

			double dist=sqrt(vx*vx+vy*vy);

			vx/=dist; vy/=dist;

			gPotalBulletObject.m_fvx=vx;
			gPotalBulletObject.m_fvy=vy;
		}

		//총알 맞았을때 게임오버
		for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) {
			if(gBulletObjects[i].m_nFSM!=0) {
				double bullet_posx=gBulletObjects[i].m_fXpos;
				double bullet_posy=gBulletObjects[i].m_fYpos;

				double target_posx=gPlayerObject.m_fXpos;
				double target_posy=gPlayerObject.m_fYpos;

				double vx=target_posx-bullet_posx;
				double vy=target_posy-bullet_posy;

				double dist=sqrt(vx*vx+vy*vy);

				if(dist<0.1) {
					gBulletObjects[i].m_nFSM=0;
					gPlayerObject.m_nFSM=0;
					gAlienObjects[i].m_nFSM=0;
				}
			}
		}

		//alien 총알 맞았을때
		for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) {
			if(gPlaneBulletObjects[i].m_nFSM!=0) {
				double bullet_posx=gPlaneBulletObjects[i].m_fXpos;
				double bullet_posy=gPlaneBulletObjects[i].m_fYpos;

				double target_posx= gAlienObjects[i].m_fXpos;
				double target_posy= gAlienObjects[i].m_fYpos;

				double vx=target_posx-bullet_posx;
				double vy=target_posy-bullet_posy;
				double dist=sqrt(vx*vx+vy*vy);

				if(dist<5.0) {
					gAlienObjects[i].m_nFSM=0;
				}
			}
		}	

		for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++) {
			gBulletObjects[i].pfApply(&gBulletObjects[i],delta_tick);

		}

		//타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);

			gPlayerObject.pfDraw(&gPlayerObject,&gScreenBuf[1]);
			Potal_Draw(&gPlayerPotal,&gScreenBuf[1]);

			for(int i=0;i<5;i++) {
				_S_ALIEN_OBJECT *pObj = &gAlienObjects[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);
			}

			for(int i=0;i<sizeof(gBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){
				gBulletObjects[i].pfDraw(&gBulletObjects[i],&gScreenBuf[1]);
			}

			for(int i=0;i<sizeof(gPlaneBulletObjects)/sizeof(_S_BULLET_OBJECT);i++){
				_S_BULLET_OBJECT *pObj = &gPlaneBulletObjects[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);
			}

			puts("---------------------------------------------\r");
			map_dump(&gScreenBuf[1],Default_Tilepalete);
			puts("---------------------------------------------\r");

			puts("move : w,a,s,d \r");
			puts("quit : q \r");
			acc_tick = 0;

		}

	}

	return 0;

}
Пример #27
0
// loads or generate an map
void
map_new (char *filename)
{
    int x,
      y;
    FILE *fmap;
    signed char old_maptype = map.type;
    int pl_cnt, pl;
    
    /* initialize the start_point array in the _map struct */
    
    map_init_start_points();

    if (filename) {
        fmap = fopen (filename, "r");

        /* if we can't open the given filename for any reason, reverting 
           to default value else, load the file map */
        if (fmap)
            map_load (fmap);
    }
    else
        fmap = NULL;

    // Clean and create the field //
    if (fmap == NULL)
		map_genrandom ();
	
	/* Generate a More random map if requested */
    if (map.map_selection == MAPS_morerand)
        map_genmorerandom();
    
    if (map.type == -1)
        map.type = s_random (MAPT_max);

    if (map.type == MAPT_tunnel) {
        /* insert tunnels */
        for (x = 0; x < GAME_MAX_TUNNELS; x++)
            map.tunnel[x].x = map.tunnel[x].y = -1;
        map.field[3][3].type = FT_tunnel;
        map.field[3][3].special = 0;
        map.field[map.size.x - 4][map.size.y - 4].type = FT_tunnel;
        map.field[map.size.x - 4][map.size.y - 4].special = 1;

        if (map.size.y > 12) {
            map.field[map.size.x - 4][3].type = FT_tunnel;
            map.field[map.size.x - 4][3].special = 2;
            map.field[3][map.size.y - 4].type = FT_tunnel;
            map.field[3][map.size.y - 4].special = 3;

            map.tunnel[0].x = map.size.x - 4;
            map.tunnel[0].y = 3;
            map.tunnel[1].x = 3;
            map.tunnel[1].y = map.size.y - 4;
            map.tunnel[2].x = map.size.x - 4;
            map.tunnel[2].y = map.size.y - 4;
            map.tunnel[3].x = 3;
            map.tunnel[3].y = 3;
        }
        else {
            map.tunnel[0].x = map.size.x - 4;
            map.tunnel[0].y = map.size.y - 4;
            map.tunnel[1].x = 3;
            map.tunnel[1].y = 3;
        }
    }


    /* delete the bfield data */
    for (x = 0; x < MAX_FIELDSIZE_X; x++)
        for (y = 0; y < MAX_FIELDSIZE_Y; y++)
            map.bfield[x][y] = 0;

    /* count the number of players on this map so we know how many starting points
     * to find
     */
     
    pl_cnt = 0;
    for (pl = 0; pl < MAX_PLAYERS; pl++) {
        if (PS_IS_used (players[pl].state)) {
            pl_cnt++;
        }
    }
    
    
    /* identify possible starting positions for players and store them in the
     * start_point array in the _map struct.  This will always succeed.  If
     * it cannot find starting points within the tolerance, it first attempts
     * to create start points within the tolerence and otherwise lowers the
     * tolerence until it can satisfy the proper number of start points.
     * eventually the tolerence reaches 0, so it can, in the worst case, start
     * all players at the same start point.
     */
     
    map_find_and_add_start_points(pl_cnt - map_num_defined_start_points(), MAP_POSITION_TOLERENCE);

    /* Set the Playerinformation */
    map_set_playerposition (fmap != NULL);

    /* put the fire powerups in the field */
    map_fillitems (FT_fire, map.fire);
    /* put the bomb powerups in the field */
    map_fillitems (FT_bomb, map.bombs);
    /* put the shoe powerup in the field */
    map_fillitems (FT_shoe, map.shoes);
    /* put the death ?powerups? in the field */
    map_fillitems (FT_death, map.death);
    /* put the mixed powerrup in the field */
    map_fillitems (FT_mixed, map.mixed);
    /* put the trigger special in the field */
    map_fillitems (FT_sp_trigger, map.sp_trigger);
    /* put the row special in the field */
    map_fillitems (FT_sp_row, map.sp_row);
    /* put the push special in the field */
    map_fillitems (FT_sp_push, map.sp_push);
    map_fillitems (FT_sp_liquid, map.sp_push);
    map_fillitems (FT_sp_moved, map.sp_push);
    /* put the push special in the field */
	map_fillitems(FT_sp_kick,map.sp_kick);

    map.type = old_maptype;
}
Пример #28
0
static void *ctor(renderer_t r, void *common)
{
	struct _world *world = NULL;
	vec3_t spawn;

	world = calloc(1, sizeof(*world));
	if ( NULL == world )
		goto out;

	world->render = r;
	renderer_viewangles(r, 45.0, 45.0, 0.0);

	world->map = map_load(r, "data/maps/level1");
	if ( NULL == world->map )
		goto out_free;

	spawn[0] = 0.0;
	spawn[1] = CHOPPER_HEIGHT;
	spawn[2] = 0.0;

	world->apache = chopper_comanche(spawn, 0.785);
	if ( NULL == world->apache )
		goto out_free_map;

	world->light = light_new(r, LIGHT_CAST_SHADOWS);
	if ( NULL == world->light ) {
		goto out_free_chopper;
	}

	world->font = font_load(r, "data/font/carbon.png", 16, 16);
	if ( NULL == world->font )
		goto out_free_light;

	world->lightRate = 1440;
	world->light_ticks = 10;

	world->cvars = cvar_ns_new("world");
	if ( NULL == world->cvars )
		goto out_free_font;
		
	cvar_register_float(world->cvars, "time", CVAR_FLAG_SAVE_ALWAYS, &world->lightAngle);
	cvar_register_float(world->cvars, "lightRate", CVAR_FLAG_SAVE_NOTDEFAULT, &world->lightRate);
	cvar_register_uint(world->cvars, "tpf", CVAR_FLAG_SAVE_NOTDEFAULT, &world->light_ticks);
		
	cvar_ns_load(world->cvars);

	world->fcnt = (world->lightAngle / (M_PI / world->lightRate));
	world->fcnt *= world->light_ticks;
	
	/* success */
	goto out;

out_free_font:
	font_free(world->font);
out_free_light:
	light_free(world->light);
out_free_chopper:
	chopper_free(world->apache);
out_free_map:
	map_free(world->map);
out_free:
	free(world);
	world = NULL;
out:
	return world;
}
Пример #29
0
Файл: main.c Проект: odrevet/GE2
int main(int argc, char** argv){
  //flags for the window
  int flags = 0;

  //map default path
  char *map_load_path = "res/level.map";
  char *map_save_path = "res/save.map";
  
  //parse command line arguments
  int c;
  while ((c = getopt (argc, argv, "hfm:o:")) != -1){
    switch (c)
      {
      case 'h':
	printf("Tilemap editor\n");
	printf("h: print this menu and exit\n");
	printf("f: launch in fullscreen\n");
	printf("m <filename>: map name to load (default %s)\n", map_load_path);
	printf("o <filename>: file to save to (default %s)\n", map_save_path);
	return EXIT_SUCCESS;
	break;
      case 'f':
	flags = SDL_WINDOW_FULLSCREEN_DESKTOP;
        break;
     case 'm':
        map_load_path = optarg;
        break;
     case 'o':
        map_save_path = optarg;
        break;
      default:
        abort ();
      }
  }
  
  sdl_init(SDL_INIT_VIDEO);
  atexit(SDL_Quit);

  // create a new window
  SDL_Window* window = sdl_create_window("Tilemap Editor Isometric Depth",
					 &WINDOW_WIDTH,
					 &WINDOW_HEIGHT,
					 flags);

  //create a renderer
  SDL_Renderer* renderer = SDL_CreateRenderer(window,
					      0,
					      SDL_RENDERER_ACCELERATED |
					      SDL_RENDERER_PRESENTVSYNC);
  SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT);

  //create a new game
  game o_game;

  //init game componants
  o_game.p_map = map_load(map_load_path, renderer);
  if(!o_game.p_map){
    printf("Cannot load map named '%s'\n", map_load_path);
    return EXIT_FAILURE;
  }
  o_game.map_save_path = map_save_path;
  o_game.join_mode = false;
  o_game.tile_mode = TILE;
  o_game.tile_from_x = -1;
  o_game.tile_from_y = -1;
  o_game.tile_from_z = -1;
  o_game.tile_to_x = -1;
  o_game.tile_to_y = -1;
  o_game.tile_to_z = -1;
  
  //init fontmap
  fontmap o_fontmap;
  const char layout[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!-";
  o_fontmap.size = 7;
  o_fontmap.layout = (char*)&layout;
  fontmap_init_from_img(&o_fontmap, "res/font.png", renderer);
  o_game.p_fontmap = &o_fontmap;
  o_game.p_map->p_fontmap = &o_fontmap;
  
  //game states
  game_status ret_code = IN_GAME;
  while(ret_code != QUIT){
    switch(ret_code){
    case IN_GAME:
      ret_code = state_in_game(renderer, &o_game);
      break;
    default:
      break;
    }
  }

  //free memory
  map_free(o_game.p_map);
  fontmap_free(&o_fontmap);

  SDL_Quit();
  return EXIT_SUCCESS;
}
Пример #30
0
int main()
{

	system("clear");
	for(int i=0;i<10;i++)
	{
		map_init(&gScreenBuf[i]);
		map_new(&gScreenBuf[i],35,30);
	}
	map_init(&gPlaneModel);
	map_load(&gPlaneModel,"plane5.dat");


	map_init(&gAlienModel);
	map_load(&gAlienModel,"alien5.dat");

	map_init(&gPlasmaModel);
	map_load(&gPlasmaModel,"bullet5.dat");

	map_init(&gBulletModel);
	map_load(&gBulletModel,"bullet5.dat");


	Plane_init(&gTestPlaneObject,&gPlaneModel,17,25);
	

	gTestPlaneObject.m_nFSM = 1;

	double TablePosition[] = {0,3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0};

	for(int i=0;i< sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT); i++)
	{
		bullet_init(&gTestBulletObject[i],0,0,0,&gBulletModel);
	}
		for(int i=0;i< 10; i++)
	{
		bullet_init(&gTestBulletObject2[i],0,0,0,&gPlasmaModel);
	}
	
	
	for(int i=0;i<10;i++)
	{
		_S_ALIEN_OBJECT *pObj = &gTestAlienObject[i];
		alien_init(pObj,&gAlienModel,1,2);
		pObj->m_fXpos = TablePosition[i];
		pObj->m_fYpos = 3;
		pObj->m_nFSM = 1;
		gTestAlienObject[i].m_pBullet = &gTestBulletObject2[i];
	}


	set_conio_terminal_mode();
	acc_tick=last_tick=0;

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
			if(ch == 'j') {
				for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) {
					_S_BULLET_OBJECT *pObj = &gTestBulletObject[i];
					if(pObj->m_nFSM == 0) { //슬립상태라면...
						pObj->pfFire(pObj,
								gTestPlaneObject.m_fXpos,
								gTestPlaneObject.m_fYpos,5,0,-2,10);
						break;
					}

				}
			}
		
			gTestPlaneObject.pfApply(&gTestPlaneObject,delta_tick,ch);
		}
	
		

		for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) {
			_S_BULLET_OBJECT *pObj = &gTestBulletObject[i];
			pObj->pfApply(pObj,delta_tick);


		}
		for(int i=0;i<10;i++) {
			_S_ALIEN_OBJECT *pObj = &gTestAlienObject[i];
			pObj->pfApply(pObj,delta_tick);		
	
		}
		for(int i=0;i<10;i++) {
			gTestBulletObject2[i].pfApply(&gTestBulletObject2[i],delta_tick);
		

		if(gTestBulletObject2[i].m_nFSM != 0)	{
	
			double dist = getDistance(&gTestBulletObject2[i],&gTestPlaneObject);

			if(dist < 1.0) {
				gTestBulletObject2[i].m_nFSM = 0;
				gTestPlaneObject.m_nFSM = 0;
			}
		}

}
	

		//타이밍 계산 
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			gotoxy(0,0);
			map_drawTile(&gScreenBuf[0],0,0,&gScreenBuf[1]);
			gTestPlaneObject.pfDraw(&gTestPlaneObject,&gScreenBuf[1]);

			for(int i=0;i<sizeof(gTestBulletObject)/sizeof(_S_BULLET_OBJECT);i++) {
				_S_BULLET_OBJECT *pObj = &gTestBulletObject[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);	
			}



			for(int i=0;i<10;i++) {

				_S_ALIEN_OBJECT *pObj = &gTestAlienObject[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);
			}
			for(int i=0;i<4;i++) {

				_S_BULLET_OBJECT *pObj = &gTestBulletObject2[i];
				pObj->pfDraw(pObj,&gScreenBuf[1]);
			}


			map_dump(&gScreenBuf[1],Default_Tilepalete);
			acc_tick = 0;
		}

	}

	return 0;

}