Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/516: Рейтинг темы: голосов - 516, средняя оценка - 5.00
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168

Создание игры(2d)

12.05.2009, 21:08. Показов 100854. Ответов 423
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно идея такого создать нечто на подобиe ->
http://www.newgrounds.com/portal/view/494301

Буду сюда задвать свои вопросы,думаю всем кто будет увлечён создание игры тоже будет интресно)

Otaka,этот задний буфер замещает собой background плюс курсор оставляет на неём свои артефакты,как его очищать,да так чтоб ещё и background у нас был.

________________________________________ ________________________________________ _________________________
Основные моменты
Вычисление угла поворота персонажа в зависимости от положения курсора мыши
То же
Поворот изображения(тут еще как смещать точку поворота)
Делаем пули
Все еще непонятки с пулями
Начинаем вычисление коллизий
Идея про то, как это должно быть
Как это должно быть реализовано
Как повернуть массив точек(регион)?
А тут код(в нем есть глюк. Потом есть исправленная версия)
Находим столкновение региона и линии. Исправленная версия столкновения регионов
Как это должно выглядеть в принципе?
Начинается долгое обсуждение того как делать редактор уровней
...
...
Первый вариант редактора
Снова эти пули
Функция которая бьет изображения на мелкие куски(тайлы)
Версия редактора
Загрузка сохранение
Еще версия
4
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2009, 21:08
Ответы с готовыми решениями:

Создание игры
Извините за очередную тему подобного рода, но все же не могу не спросить: Мечтаю о создании игры, пусть и очень простой.. Сейчас для меня...

Создание игры
Доброго времени суток! Лабораторная работа - сделать игру. Есть идея. Нужны любые советы, коментарии, пожелания и критика. Спасибо! ...

Создание игры
Люди есть у кого нибудь исходники игры на подобие игр от ALAWAR, что бы разобрать и поучиться на этом примере? Или подскажите где можно...

423
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
12.07.2009, 12:01
Студворк — интернет-сервис помощи студентам
Так, давай разберемся, что уже есть.
Координаты конца автомата и координаты окончательной точки полета пули при любых поворотах персонажа тебе известны, я так полагаю.

Думаю, надо намалевать небольшой огонек, и во время стрельбы этот огонек поворачивать в соответсвии с позицией персонажа, и помещеть его в точку конца дула. Саму траекторию полета пули рисовать не нужно, а просто проверять на соприкосновение эту траекторию и регионы врагов.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
12.07.2009, 15:16  [ТС]
Да всё это у нас есть.

Так щас я сделаю mazzle flаsh(попытаюсь точнее),и потом попробуем два варианта с прорисвкой траектории пули и без.

Добавлено через 1 час 31 минуту 4 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
bool first_shoot = true;
 
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if(Key==VK_LBUTTON)
   {IsLMCDown = true;}
}
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
if(Key==VK_LBUTTON)
   {first_shoot = true;
   IsLMCDown = false;}
}
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
........
if (IsLMCDown == true) {
    if (first_shoot == true) {
          Shoot();
          first_shoot = false;}
  tick_wpn_count += 1;
          if(tick_wpn_count == fire_speed){
          Shoot();
          tick_wpn_count = 0;}
  }
//Это, если игрок будет жать LMC(Левая кнопка мыши),то выстрелы будут происходить через определённое время в зависимости от скорострельности,если игрок нажал на LMC 1 выстрел происходит незамедлительно
 
void __fastcall Shoot()
{
FPoint * Bullet = new FPoint[2];
Bullet[0] = FPoint(0,0);
Bullet[1] = FPoint(100,100);
Bul.p = Bullet;
Bul.count=2;
Bul.SetOriginPoint(Svalker->Width+52,Svalker->Height+100);
Bul.x=SvPosX;
Bul.y=SvPosY;
Bul.Rotate(SvAng+130+(Razbros*2-Razbros));
SetViewportOrgEx(BG->Canvas->Handle,Svalker->Width+52,Svalker->Height+100,NULL);
RotateDC(BG->Canvas->Handle,SvAng);
BG->Canvas->Draw(SvPosX,SvPosY,Muz_flash);
SetViewportOrgEx(BG->Canvas->Handle,0,0,NULL);
RotateDC(BG->Canvas->Handle,0);
}
Вот у меня 2 проблемы:

1.Не знаю как убрать физ.модель пули.Точнее знаю:
C++
1
Bullet[1] = FPoint(0,0);
Но в какой части кода это записать я не понимаю,плюс как сделать FPoints Public,а то любая часть программы кроме Shoot() его не видит.

2.Изображение выстрела не выводиться на экран.
Изображения
  
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
12.07.2009, 17:59
C++
1
FPoint * Bullet = new FPoint[2];
Некрасиво получается - утечка памяти однако. Ты ведь память выделяешь, но не освобождаешь. Я думаю, что лучше всего написать процедуру пересечения региона с линией, а там уже будет все очень просто, одна точка есть-конец дула, а другую точку считаешь. Вот и все.
А почему не вывится огонь? может ты его просто не рисуешь?
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
12.07.2009, 18:02  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall Shoot()
{
FPoint * Bullet = new FPoint[2];
Bullet[0] = FPoint(0,0);
Bullet[1] = FPoint(100,100);
Bul.p = Bullet;
Bul.count=2;
Bul.SetOriginPoint(Svalker->Width+52,Svalker->Height+100);
Bul.x=SvPosX;
Bul.y=SvPosY;
Bul.Rotate(SvAng+130+(Razbros*2-Razbros));
SetViewportOrgEx(BG->Canvas->Handle,Svalker->Width+52,Svalker->Height+100,NULL);
RotateDC(BG->Canvas->Handle,SvAng);
BG->Canvas->Draw(SvPosX,SvPosY,Muz_flash);

C++
1
2
SetViewportOrgEx(BG->Canvas->Handle,0,0,NULL);
RotateDC(BG->Canvas->Handle,0);
}

Да вроде вот здесь его рисую. Сможешь написать тогда столкновение региона с линией?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
12.07.2009, 20:41
Вот тебе процедура обнаружения столкновения прямой и региона:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
bool LineHitTest(FPoint*p1,FPoint*p2)
        {
        int l1x1=p1->x;
        int l1y1=p1->y;
        int l1x2=p2->x;
        int l1y2=p2->y;
        int tx=x-Ox;
        int ty=y-Oy;
        for(int i=0;i<count;i++)
                        {
                        int l2x1=p[i].x+tx;
                        int l2y1=p[i].y+ty;
                        int l2x2;
                        int l2y2;
                        if(i==(count-1))
                                {
                                l2x2=p[0].x;
                                l2y2=p[0].y;
                                }else
                                {
                                l2x2=p[i+1].x;
                                l2y2=p[i+1].y;
                                }
                        l2x2+=tx;
                        l2y2+=ty;
                        int v1,v2,v3,v4;
                        v1=(l2x2-l2x1)*(l1y1-l2y1)-(l2y2-l2y1)*(l1x1-l2x1);
                        v2=(l2x2-l2x1)*(l1y2-l2y1)-(l2y2-l2y1)*(l1x2-l2x1);
                        v3=(l1x2-l1x1)*(l2y1-l1y1)-(l1y2-l1y1)*(l2x1-l1x1);
                        v4=(l1x2-l1x1)*(l2y2-l1y1)-(l1y2-l1y1)*(l2x2-l1x1);
                        bool result=((v1*v2)<0)&&((v3*v4)<0);
                        if(result==true)
                                return true;
                        }
        return false;
        }
но это практически копипаст с HitTest.
Кстати, я там раньше немного затупил с HitTest, и поэтому она несовсем правильно определала некоторые ситуации. Это все последствия необдуманного копипастирования.
Вот тебе исправленная версия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
bool HitTest(CRegion*reg)
        {
        int f1x=x;
        int f1y=y;
        int f2x=reg->x;
        int f2y=reg->y;
        int distance=sqrt(((f1x-f2x)*(f1x-f2x))+((f1y-f2y)*(f1y-f2y)));
        if(distance>(reg->ConvexRadius+ConvexRadius))return false;//Дальше можно не проверять, так как объекты находятся слишком далеко друг от друга
        //Если не вышли ранее, то это значит, что у фигур пересекаются их охватывающие окружности
        //Будем проверять пересечения каждой линии
        for(int j=0;j<reg->count;j++)
                {
                int l1x1=reg->p[j].x+reg->x-reg->Ox;
                int l1y1=reg->p[j].y+reg->y-reg->Oy;
                int l1x2;
                int l1y2;
                if(j==(reg->count-1))
                        {
                        l1x2=reg->p[0].x;
                        l1y2=reg->p[0].y;
                        }else
                        {
                        l1x2=reg->p[j+1].x;
                        l1y2=reg->p[j+1].y;
                        }
                l1x2+=reg->x-reg->Ox;
                l1y2+=reg->y-reg->Oy;
                for(int i=0;i<count;i++)
                        {
                        int l2x1=p[i].x+x-Ox;
                        int l2y1=p[i].y+y-Oy;
                        int l2x2;
                        int l2y2;
                        if(i==(count-1))//Тута была ошибка
                                {
                                l2x2=p[0].x;
                                l2y2=p[0].y;
                                }else
                                {
                                l2x2=p[i+1].x;
                                l2y2=p[i+1].y;
                                }
                        l2x2+=x-Ox;
                        l2y2+=y-Oy;
                        int v1,v2,v3,v4;
                        v1=(l2x2-l2x1)*(l1y1-l2y1)-(l2y2-l2y1)*(l1x1-l2x1);
                        v2=(l2x2-l2x1)*(l1y2-l2y1)-(l2y2-l2y1)*(l1x2-l2x1);
                        v3=(l1x2-l1x1)*(l2y1-l1y1)-(l1y2-l1y1)*(l2x1-l1x1);
                        v4=(l1x2-l1x1)*(l2y2-l1y1)-(l1y2-l1y1)*(l2x2-l1x1);
                        bool result=((v1*v2)<0)&&((v3*v4)<0);
                        if(result==true)
                                return true;
                        }
                }
        return false;
        }
2
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
13.07.2009, 22:46  [ТС]
О,заработал Transparent)

C++
1
2
3
4
Muz_flash = new Graphics::TBitmap();
Muz_flash->LoadFromFile("E:\\Svalker Work\\Project\\Textures\\Svk\\Weapons\\Ak 74\\Muz\\1.bmp");
Muz_flash->Transparent = 1;
Muz_flash->TransparentColor=RGB(255,0,255);
Вот в таком порядке всё суперски работает, щас будем делать выстрел.

Добавлено через 5 минут 44 секунды
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
......
if (shoot_draw == true) {
  BG->Canvas->Draw(100,100,Muz_flash);
  Form1->Canvas->Draw(0,0,BG);
  shoot_draw = false;
 }
Всёравно не выводиться,выводиться если сделать так)
C++
1
2
3
4
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
BG->Canvas->Draw(100,100,Muz_flash);
}
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.07.2009, 10:26
У тебя есть главный цикл игры. В нем надо делать обработки(это цикл, где и прорисовка фона, и персонажа). За его пределами рисовать ничего нельзя, так как это привнесет сумятицу в частоту кадров, ты просто можешь ничего не заметить.

А вот тут, я чо то не понял, что это вообще за таймер? Вроде как ведь в Timer1Timer и есть все обработки? или ты забыл там поставить, что там ... ...?
C++
1
2
3
4
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
BG->Canvas->Draw(100,100,Muz_flash);
}
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.07.2009, 13:02  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
.......//Не работает.
if (shoot_draw == true) {
  BG->Canvas->Draw(100,100,Muz_flash);
  Form1->Canvas->Draw(0,0,BG);
  shoot_draw = false;
 }
......
BG->Canvas->Draw(100,100,Muz_flash);
//Вот так работает,но тогда он всегда отображаеться,а мне это не надо.
}
Это один и тот же таймер где всё прорисовываеться.(Главный)

Добавлено через 1 час 17 минут 27 секунд
Всё я решил проблему теперь всё афигенно стреляет(моя ошибка была,я коегде не дописал одну часть кода +) .

Но возникла следующая,работают все VK команды кроме:

C++
1
2
Key==VK_LBUTTON;
Key==VK_RBUTTON;
Тоесть,левая и правая кнопки мыши,что делать?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.07.2009, 18:41
Еге ге, как же ты? мышь в клавиатуре ищешь?
Надо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if(Button== mbLeft)
        {
        ...
        }
if(Button==mbRight)
        {
        ...
        }
}
2
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.07.2009, 18:51  [ТС]
Спасибо,слушай мну стрёмно уже ()_(),ведь стрелять он уже умеет,значит пришло время делать A.I. o_0
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.07.2009, 18:59
Сначала сделай, здоровый уровень(или хотябы, чтобы в проге это было)
Возможность свободно по нему пересещаться.
Загрузка новых зон(при переходе из зоны в зону).
Я вообще думаю, что туда бы неплохо было бы Луа прикрутить привинтить, так как это на порядок облегчит управление уровнем, а также ты получишь опыт встраивания скриптового языка, тем более это не сложно.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.07.2009, 20:54  [ТС]
О слушай,это очень круто,всегда мечтал об этом,а где про это можно почитать?)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
14.07.2009, 22:51
Где про это можно почитать я не знаю, но ты можешь по вопросику спрашивать меня, и я тебе расскажу. Авось чего-то и выйдет.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.07.2009, 23:00  [ТС]
Хорошо,и как мне программировать в Lua,точнее с чего мне начать)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.07.2009, 11:09
Подожди. Сначала нужно, чтобы был большой уровень, и некая штуковина для редактирования этих уровней(так вот), иначе мы не сможем получить от луа всей критизны.

ДЛя чего она тут? Например идет храбрый сталкер по городку и видит дверь. Он её пытается открыть...
Неужели ты будешь в скомпиленой проги для каждого такого случая делать какую-то обработку? С луа можно назначить через редактор уровней этой двери такорй скрипт:
ЕСЛИ(РЮКЗАК(КЛЮЧ_123456)) ТО ОТКРЫТЬ() ИНАЧЕ ВЗОРВАТЬ().
Так же и для бутылочек можно назначить
УСТАНОВИТЬ_ЗДОРОВЬЕ(ЗДОРОВЬЕ()+50);
Если сделать достаточное количество функций, то выйдет просто суппер. ТАк сделано практически во всех современных игрулях.
Но повторяю - нужен редактор.
И еще структура проги должна буть такой, чтобы уровень грузился из файла.
LoadLevel("Зона1.lvl");
И в этих файлах записаны: поверхность, объекты, враги, друзья, предметы, артефакты...
Как это будет будем делать врагов и их (чёто типа)АИ, потом уже займемся скриптингом.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.07.2009, 11:37  [ТС]
Хорошо уровнем я щас займусь,нарисуем что нибудь.

Как мне быть вот с этим : штуковина для редактирования этих уровней/
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.07.2009, 12:03
KTYJIX, а если у тебя что-то опять более-менее бегает, может выложишь, что получилось?
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.07.2009, 14:44  [ТС]
Вот,прошу.Otaka какой примерно нужен уровень?
Вложения
Тип файла: rar Svalker_00001.rar (5.20 Мб, 134 просмотров)
1
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.07.2009, 16:14
Нужно ведь сделать так, чтобы у нас был уровень большой пребольшой. Ты ведь не собираешься ограничиваться этими 500*500?

В уровне нужно знать его размер в каких то единицах, например 100*100. Каждая единица - квадрат 50*50, итого у нас 5000*5000.
Итак у нас есть 100*100 матрица. В каждый элемент содержит число, это число говорит о типе поверхности:
1 - трава зеленая.
2 - выжженая земля.
3 - асфальт.
4 - высохшая трава.
5- ...
...
100-переход вода земля.
101-переход земля трава.
...
1000-вода.(квадраты с индексом>=1000 пусть будут непроходимы)

Вот. У нас например окно 800*600 , тут помещаются примерно 192 квадратика, вот мы их и рисуем.
Еще у нас есть объекты в каком-то списке, мы их тоже отрисовуем(конечно же сначала смотрим попал ли объект в область видимости, или он за экраном).
Также организовуем прокрутку уровня в зависимости от передвижений свалкера.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.07.2009, 16:27
Объясни как enum'ами пользоваться для задания типа поверхности, и как аккуратно сделать соотвествие номера и отображаемой картинки

По поводу прокрутки - есть два способа:
1. Чувак всегда отображается по центру экрана, а уровень по сути дела плывёт в сторону, противоположную движению
2. Чувак бегает по экрану, но тогда возникает неудобство на границе уровня, где дельше уровень должен плыть как из пункта 1. Правда это лечится тем, что по нажатию на кнопку можно перепозиционировать так, чтобы чувак оказался по центру. Или момент, когда уровень начнёт плыть, делать не по границе экрана, а немногоне доходя до него

В идеале надо поддержать все варианты, а пользователь выбирает то, что ему удобнее (либо в разные моменты удобно разное поведение)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2009, 16:27
Помогаю со студенческими работами здесь

Создание игры
Здравствуйте форумчане, мой вопрос состоит в том. Я молодой парень, который знает языки C++, C# и т.д. Ести небольшой интерес к созданию...

Создание игры
Добрый вечер. Начал работу над собственным проектом, и задался вопросом. (gamedev и прочие сайты перечитывал, но так ответа и не нашел....

Создание игры
Посмотрел как сейчас на коленке люди клепают инди игры под андроид\иос e.t.c. Созрел вопрос - куда двинуть, что использовать чтобы написать...

Создание игры на C++
Скажите , а можно ли создавать игры на С++? Если да , то буду рад увидеть примеры как это все реализовать и где можно. Возможно это С++...

Создание 3д игры
Извиняюсь, если такая тема уже была, не нашел. Хочу написать свою игрушку. Игрушка по типу что то gta sa. Но со своим смыслом и тп. Я готов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru