Среда, 27 Ноября 2024, 11:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
MatouДата: Пятница, 05 Ноября 2010, 21:50 | Сообщение # 1081 | Тема: Создание 2d движка
Исходный коТ
Сейчас нет на сайте
Quote (bond95)
VCL билдера можно использовать в качестве ГАПИ?

В принципе можно, но возможности с OpenGL/DirectX не идут ни в какое сравнение.





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 21:53
MatouДата: Пятница, 05 Ноября 2010, 21:42 | Сообщение # 1082 | Тема: Создание 2d движка
Исходный коТ
Сейчас нет на сайте
Quote (bond95)
я пробовал учить и DirectX и OpenGL, но постоянно когда я пытаюсь скомпилировать примеры компилятор мне выдает ошибку.

Очень информативно...



MatouДата: Пятница, 05 Ноября 2010, 21:19 | Сообщение # 1083 | Тема: помогите если не очень трудно
Исходный коТ
Сейчас нет на сайте
Quote (devil-hunter)
2)создайте программу рисующую на экране два поля для морского боя. Первое - игрока, второе - противника. Второе поле должно располагаться справа от первого. Внутренние клетки заполняйте пробелом. Для рисования границы используйте минус и прямую разделительную черту: -, |, а для углов - решётку #. Слева от каждого поля - стобик цифр; сверху - буквы.

Рамки нарисовал, цифры и буквы ставить влом, может сам поймешь как их поставить? Ведь это очень просто. Все коментарии есть в коде.

Code

#include <iostream> // cin, cout   
#include <clocale> // поддержка русского языка   
#include <conio.h> // _getch()   
#include <stdlib.h> // поддержка функции очистки экрана system("cls")   

using namespace std;   

char UpperBraket[22];     // Верхняя рамка боевого поля
char BotomBraket[22];     // Нижняя рамка боевого поля

// <<<<< Ф-я формирующяя нижнюю и верхнюю рамки, нужна для оформления не более >>>>>
void InitBrakets(void)
{
   UpperBraket[0] = '#';
   for(int i = 1; i <= 20; ++i)
    UpperBraket[i] = '-';
   UpperBraket[21] = '#';
   BotomBraket[22] = '\0';

   BotomBraket[0] = '#';
   for(int i = 1; i <= 20; ++i)
    BotomBraket[i] = '-';
   BotomBraket[21] = '#';
   BotomBraket[22] = '\0';
}

int main()   
{   

setlocale(LC_CTYPE,"Russian"); // установка русского языка   

InitBrakets();     // Незабудь скобки проинициализировать

char act; // переменная для хранения ввода пользователя   
int ch; // ввод пользователя приведённый к типу int   
int x = 0; // две переменные для хранения координат пользователя   
int y = 0;   
char map[15][20]; // двумерный массив для хранения игровой карты   

// блок инициализации массива   
// внешний цикл отвечает за строки   
for (int i = 0; i< 15; i++)   
{   
   // внутренний цикл отвечает за столбцы   
   for (int j = 0; j< 20; j++)   
   {   
    map[i][j] = ' ';   
   }   
}   

map[0][0] = 'Т'; // помещаем игровой персонаж в начало координат   
while (1)   
{   
   system("cls"); // вызов функции очистки экрана   

   cout << UpperBraket << '\t' << UpperBraket << endl;  // Рисуем верхнюю скобку
   for (int i = 0; i < 15; i++)   
   {   
    cout << '|'; // рисуем левую боковую рамку
    for (int j = 0; j < 20; j++)   
    {   
     cout << map[i][j]; // в циклах поэлементно выводится массив   
    }   
    cout << '|' << '\t'    << '|'        // рисуем остальные   
         << "                    " << '|' << endl;  // боковые рамки
   }   
   cout << BotomBraket << '\t' << BotomBraket << endl;     // Рисуем нижнюю скобку

   act = _getch();   
   ch = static_cast<int>(act);   

   switch (static_cast<int>(act))   
   {   
   case -32:   
    break;   
   case 27:   
    exit(0);   
    break;   
   case 75:   
    map[x][y] = ' ';    // "Убираем" объект со старой координаты   
    y--;    // изменяем координаты   
         // "рисуем" объект на новом месте   
    break;   
   case 77:   
    map[x][y] = ' ';   
    y++;   
    break;   
   case 80:   
    map[x][y] = ' ';   
    x++;   
    break;   
   case 72:   
    map[x][y] = ' ';   
    x--;   
    break;   
   }   
     
   if(x < 0)  x = 0;  // проверка
   if(y < 0)  y = 0;  // если выходит
   if(x > 14) x = 14;  // за пределы карты
   if(y > 19) y = 19;  // возвращяем на место
   map[x][y] = 'T';  // Выносим присваивание
} // конец цикла while   

_getch();   
return 0;   
}

Еще один вариант, очень жопоруко и без всяких коментариев но зато можно управлять букавками на обоих полях на правом стрелками, на левом WASD.

Code

#include <iostream> // cin, cout  
#include <clocale> // поддержка русского языка  
#include <conio.h> // _getch()  
#include <stdlib.h> // поддержка функции очистки экрана system("cls")  

using namespace std;  

char UpperBraket[22];     // Верхняя рамка боевого поля
char BotomBraket[22];     // Нижняя рамка боевого поля

// <<<<< Ф-я формирующяя нижнюю и верхнюю рамки, нужна для оформления не более >>>>>
void InitBrakets(void)
{
  UpperBraket[0] = '#';
  for(int i = 1; i <= 20; ++i)
   UpperBraket[i] = '-';
  UpperBraket[21] = '#';
  BotomBraket[22] = '\0';

  BotomBraket[0] = '#';
  for(int i = 1; i <= 20; ++i)
   BotomBraket[i] = '-';
  BotomBraket[21] = '#';
  BotomBraket[22] = '\0';
}

int main()  
{  

setlocale(LC_CTYPE,"Russian"); // установка русского языка  

InitBrakets();     // Незабудь скобки проинициализировать

char act; // переменная для хранения ввода пользователя  
int ch; // ввод пользователя приведённый к типу int  
int x1 = 0; // две переменные для хранения координат пользователя  
int y1 = 0;  
int x2 = 0;
int y2 = 0;
char map1[15][20]; // двумерный массив для хранения игровой карты  
char map2[15][20];

// блок инициализации массива  
// внешний цикл отвечает за строки  
for (int i = 0; i< 15; i++)  
{  
  // внутренний цикл отвечает за столбцы  
  for (int j = 0; j< 20; j++)  
  {  
   map1[i][j] = ' ';  
   map2[i][j] = ' ';
  }  
}  

map1[0][0] = 'Т'; // помещаем игровой персонаж в начало координат  
map2[0][0] = 'X';  
while (1)  
{  
  system("cls"); // вызов функции очистки экрана  

  cout << UpperBraket << '\t' << UpperBraket << endl;  // Рисуем верхнюю скобку
  for (int i = 0; i < 15; i++)  
  {  
   cout << '|'; // рисуем левую боковую рамку
   for (int j = 0; j < 20; j++)  
   {  
    cout << map1[i][j]; // в циклах поэлементно выводится массив  
   }  
   cout << '|' << '\t'    << '|';
   for (int j = 0; j < 20; j++)  
   {  
    cout << map2[i][j]; // в циклах поэлементно выводится массив  
   }  
   cout << '|' << endl;

  }  
  cout << BotomBraket << '\t' << BotomBraket << endl;     // Рисуем нижнюю скобку

  act = _getch();  
  ch = static_cast<int>(act);  

  switch (static_cast<int>(act))  
  {  
  case -32:  
   break;  
  case 27:  
   exit(0);  
   break;  
  case 75:  
   map2[x2][y2] = ' ';    // "Убираем" объект со старой координаты  
   y2--;    // изменяем координаты  
        // "рисуем" объект на новом месте  
   break;  
  case 77:  
   map2[x2][y2] = ' ';  
   y2++;  
   break;  
  case 80:  
   map2[x2][y2] = ' ';  
   x2++;  
   break;  
  case 72:  
   map2[x2][y2] = ' ';  
   x2--;  
   break;
  case 'w':
   map1[x1][y1] = ' ';  
   x1--;
   break;
  case 's':
   map1[x1][y1] = ' ';  
   x1++;
   break;
  case 'a':
   map1[x1][y1] = ' ';
   y1--;
   break;
  case 'd':
   map1[x1][y1] = ' ';  
   y1++;
   break;
  }  
   
  if(x1 < 0)  x1 = 0;  // проверка
  if(y1 < 0)  y1 = 0;  // если выходит
  if(x1 > 14) x1 = 14;  // за пределы карты
  if(y1 > 19) y1 = 19;  // возвращяем на место
  map1[x1][y1] = 'T';  // Выносим присваивание
  if(x2 < 0)  x2 = 0;  // проверка
  if(y2 < 0)  y2 = 0;  // если выходит
  if(x2 > 14) x2 = 14;  // за пределы карты
  if(y2 > 19) y2 = 19;  // возвращяем на место
  map2[x2][y2] = 'X';
} // конец цикла while  

_getch();  
return 0;  
}





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 21:39
MatouДата: Пятница, 05 Ноября 2010, 20:29 | Сообщение # 1084 | Тема: помогите если не очень трудно
Исходный коТ
Сейчас нет на сайте
devil-hunter, Что этот код вообще должен делать? Самхивает на консольный морской бой, только не понятно почему размер массива 15 на 20.

1) Во первых не к чему делать присваивание новых координат после каждоко кейса (case) достаточно сделать это посде свитча(switch), более того если делать так как ты делаешь, то и проверку придется после каждого кейса делать. Правильнее было бы так:

Code

  switch (static_cast<int>(act))  
  {  
  case -32:  
   break;  
  case 27:  
   exit(0);  
   break;  
  case 75:  
   map[x][y] = ' ';    // "Убираем" объект со старой координаты  
   y--;    // изменяем координаты  
        // "рисуем" объект на новом месте  
   break;  
  case 77:  
   map[x][y] = ' ';  
   y++;  
   break;  
  case 80:  
   map[x][y] = ' ';  
   x++;  
   break;  
  case 72:  
   map[x][y] = ' ';  
   x--;  
   break;  
  }  
   
  if(x < 0)  x = 0;  // проверка
  if(y < 0)  y = 0;  // если выходит
  if(x > 14) x = 14;  // за пределы карты
  if(y > 19) y = 19;  // возвращяем на место
  map[x][y] = 'T';  // Выносим присваивание





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 20:48
MatouДата: Пятница, 05 Ноября 2010, 17:38 | Сообщение # 1085 | Тема: Нубский ворпос.
Исходный коТ
Сейчас нет на сайте
Fallout, Есть форумы где так делают, но со временем там накапливаются тысячи постов в одной теме и их все равно никто не читает и просто дописывают однообразные вопросы в конце. В общем разницы особо нету никакой, что 100500 тем что 100500 одинаковых постов в одной теме.


MatouДата: Пятница, 05 Ноября 2010, 17:32 | Сообщение # 1086 | Тема: Робота с видеокамерой
Исходный коТ
Сейчас нет на сайте
А причем сдесь знания С++? Насколько я понимаю тут важнее алгоритм распознавания обьекта и то как движется обьект по отношению к камере.


MatouДата: Пятница, 05 Ноября 2010, 14:31 | Сообщение # 1087 | Тема: Помогите решить задачи по С++
Исходный коТ
Сейчас нет на сайте
Задание №7
Code

#include <iostream>
#include <math.h>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
    locale::global(locale("rus"));
    struct RECORD{
     string header;  // Название детали
     int quantity;  // Коллчичество деталей
     int shop;   // Номер цеха
    };

    cout << "Введите колличество записей о выпущенных деталях: ";
    int N;
    cin >> N;

    RECORD* details;
    details = new RECORD[N];

    for(int i = 0; i < N; ++i)
    {
     cout << "Введите номер цеха: "; cin >> details[i].shop;
     cout << "Введите название детали: "; cin >> details[i].header;
     cout << "Введите кол-во деталей выпущенных данным цехом: "; cin >> details[i].quantity;
    }

    for(int i = 0; i < N; ++i)
    {
     cout << details[i].header << '\t' << details[i].shop << '\t' << details[i].quantity << endl;
    }

    cout << "Введите номер цеха, для которого высчитывается общее колличество выпущенных изделий: ";
    int shop;
    cin >> shop;

    int count = 0;
    for(int i = 0; i < N; ++i)
    {

     if(details[i].shop == shop)
      count += details[i].quantity;
    }

    cout << "Цех номер " << shop << " выпустил " << count << " дуталей" << endl;
}

Тут имеются недоделки и неопределенности по поводу которых я уже отписал в личку.

Задание №8

Code

#include <iostream>
#include <math.h>     
using namespace std;

double f(double x)
{
    int const first = 1;
    int const last = 20;

    double s = 0;

    for(int n = first; n <= last; ++n)
     s += (2 * n + 1) * pow(x, n - 1) / sin(n * x);

    return s;
}

int main(int argc, char** argv)
{
    double const a = 0.1;
    double const b = 1.2;
    double const h = 0.1;

    cout << "x\t\ty = f(x)" << endl;

    for(double x = a; x <=b; x += h)
     cout << x << "\t\t" << f(x) << endl;
}

Это бывшее задание №3, просто я не сразу прочел все задания. В общем решение задания №3 я изменил убрав функцию f(x) и поместив ее тело в main.

Задание №10

Code

#include <iostream>
#include <math.h>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
    locale::global(locale("rus"));
    struct RECORD{
     string name;
     string city;
     int point;
    };

    cout << "Введите колличестов записей о студентах: ";
    int N;
    cin >> N;

    RECORD* students = new RECORD[N];

    for(int i = 0; i < N; ++i)
    {
     cout << "Введите ФИО студента: "; cin >> students[i].name;
     cout << "Введите город студента: "; cin >> students[i].city;
     cout << "Введите средний балл студента: "; cin >> students[i].point;
    }

    string const city = "Minsk";
    int const point = 220;

    for(int i = 0; i < N; ++i)
     if(students[i].city ==  city && students[i].point > point)
      cout << students[i].name << '\t' << students[i].city << students[i].point << endl;
}

Здесь имеются те же проблеммы что и в задании №7

А куда в последнем задании пристроить пузырьковую сортировку? В моем решении никакой сортировки нету.





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 17:46
MatouДата: Пятница, 05 Ноября 2010, 13:51 | Сообщение # 1088 | Тема: Приспособить класс string к русскому алфавиту
Исходный коТ
Сейчас нет на сайте
собственно вопрос в теме, но еще раз поясню:
Code

#include <string> //подключаю описание
locale::global(locale("rus")); // эта штука у меня есть
//...
string str;    // обьявляю обьект
cin >> str;    // что-то там пытаюсь в него записать кириллицей
cout << str;   // выдает ёгрики

вопрос, как вы дагадались, что нужно сделать чтобы ёгрики не выдавал?





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 13:52
MatouДата: Четверг, 04 Ноября 2010, 21:32 | Сообщение # 1089 | Тема: Помогите решить задачи по С++
Исходный коТ
Сейчас нет на сайте
Задание №1
Code

#include <iostream>
#include <math.h>      
using namespace std;      

int main(int argc, char** argv)
{
     double x = 182.51;
     double y = 18.225;
     double z = -0.032981;
     double s = 0;

     double a1, a2;

     a1 = pow(x, y / x);
     a1 -= pow(y / x, 1.0 / 3.0);
     a1 = abs(a1);

     a2 = cos(y) - z / (y - x);
     a2 /= 1 + pow(y - x, 2);     
     a2 *= (y - x);        
         
     s = a1 + a2;

     cout << "x = " << x << endl;
     cout << "y = " << y << endl;
     cout << "z = " << z << endl;
     cout << "s = " << s << endl;
}

Не вижу у себя ошибок, но последняя значащяя цифра результата не совпадает sad

Задание №2

Code

#include <iostream>
#include <math.h>      
using namespace std;      

int main(int argc, char** argv)
{
     locale::global(locale("rus"));     

     double x, y, s;

     cout << "Введите x: "; cin >> x;
     cout << "Введите y: "; cin >> y;

     if(x > abs(y))
     {
      s = 2 * pow(x, 3) + 3 * pow(y, 2);

      cout << "x > |y|, поэтому s = 2 * x^3 + 3 * y^2 = " << s << endl;
     }
     else if(3 < x && x < abs(y))
     {
      s = abs(x - y);

      cout << "3 < x < |y|, поэтому s = |x - y| = " << s << endl;
     }
     else
     {
      s = pow(abs(x - y), 1.0 / 3.0);

      cout << "условия x > |y| и 3 < x < |y| не выполнены, поэтому s = pow(|x - y|, 1 / 3) = " << s << endl;
     }
}

Задание №3

Code

#include <iostream>
#include <math.h>   
using namespace std;

int main(int argc, char** argv)
{
  double const a = 0.1;
  double const b = 1.2;
  double const h = 0.1;

  cout << "x\t\ty = f(x)" << endl;

  for(double x = a; x <=b; x += h)
  {
   int const first = 1;
   int const last = 20;

   double y = 0;

   for(int n = first; n <= last; ++n)
    y += (2 * n + 1) * pow(x, n - 1) / sin(n * x);

   cout << x << "\t\t" << y << endl;
  }
}

Задание №4

Code

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
     locale::global(locale("rus"));

     int const max = 100;    // Максимальный размер массива, число k должно лежать в пределах 0..100
     double m[max];
     double negative[max];    // Массив для отрицательных элементов
     double positive[max];    // Массив для не отрицательных элементов

     int k;     // Число элементов в массиве, задается пользователем
     int indexN = 0;   // Индексы для адресации и подсчета
     int indexP = 0;   // элеметов в дополнительных массивах

     cout << "Введите колличестов элементов в массиве: "; cin >> k;

     // заполнение массива
     for(int i = 0; i < k; ++i)
     {
      cout << "Ведите элемент массива номер " << i + 1 << ": "; cin >> m[i];
     }

     // заполнение дополнительных массивов
     for(int i = 0; i < k; ++i)
      if(m[i] < 0)
       negative[indexN++] = m[i];
      else
       positive[indexP++] = m[i];

     cout << "Исходный массив: " << endl;
     for(int i = 0; i < k; ++i)
      cout << m[i] << endl;

     cout << "Maccив с отрицательными элементами: " << endl;
     for(int i = 0; i < indexN; ++i)
      cout << negative[i] << endl;

     cout << "Maccив с остальными элементами: " << endl;
     for(int i = 0; i < indexP; ++i)
      cout << positive[i] << endl;
}

Задание №5

Code

#include <iostream>
#include <math.h>      
using namespace std;

int main(int argc, char** argv)
{
     locale::global(locale("rus"));
         
     double** matrix;

     int N, M;

     cout << "Введите размерность матрицы M, N: "; cin >> M >> N;

     matrix = new double* [M];

     for(int i = 0; i < M; ++i)
      matrix[i] = new double[N];

     for(int i = 0; i < M; ++i)
      for(int j = 0; j < N; ++j)
      {
       cout << "Введите элемент maxrix[" << i << "][" << j << "] = ";
       cin >> matrix[i][j];
      }

     // Поиск максимального элемента выше побочной диагонали
     double max = matrix[0][0];
     for(int i = 0; i < M - 1; ++i)
      for(int j = 0; j < N - i - 1; ++j)
       if(max < matrix[i][j]) max = matrix[i][j];

     // Печать матрицы
     for(int i = 0; i < M; ++i)
     {
      for(int j = 0; j < N; ++j)
       cout << matrix[i][j] << '\t';
      cout << endl;
     }

     cout << "Максимальный елемент выше побочной диаганали равен: " << max;
}

Тут есть одна неточность, если М != N алгоритм поиска максимального элемента будет работать некорректно, чтобы этого избежать можно, например, предварительно "оквадратить" матрицу.

Ну и насчет побочной диагонали, я там понимаю она выгледит как-то так:
Диагональ обозначена красным цветом, а то что выше нее - зеленым.

На остальное пока время не хватает, попозже решу smile





Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 14:35
MatouДата: Вторник, 02 Ноября 2010, 00:54 | Сообщение # 1090 | Тема: Фильмы постапокалипсисной тематики
Исходный коТ
Сейчас нет на сайте
Нити
На следующий день
Письма мертвого человека



MatouДата: Понедельник, 01 Ноября 2010, 21:00 | Сообщение # 1091 | Тема: Знакомство!
Исходный коТ
Сейчас нет на сайте
А я пошел в туалет повернул не туда smile


MatouДата: Понедельник, 01 Ноября 2010, 20:45 | Сообщение # 1092 | Тема: Исходники ОС
Исходный коТ
Сейчас нет на сайте
Впринципе если тебе надо учиться, а знаний и опыта не много, то лучше взять учебник, могу посоветовать"Операционные системы. Разработка и реализация" Э. Таненбаум, А. Вудхалл. К ней идет диск с ОС MINIX3.

Quote (vlados)
мне надо с оконным интерфейсом...(Графический интерфейс)

У операционных систем немного другое предназначение нежели предоставлять графических интерфейс. Может быть тебе надо именно GUI освоить, а не ОС?



MatouДата: Воскресенье, 31 Октября 2010, 14:12 | Сообщение # 1093 | Тема: Нубский ворпос.
Исходный коТ
Сейчас нет на сайте
Обратный вызов же.

Если на пальцах для твоего случая, то эта функция вызывается системой при обработке событий окна к которому она привязана. Вот на это CALLBACK и указывает, ну и тут http://ru.wikipedia.org/wiki/Callback_(программирование) можно еще почитать.





Сообщение отредактировал Matou - Воскресенье, 31 Октября 2010, 14:18
MatouДата: Пятница, 29 Октября 2010, 13:41 | Сообщение # 1094 | Тема: Вопрос нуба.
Исходный коТ
Сейчас нет на сайте
Quote (ezhickovich)
Дык таких тем было уже много, но видите ли гуглить всем влом...

Ну так выложил бы сцылки на самые интересные темы этого ряда.



MatouДата: Пятница, 29 Октября 2010, 13:38 | Сообщение # 1095 | Тема: Оцените дизайн кухни
Исходный коТ
Сейчас нет на сайте
Ужос. Если бы мне кто-то попытался такой дизайн втюхать...

Я бы посоветовал не делать все таким ярким, особенно это обой касается.



MatouДата: Среда, 27 Октября 2010, 23:15 | Сообщение # 1096 | Тема: Вопрос нуба.
Исходный коТ
Сейчас нет на сайте
Надо бы создать темку где у всех апологетов лучшего учебника по С++ для начинающих будет возможность высказаться почему именно та или иная книга лучше. Интересно было бы почитать.


MatouДата: Вторник, 26 Октября 2010, 21:52 | Сообщение # 1097 | Тема: Вопрос нуба.
Исходный коТ
Сейчас нет на сайте
MiKanUil))) тролит во всех постах, а вы ведетесь. Я останусь верен своим убеждениям и посоветую Страуструппа но с этим не все согласны


MatouДата: Вторник, 26 Октября 2010, 00:41 | Сообщение # 1098 | Тема: Полностью пройденные вами игры
Исходный коТ
Сейчас нет на сайте
Тысячи их! Перечислять всякую попсу вроде GTA ни к чему, лучше скажу что в конце 90х прошел РЕМБО на денди, на каком-то азиатском языке, хочу заметить что для получения тех или иных заданий или прохождения уровня там были диалоги. Как и многие игры на денди того времени она была хардкорной и без возможности сохранения, а уш бесконечные попытки понять что из себя представляют наборы иероглифов и что из них нужно выбрать и для чего - просто убивали (X_X)




Сообщение отредактировал Matou - Пятница, 05 Ноября 2010, 00:42
MatouДата: Понедельник, 25 Октября 2010, 21:40 | Сообщение # 1099 | Тема: Начальные параметры объектов, кто как?
Исходный коТ
Сейчас нет на сайте
Из внешнего файла как-то удобней выходит, широкие возможности по параметризации без перекомпиляции. В процессе разработки удобнее будет настраивать те или иные параметры.


MatouДата: Понедельник, 25 Октября 2010, 13:53 | Сообщение # 1100 | Тема: Общение в скайпе для пользователей GcUp.ru!
Исходный коТ
Сейчас нет на сайте
Опять я по сообщениям не дотягиваю sad


Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг