LINUX.ORG.RU

Сишники, gameдевелы и не gameдевелы. Прямо тут и сейчас пишем прототип игры.

 , , ,


0

1

Вобщем так кому надо читаем всё по тегу development-game-engine и понимаем про что я говорю, для тех кому лень.......

Думая про то как собственно написать движок не только для себя, а и для теоретической возможности использования другими людьми и целью делать его умеренно простым в использовании всё таки во многих вещах и подходах сомневаюсь.

Поэтому чтобы понять как людям хочется работать с движком предлагаю следующее.

Прямо тут и сейчас каждый кто в треде напишет игру и не просто игру, весь подход к разработке игры вы должны будете придумать сами собственно вам нужно будет придумать интерфейс такого движка который вы для себя хотите или просто представляете, также хочется увидеть попытки людей никогда ранее не писавших интерактивных сцен и их подход.

Саму сценку по идее можете написать на любом языке, но желательно на си.

Сцена:

У вас есть карта просто комната, у вас есть шарик вы должны катать(или просто передвигать) по комнате шарик в любых направлениях у шарика есть вес его можно подбросить и он упадёт и издаст звук.

Пример от балды не описал работу с мышкой и в условиях ничего не обработал, да там это уже неважно как простой пример сойдёт :

#include "engine.h"

int main()
{
   const int quit=13;
   const int left=1;
   const int roght=2;
   const int boom=3;
   int key=0;

   init_game("game.conf");

   int ball=model_load("ball.obj");
   int room=model_load("room.obj");

   int ball_textur=("ball.tga");
   int room_textur=("room.tga");
   
   int blow=sound_load("blow.ogg");

   impose_textur(ball,ball_textur);
   impose_textur(room,room_textur);
   
   physics_collision(ball,room);
   physics_gravity(room,0);
   physics_gravity(bool,10);

   position(room,0.0,0.0,0.0);
   
   float x_ball=0.0;
   float y_ball=10.0;
   float z_ball=0.0;

   float x_camera=-10.0;
   float y_camera=0.0;
   float z_camera=0.0;

   position(ball,x_ball,y_ball,z_ball);

  int camera=create_camera(x_camera,y_camera,z_camera);

while(key=key_keyboard()!=quit)
{

  if(key==left)
  {
    вертим крутим камеру
    и шарик.

  };
  
  if(key==right)
  {

    вертим крутим камеру
    и шарик 

  };

  if(key==boom)
  {

    
    sound_volume(blow,50);
    sound_play(blow,2);//2 сек.
    
  };


  render();//отрисовываем сцену
};

quit_game(); //выходим из игры

return 0;
};

Ну, а теперь я хотел бы чтобы вы сделали что то подобное, но так как вам хочется как бы вы написали сценку с шариком.

★★★★★

Прямо тут и сейчас каждый кто в треде напишет игру и не просто игру, весь подход к разработке игры вы должны будете придумать сами

Забей на программирование, иди в маркетологи :)

Ну и не стесняйся пользоваться запятыми.

А по теме: честно не думаю, что такие hello-world'ы здесь кому-нибудь интересны.

unfo ★★★★★
()
Ответ на: комментарий от unfo

Они мне интересны, не сам код по идее который надеюсь будет, а подход к его использованию. API воображаемого движка люди должны придумать сами.

Dron ★★★★★
() автор топика

А разве так будет работать:

while(key=key_keyboard()!=quit)

Мне всегда казалось, что должно быть так:

while( quit != ( key = key_keyboard()))

Но я бы вообще это место for(...) заменил.

P.S. Вряд ли кто-то станет тратить свое время на это.

trex6 ★★★★★
()
Ответ на: комментарий от unfo

Править запятые тут не буду, сейчас некогда, а когда будет время уже будет поздно.

Dron ★★★★★
() автор топика
Ответ на: комментарий от trex6

Ну, а вдруг.

while( quit != ( key = key_keyboard()))

Я поторопился.

Dron ★★★★★
() автор топика
int main()
{
    struct Policeman* policeman = (struct Policeman*)malloc(sizeof(struct Policeman));
    struct InterestingPerson* person = (struct InterestingPerson*)malloc(sizeof(struct InterestingPerson));
    add_event_handler(policeman, MSG_MAKE_A_BALL, HANDLER(make_a_ball));
    listen_for_messages(policeman);
    send_message(person, policeman, MSG_MAKE_A_BALL, "Шарик мне запилил быстро");
    free(policeman);
    free(person);
    return 0;
}
netcat ★★
()
Ответ на: комментарий от netcat

По теме:

API воображаемого движка люди должны придумать сами.

Долго же ты этого ждать будешь.
1) Прочитай уже наконец книги об архитектуре движка.
2) Посмотри в исходный код уже готовых движков.
3) Пиши код, попутно задавая вопросы в Developments.
И все именно в таком порядке, а не как у тебя. Так можно теоретизировать бесконечно.
http://ru.wikipedia.org/wiki/Антипаттерн

Аналитический паралич (Analysis paralysis): неоправданно большие затраты на анализ и проектирование. Часто приводит к закрытию проекта до начала его реализации;

netcat ★★
()
Ответ на: комментарий от quiet_readonly

Или это такой тонкий троллинг pure C?

Ага, я не раз и не два наступал на эти грабли, пока не научился использовать calloc.

netcat ★★
()

struct life_t ball_life {

	.update = ball_update,
}

struct life_t camera_life {

	.init = camera_init,
	.update = camera_update,
}

void ball_update(element_t *el)
{
	struct input_t	*in = &global_input;
	vec3_t		f;

	if (in->key[KEY_LEFT]) {

		vec3(f, 0, 1, 0);
		phys_apply_force(el->phys, f);
	}

	if (in->key[KEY_UP]) {

		/* TODO */
	}

	mat44_cpy(el->visual->m, el->phys->m);
}

void camera_init(element_t *el)
{
	element_t	*target;

	/* TODO: get target link */

	element_insert_link(el, target, "target");

	/* TODO: initialize view matrix */
}

void camera_update(element_t *el)
{
	element_t	*target;
	mat44_t		mo;
	vec3_t		v;

	target = element_get_link_by_tag(el, "target");

	v = vec3_sub(target->phys->pos, el->phys->pos);

	/* TODO: calculate mo */

	render_set_view_matrix(render, mo);
}

void ball_scene_startup()
{
	element_t	*el;
	phys_obj_t	*po;

	element_life_register("ball", ball_life);
	element_life_register("camera", camera_life);

	/* FIXME: to load map instead */

	scene_unlink_all();

	el = element_construct("/res/obj/ball");
	scene_attach(el);

	el = element_construct_bare("camera");
	po = phys_construct_minimal();
	el->phys = po;
	scene_attach(el);
}

amaora ★★
()
Последнее исправление: amaora (всего исправлений: 3)
bool onObjectAscured();
void onObjectDrag();
void onObjectDrop();

int main()
{
    GEScene *scene = geng_createScene(/*loadAtBackground*/ 0, /*hasFloor*/ 1);
    /* object with id "ball" defined somewhere in game data */
    GEDynamicBody *ball = geng_loadDynamicBody(scene, "ball");

    GEObjectDragAndDropHandlers handlers = {
        onObjectAscured,
        onObjectDrag,
        onObjectDrop
    };
    ball->setDragHandlers(handlers);

    return geng_mainLoop();
}
quiet_readonly ★★★★
()
Ответ на: комментарий от special-k

всеравно текстовый квест выйдет

Он уже идет в этой теме.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.