Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » статистическая инфа по TBs/rts

Ответить
Настройки темы
статистическая инфа по TBs/rts

Старожил


Сообщения: 292
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Ребят подскажите пожалуйста, как можно собрать разную статистическую, аналитическую инфу по играм TBs/rts на платформе стим. Что вообще можно к этой инфе отнести?

Отправлено: 11:59, 23-10-2014

 

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Наименование
Разработчик
Издатель
Дата выхода
Платформы
Технология рендеринга
Системные требования
Цена

Собирать вручную можно и автоматически.

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:27, 23-10-2014 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 292
Благодарности: 0

Профиль | Отправить PM | Цитировать


mrcnn, а как можно собирать автоматически.
Я думаю к стат.информации можно ещё отнести, пол ,возраст)

Отправлено: 21:36, 23-10-2014 | #3


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Вам о пользователях нужна статистическая информация, имеется в виду?

Автоматически можно собирать информацию, если будет написана программа, которая скачает страницы с сайта по протоколу http и обработает ее, получив с помощью разных методов обработки текста, сведения, которые находятся на странице. Во-первых, можно написать программу на языках C/C++/C#, во-вторых, на скриптовых языках таких как Perl и PHP. Скачивание производится с помощью сокетов, которые на самом низком уровне в операционной системе являются средством передачи данных по стеку протоколов TCP/IP. Автоматическая обработка текстов производится с помощью регулярных выражений.

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

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:48, 24-10-2014 | #4


Старожил


Сообщения: 292
Благодарности: 0

Профиль | Отправить PM | Цитировать


mrcnn, ну вообще перед мной стоит задание подготовить краткую аналитику по рынку PC RTS/TBS на Steam платформе за 2014 год и прогноз развития рынка в 2015 году. Вот только исходные данные мне не дали)

Отправлено: 13:01, 24-10-2014 | #5


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Игры на платформе Steam можно разделить на две большие группы:
1. "древние" игры, которые вышли до условно 2006 года, имеющие простую, устаревшую графику
2. "современные" игры, которые вышли после условно 2006 года

Причем контент на платформе можно разделить на две группы
1. "платформа" игры, подобная диску
2. дополнения для игры, включающие пакеты каких-то данных(одежда, саундтрек, юниты и т.п.)

Нужно разделить проекты на:
1. готовые
2. проекты с ранним доступом, которые еще делаются и которые занимаются сбором средств для завершения проекта с использованием steam

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

По стоимости проекты можно разделить на:
1. бесплатные
2. платные

Стратегии вообще(без учёта steam) можно разделить на базовые крупные блоки:
1. RTS типа Warcraft, к которым можно отнести Starcraft, Warcraft II, Warcraft III
2. TBS типа Civilization
3. TBS типа Heroes of might and magic к которым возможно можно отнести disciples, king's bounty
4. экономические RTS типа port royale
5. строительные RTS типа sims
6. военные RTS типа sudden strike
7. исторические RTS типа total war
8. стратегии типа Victoria, день победы

Нужно отдельно рассмотреть крупные проекты, вышедшие в 2014, как то King's bounty: dark side, civilization: beyond earth и другие подобные. По цене применяется стртегия снятия сливок.

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:02, 24-10-2014 | #6


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Попытался автоматически получить страницу. Сервер выдает 408 request timeout. Не знаю, как быть

Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#pragma comment (lib, "wsock32.lib")

// буфер
struct buf 
{ 
	unsigned char* buf1; 
	int n; 

	buf() { n = 0; buf1 = NULL; } 
	~buf() { if (buf1) delete buf1;}
	buf(int i) { buf1 = new unsigned char[i+1]; buf1[i] = '\0'; n = i; }
	void add0(unsigned char a) { buf1 = new unsigned char[2]; buf1[0] = a; buf1[1] = '\0'; n = 1; }
	void add(unsigned char a) {  if (n == 0) { add0(a); print(); return; } int i; unsigned char* buf2 = new unsigned char[n+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; buf2[n] = a; buf2[n+1] = '\0'; n = n+1; delete [] buf1; buf1 = buf2; print(); }
	void add10(unsigned char* a, int n1) {   int i; buf1 = new unsigned char[n1+1]; for(i=0;i<n1;i++) buf1[i] = a[i];  buf1[n1] = '\0'; n = n1; }
	void add1(unsigned char* a, int n1) { if (n == 0) { add10(a, n1); print(); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; printf("%d\n", n);delete [] buf1; buf1 = buf2; print(); }
	int len(unsigned char* a) { int n; int i; n = 0; for(i=0; a[i]!='\0'; i++) n++; return n; }
	void add1(unsigned char* a) { int n1 = len(a); if (n == 0) { add10(a, n1); print(); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; printf("%d\n", n);delete [] buf1; buf1 = buf2; print(); }
	void print() { if (buf1) { int i; for(i=0;i<n;i++) printf("%c", buf1[i]); printf("\n"); } }
};

// HTTP-запрос
struct request
{
 buf* t;
 request() { t = 0; }
 ~request() { if(t) delete t; }
};

// адрес
struct address
{
 buf* t;

 address() { t = 0; }
 ~address() { if(t) delete t; } 
};

// ссылка
struct link
{
 buf* t;

 link() { t = 0; }
 ~link() { if(t) delete t; }
};

// HTTP-ответ
struct response
{
 buf* t;
 response() { t = 0; }
 ~response() { if(t) delete t; }
};


// загрузчик
struct loader
{

 WSADATA data;
 SOCKET sock;
 SOCKADDR_IN sockaddr;
 PHOSTENT phe;
 int i;
 response* a;
 char buf1[1024];
 address* b;
 request* c;
 
 loader() 
 {
  a = 0;
  b = 0;
  c = 0;
 }

 void create_object()
 {
  if (!a)
  {
   a = new response;
   a->t = new buf;
  }
  if(!b)
  {
   b = new address;
   b->t = new buf;
  }
  if (b->t)
   b->t->add1( (unsigned char* ) "steampowered.com\0" ); // problem 0: don't know why explicit conversion:  (unsogned char* )
  else
   exit(0); 
  if (!(b->t))
   exit(0);
 }

 void socket_startup()
 {
   WSAStartup(0x101, &data);
   sock = socket(AF_INET, SOCK_STREAM, 0);
   if (sock == 0)
    exit(0);
 }

 void create_address()
 { 
  sockaddr.sin_family = AF_INET;
  sockaddr.sin_port = htons(80);
  if (b->t)
   phe = gethostbyname((char * )b->t->buf1);
  else
   exit(0);
  memcpy((char FAR*)&(sockaddr.sin_addr), phe->h_addr, phe->h_length);
 }

 void socket_connect()
 {
  connect(sock, (PSOCKADDR) &sockaddr,sizeof(sockaddr));
 }

 void create_request()
 {
  c = new request;
  c->t = new buf;
  c->t->add1( (unsigned char* ) "GET /\nHost: \0");
  c->t->add1( (unsigned char* ) b->t->buf1, b->t->len(b->t->buf1));
  c->t->add1( (unsigned char* ) "\n\n\0");
 }

 void socket_send()
 {
  send(sock, (char *) c->t->buf1, 21, NULL);
 }

 void socket_shutdown()
 {
  WSACleanup(); 
 }

 void socket_recv()
 {
  while (recv(sock, buf1, 1024, NULL))
  {
   printf("%s\n",buf1);


   for(i=0; buf1[i] != '\0' && i < 1024; i++)
    ;
   a->t->add1( (unsigned char* ) buf1, i+1);

  }
 }

 void main() {
  create_object();
  socket_startup();
  create_address();
  socket_connect();
  create_request();
  socket_send();
  socket_recv();
  socket_shutdown();
 }

};


int main()
{
 loader x;
 x.main();
 
 return 0;
}

Загрузчик пишется примерно следующим образом
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#pragma comment (lib, "wsock32.lib")



// буфер
struct buf 
{ 
	unsigned char* buf1; 
	int n; 

	buf() { n = 0; buf1 = 0; } 
	~buf() { if (buf1) delete buf1;}
	buf(int i) { buf1 = new unsigned char[i+1]; buf1[i] = '\0'; n = i; }
	void add0(unsigned char a) { buf1 = new unsigned char[2]; buf1[0] = a; buf1[1] = '\0'; n = 1; }
	void add_(unsigned char a) {  if (n == 0) { add0(a);  return; } int i; unsigned char* buf2 = new unsigned char[n+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; buf2[n] = a; buf2[n+1] = '\0'; n = n+1; delete [] buf1; buf1 = buf2;  }
	void add(unsigned char a) {  if (n == 0) { add0(a); print(); return; } int i; unsigned char* buf2 = new unsigned char[n+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; buf2[n] = a; buf2[n+1] = '\0'; n = n+1; delete [] buf1; buf1 = buf2; print(); }
	void add10(unsigned char* a, int n1) {   int i; buf1 = new unsigned char[n1+1]; for(i=0;i<n1;i++) buf1[i] = a[i];  buf1[n1] = '\0'; n = n1; }
	void add1_(unsigned char* a, int n1) { if (n == 0) { add10(a, n1); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; delete [] buf1; buf1 = buf2;  }
	void add1(unsigned char* a, int n1) { if (n == 0) { add10(a, n1); print(); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; printf("%d\n", n);delete [] buf1; buf1 = buf2; print(); }
	int len(unsigned char* a) { int n; int i; n = 0; for(i=0; a[i]!='\0'; i++) n++; return n; }
	void add1_(unsigned char* a) { int n1 = len(a); if (n == 0) { add10(a, n1); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; delete [] buf1; buf1 = buf2;  }
	void add1(unsigned char* a) { int n1 = len(a); if (n == 0) { add10(a, n1); print(); return; } int i, j; unsigned char* buf2 = new unsigned char[n + n1+2]; for(i=0;i<n;i++) buf2[i] = buf1[i]; for(i=n,j=0;j<n1;j++, i++) buf2[i] = a[j]; buf2[n+n1] = '\0'; n = n + n1; printf("%d\n", n);delete [] buf1; buf1 = buf2; print(); }
	void print() { if (buf1) { int i; for(i=0;i<n;i++) printf("%c", buf1[i]); printf("\n"); } }

void print1() 
 {
  struct link* fg;
  int state = 0;
  buf* link1 = new buf;
  int f;
  f = 0;
  int k;
  k = 0;
 
  if (buf1) 
  { 
   int i; 
   for(i=0;i<n;i++) 
   {
    if (buf1[i] == '>')
     printf("%c\n", buf1[i]);
    else if (buf1[i] == '<')
     printf("\n%c", buf1[i]);
    else if (buf1[i] == '=')
     printf(" %c ", buf1[i]);
    else
    {
     if (buf1[i] == 'h' && f == 0)
      f++;
     else if (buf1[i] == 't' && f == 1)
      f++;
     else if (buf1[i] != 't' && f == 1)
      f=0;
     else if (buf1[i] == 't' && f == 2)
      f++;
     else if (buf1[i] != 't' && f == 2)
      f=0;
     else if (buf1[i] == 'p' && f == 3)
      f++;
     else if (buf1[i] != 'p' && f == 3)
      f=0;
     else if (buf1[i] == ':' && f == 4)
      f++;
     else if (buf1[i] != ':' && f == 4)
      f=0;
     else if (buf1[i] == '/' && f == 5)
      f++;
     else if (buf1[i] != '/' && f == 5)
      f=0;
     else if (buf1[i] == '/' && f == 6)     
      f++;     
     else if (buf1[i] != '/' && f == 6)
      f=0;

     if (buf1[i] == '"' && f == 7)
     {      
      FILE* f1;
      char atr[15];
      sprintf(atr, "atr%d\0", k);
      f1 = fopen(atr, "w");
      fprintf(f1, "%s", link1->buf1);
      fclose(f1);
      delete link1;
      link1 = new buf;
      k++;

      f = 0;
     }

     if (f == 7)
     {
      link1->add_(buf1[i]);
     }
     
     printf("%c", buf1[i]); 
    }
   }
   printf("\n"); 
  } 
 }



};

// HTTP-запрос
struct request
{
 buf* t;
 request() { t = 0; }
 ~request() { if(t) delete t; }
};

// адрес
struct address
{
 buf* t;

 address() { t = 0; }
 ~address() { if(t) delete t; } 
};

// HTTP-ссылка
struct link
{
 buf* t;
 link* next;

 buf* host;
 buf* page;

 link() { t = 0; next = 0; host = 0; page=0; }
 link(buf* p) { next = 0; t = new buf; t->add1_(p->buf1); host = 0; page=0; }
 ~link() { if(t) delete t; }
 void add(struct buf *p) { t = new buf; t->add1_(p->buf1); } 
 void add_next(struct buf *p) { link* y = this; while(y->next) y = y->next; y->next = new link(p); }
 void print() { printf("link: "); t->print(); if(next) next->print();}

 void print1(buf* u) 
 {
  buf* link1 = new buf; 
  int i;
  int f;
  int k;
  int state; 
  f = 0;
  k = 0; 
  if (!t) state = 0; 
  else state = 1;
  if (u->buf1) 
  {    
   for(i=0;i<u->len(u->buf1);i++) 
   {
    if (u->buf1[i] == '>') ; else if (u->buf1[i] == '<') ; else if (u->buf1[i] == '=') ;
    else
    {
     if (u->buf1[i] == 'h' && f == 0) f++; 
     else if (u->buf1[i] == 't' && f == 1) f++; else if (u->buf1[i] != 't' && f == 1) f=0; 
     else if (u->buf1[i] == 't' && f == 2) f++; else if (u->buf1[i] != 't' && f == 2) f=0; 
     else if (u->buf1[i] == 'p' && f == 3) f++; else if (u->buf1[i] != 'p' && f == 3) f=0; 
     else if (u->buf1[i] == ':' && f == 4)  f++; else if (u->buf1[i] != ':' && f == 4) f=0; 
     else if (u->buf1[i] == '/' && f == 5) f++; else if (u->buf1[i] != '/' && f == 5) f=0; 
     else if (u->buf1[i] == '/' && f == 6) f++; else if (u->buf1[i] != '/' && f == 6)  f=0;
     if (u->buf1[i] == '"' && f == 7) 
     { 
       if (state == 0) { add(link1); state = 1; } 
       else add_next(link1); 
       delete link1; 
       link1 = new buf; 
       k++; 
       f = 0; 
     }
     if (f == 7)  link1->add_(u->buf1[i]); 
    }
   }
  } 
 }

 void _host()
 {
  int state = 0;
  int i;
  host = new buf;
  page =  new buf;
  for(i=0; i<t->len(t->buf1); i++)
  {
    if (state == 0 && t->buf1[i] == '/') { state = 1; }
    else if (state == 1  && t->buf1[i] != '/') { printf("%c", t->buf1[i]); host->add_(t->buf1[i]); }
    else if (state == 1  && t->buf1[i] == '/') { state = 2; }
    else if (state == 1  && t->buf1[i] == ' ') { state = 3; delete page; page = 0; }
    else if (state == 1  && t->buf1[i] == '\x0d') { state = 3; delete page; page = 0; }
    else if (state == 2) { state = 4; printf("%c", t->buf1[i]); page->add_(t->buf1[i]);}
    else if (state == 4) { printf("%c", t->buf1[i]); page->add_(t->buf1[i]);}
  }
  if (state == 1 || state == 2)
  {
    delete page; page = 0; 
  }

  if (host)
  {
   printf("host: ");
   host->print();
   printf("\n");
  }
  if (page)
  {
   printf("page: ");
   page->print();
   printf("\n");
  }
 }

};

// HTTP-ответ
struct response
{
 buf* t;
 response() { t = 0; }
 ~response() { if(t) delete t; }
};


// загрузчик
struct loader
{
 WSADATA data;
 SOCKET sock;
 SOCKADDR_IN sockaddr;
 PHOSTENT phe;
 int i;
 response* a;
 char buf1[1024];
 address* b;
 request* c;
 link* d;
 
 loader()  { a = 0; b = 0; c = 0; d = 0; }
 void create_object(unsigned char* addr)  { if (!a) { a = new response; a->t = new buf; } if(!b) { b = new address; b->t = new buf; } if(!d) { d = new link; } if (b->t) b->t->add1( (unsigned char* ) addr );  }
 void create_address(unsigned char* addr)  {  sockaddr.sin_family = AF_INET;  sockaddr.sin_port = htons(80);  phe = gethostbyname((char * ) addr); memcpy((char FAR*)&(sockaddr.sin_addr), phe->h_addr, phe->h_length);  }
 void create_request(buf* p, buf* p1) {  if (c) delete c; c = new request; c->t = new buf;  c->t->add1( (unsigned char* ) "GET /\0");  if (p1) c->t->add1( (unsigned char* ) p1->buf1, p1->len(p1->buf1));  c->t->add1( (unsigned char* ) "\nHost: \0");  c->t->add1( (unsigned char* ) p->buf1, p->len(p->buf1));  c->t->add1( (unsigned char* ) "\n\n\0"); }
 void socket_startup() { WSAStartup(0x101, &data); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == 0) exit(0); }
 void socket_connect() { connect(sock, (PSOCKADDR) &sockaddr,sizeof(sockaddr)); }
 void socket_send() { send(sock, (char *) c->t->buf1, c->t->len(c->t->buf1), NULL); }
 void socket_shutdown() { WSACleanup();  }

 void socket_recv()
 {
  int state;
  state = 0;
  while (recv(sock, buf1, 1024, NULL))
  {
   printf("%s\n",buf1);
   for(i=0; buf1[i] != '\0' && i < 1024; i++);
   a->t->add1_( (unsigned char* ) buf1, i+1);
  }
   d->print1(a->t);
  d->print();
  delete a->t;
  a->t = new buf;
 }

 void get_links()
 {
  printf("get_links\n");
  link* cl = d;
  cl->_host();
  while(cl->next)
  {
   socket_startup();
   create_address(cl->host->buf1);
   socket_connect();
   create_request(cl->host, cl->page);
   socket_send();
   socket_recv();
   socket_shutdown();         
   cl = cl->next; 
   cl->_host();
  }
 }
 void main()
 {
  create_object((unsigned char*)"ya.ru\0");
  socket_startup();
  create_address(b->t->buf1);
  socket_connect();
  create_request(b->t, 0);
  socket_send();
  socket_recv();
  socket_shutdown();
  get_links();
 }

};


int main()
{
 loader x;
 x.main();
 
 return 0;
}

-------
Ehhh.. what's up, doc?..


Последний раз редактировалось mrcnn, 04-11-2014 в 16:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:55, 04-11-2014 | #7


Старожил


Сообщения: 292
Благодарности: 0

Профиль | Отправить PM | Цитировать


mrcnn, долго меня не было, хотел Вам в ЛС написать, но у Вас видимо он переполнен.

Отправлено: 19:19, 10-11-2014 | #8



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » статистическая инфа по TBs/rts

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Нужна инфа по мамке Asus P5KC DJmustdie Материнские платы и память 4 20-02-2009 18:21
Инфа по Реестру Delpher Microsoft Windows 2000/XP 4 18-09-2006 12:14
Macrovision RTS Service XPurple Хочу все знать 6 07-08-2006 17:20
Где хранится инфа по шлюзу,маске и прокси на локальном ПК ? FreeDas Сетевые технологии 4 26-01-2006 22:30
Нужна инфа по Borland InterBase. ssdm Программирование и базы данных 3 07-11-2005 13:40




 
Переход