Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283

"Морской бой": нужны комментарии/замечания

05.05.2009, 14:24. Показов 6050. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал морской бой. Просьба прокоменнтировать, улучшить где возможно и помочь написать ИИ.

Вот исходники:
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
class Player
{
    public:
        Player();
        ~Player();
        void PrintFields();//напечатать поля
        bool ShipFieldTest(const int&, const int&, const int&, const int&);//проверить возможна ли установка корабля
        void setFlotShip(int);//установить корабль (int-количество палуб)
        void setFirstFieldElement(const int& x, const int& y, char znak){FirstField[y][x]=znak;}//установить елемент первого поля
        char getFirstFieldElement(const int& x, const int& y){return FirstField[y][x];};//получить элемент первого поля
        void setSecondFieldElement(const int& x, const int& y, char znak){SecondField[y][x]=znak;}//установить елемент второго поля
        char getSecondFieldElement(const int& x, const int& y){return SecondField[y][x];}//получить элемент второго поля
        void getAtackCoordinates(int& x, int& y);//получить координаты атаки
        bool ShipTest(const int&, const int&);//проверить уничтожен ли корабль
        void getDeletedShipCoordinates(const int&, const int&, int&, int&, int&, int&);//получить координаты уничтоженного корабля
        void DeleteOpponentShip(const int&, const int&, const int&, const int&);//обозначить уничтоженный корабль на втором поле
        void DeletePlayerShip(const int&, const int&, const int&, const int&);//обозначить свой уничтоженный корабль
        void DeleteFlotLife(){FlotLife--;}
        bool FlotLifeTest(){return FlotLife>0 ? false : true;}//не уничтожена ли экскадра
    protected:
        char FirstField[12][12];
        char SecondField[12][12];
        int FlotLife;//общее количество палуб в экскадре
};
 
 
Player::Player():
    FlotLife(20)
{
    for(int i=0; i<12; i++)
        for(int j=0; j<12; j++)
            FirstField[i][j]=' ';
            
    for(int i=0; i<12; i++)
        for(int j=0; j<12; j++)
            SecondField[i][j]=' ';
}
 
Player::~Player()
{
    //пустое тело
}
 
void Player::PrintFields()
{
    system("cls");//очистить экран
 
    cout<<"  ";
    
    for (int i=1; i<=10; i++)//напечататать верхнюю линейку координат для FirstField
        cout<<i<<" ";
    
    cout<<"  ";
 
    for(int i=1; i<=10; i++)//напечатать верхнюю линейку координат для SecondField
        cout<<i<<" ";           
    
    cout<<endl;
    
    for(int i=1; i<=10; i++)//напечатать боковые линейки координат и сами поля
    {
        cout<<setw(2)<<i;
        
        for(int j=1; j<=10; j++)
            cout<<FirstField[i][j]<<" ";
        
        cout<<" "<<setw(2)<<i;
        
        for(int k=1; k<=10; k++)
            cout<<SecondField[i][k]<<" ";
        
        cout<<setw(2)<<i<<endl;
    }
    
    cout<<endl;
}
 
bool Player::ShipFieldTest(const int& x1, const int& y1, const int& x2, const int& y2)
{
    for(int i=y1-1; i<=y2+1; i++)
        for(int j=x1-1; j<=x2+1; j++)
            if(FirstField[i][j]!=' ')
                return true;
    return false;
}
 
void Player::setFlotShip(int size)
{
    int x1, y1, x2, y2;
    
    while(1)
    {
        cout<<"Vvedite coordinatu: ";
        cin>>x1>>y1>>x2>>y2;
    
        if((x1!=x2 && y1!=y2) || (x1<1) || (x2>10) || (y1<1) || (y2>10) || (ShipFieldTest(x1,y1,x2,y2)))
            {cout<<"Neverny vvod, ystanovka korablya nevozmojna"<<endl; continue;}
        else
            if(x2-x1!=size-1 && y2-y1!=size-1)
                {cout<<"Nevernoe colichestvo palyb"<<endl; continue;}
            else
                for(int i=y1; i<=y2; i++)
                    for(int j=x1; j<=x2; j++)
                        FirstField[i][j]='*';
        break;
    }
}
 
void Player::DeleteOpponentShip(const int& x1, const int& y1, const int& x2, const int& y2)
{
    if(x1==x2)//если корабль расположен по вертикали
    {
        for(int i=y1-1; i<=y2+1; i++)
            for(int j=x1-1; j<=x2+1; j+=2)
                SecondField[i][j]='o';
        SecondField[y1-1][x1]='o';
        SecondField[y2+1][x1]='o';
    }
    
    else
    {
        for(int i=y1-1; i<=y2+1; i+=2)
            for(int j=x1-1; j<=x2+1; j++)
                SecondField[i][j]='o';
        SecondField[y1][x1-1]='o';
        SecondField[y1][x2+1]='o';
    }
}
 
void Player::DeletePlayerShip(const int& x1, const int& y1, const int& x2, const int& y2)
{
    if(x1==x2)//если корабль расположен по вертикали
    {
        for(int i=y1-1; i<=y2+1; i++)
            for(int j=x1-1; j<=x2+1; j+=2)
                FirstField[i][j]='o';
        FirstField[y1-1][x1]='o';
        FirstField[y2+1][x1]='o';
    }
    
    else
    {
        for(int i=y1-1; i<=y2+1; i+=2)
            for(int j=x1-1; j<=x2+1; j++)
                FirstField[i][j]='o';
        FirstField[y1][x1-1]='o';
        FirstField[y1][x2+1]='o';
    }
}
 
bool Player::ShipTest(const int& x, const int& y)
{
    for(int i=y; FirstField[i][x]!=' ' && FirstField[i][x]!='o'; i++)//проитись циклами в разные стороны пока поле!=координате
        if(FirstField[i][x]=='*')//палубы корабля и веруть false если осталась целая палуба
            return false;
            
    for(int i=y; FirstField[i][x]!=' ' && FirstField[i][x]!='o'; i--)
        if(FirstField[i][x]=='*')
            return false;
            
    for(int j=x; FirstField[y][j]!=' ' && FirstField[y][j]!='o'; j++)
        if(FirstField[y][j]=='*')
            return false;
            
    for(int j=x; FirstField[y][j]!=' ' && FirstField[y][j]!='o'; j--)
        if(FirstField[y][j]=='*')
            return false;
    
    return true;
}
 
void Player::getDeletedShipCoordinates(const int& x, const int& y, int& x1, int& y1, int& x2, int& y2)
{
    if(FirstField[y+1][x]=='*' || FirstField[y+1][x]=='x' || FirstField[y-1][x]=='*' || FirstField[y-1][x]=='x')//если корабль расположен по вертикали
    {
        x1=x2=x;//присвоить х1 и х2 значение полученого 'х'
        for(int i=y; FirstField[i][x]!=' ' && FirstField[i][x]!='o'; y1=i, i--);//получить координаты у1 и у2
        for(int i=y; FirstField[i][x]!=' ' && FirstField[i][x]!='o'; y2=i, i++);
    }
    
    else//если корабль расположен по горизонтали
    {
        y1=y2=y;//присвоить у1 и у2 значение полученного 'у'
        for(int j=x; FirstField[y][j]!=' ' && FirstField[y][j]!='o'; x1=j, j--);//получить координаты х1 и х2
        for(int j=x; FirstField[y][j]!=' ' && FirstField[y][j]!='o'; x2=j, j++);
    }
}
 
void Player::getAtackCoordinates(int& x, int& y)
{
    while(1)
    {
        cout<<"Vvedite coordinatu ataki: ";
        cin>>x>>y;
        if(x<1 || x>10 || y<1 || y>10)
        {
            cout<<"Nevernui vood";
            continue;
        }
        else
            break;
    }
}

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
57
#include "Player.h"
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
class Computer : public Player
{
    public:
        void setFlotShip(int);//установить корабль в случайном порядке
        void getAtackCoordinates(int& x, int& y){x=1+rand() % 10; y=1+rand() % 10;};//получить координаты для атаки
};
 
void Computer::setFlotShip(int size)
{
    int x1,y1,x2,y2;
    srand(time(0));
    enum {VERTICAL=1};
    int POSITION;
    
    
    while(1)
    {
        POSITION=1+rand() % 2;//определить позицию корабля
        
        if(POSITION==VERTICAL)//если корабль расположен вертикально
        {
            x1=x2=1+rand() % 10;//то тогда х1=х2
            y1=1+rand() % 10;
            if(y1+size-1>10)//если вторая координата будет выходить за пределы массива
                continue;//начать цикл сначала
            else//иначе второй координате присвоить значение первой+количество палуб 
                y2=y1+size-1;
        }
        
        else//если корабль расположен горизонтально
            {
                y1=y2=1+rand() % 10;
                x1=1+rand() % 10;
                if(x1+size-1>10)
                    continue;
                else
                    x2=x1+size-1;
            }
            
        if(ShipFieldTest(x1,y1,x2,y2))//если рядом есть корабль
            continue;//начать цикл сначала
        
        else//иначе обозначить корабль на поле
        {
            for(int i=y1; i<=y2; i++)
                for(int j=x1; j<=x2; j++)
                    FirstField[i][j]='*';
            break;
        }
    }
}

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include "Computer.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
class TheGame
{
    public:
        TheGame();
        ~TheGame();
        void setShips();//установть корабли
        void RunGame();//процесс игры
    private:
        Player player;
        Computer computer;
        int x,y,x1,y1,x2,y2;//данные для атаки(x,y) и установки/уничтожения кораблей(х1,у1,х2,у2)
        bool PlayerWin;
        bool ComputerWin;
};
 
TheGame::TheGame()
{
    PlayerWin=false;
    ComputerWin=false;
}
 
 
TheGame::~TheGame()
{
 
}
 
void TheGame::setShips()//установить корабли (как свои так и компа)
{
    player.PrintFields();
    player.setFlotShip(4);
    computer.setFlotShip(4);
 
    for(int i=0; i<2; i++)
    {
        player.PrintFields();
        player.setFlotShip(3);
        computer.setFlotShip(3);
    }
 
    for(int i=0; i<3; i++)
    {
        player.PrintFields();
        player.setFlotShip(2);
        computer.setFlotShip(2);
    }
 
    for(int i=0; i<4; i++)
    {
        player.PrintFields();
        player.setFlotShip(1);
        computer.setFlotShip(1);
    }
}
 
void TheGame::RunGame()
{
    while(1)//внешний цикл объеденяет в себе два подцикла (для игрока и компа)
    {
        while(1)//ход игрока
        {
            player.PrintFields();//напечатать поля
            player.getAtackCoordinates(x,y);//получить координаты для атаки
 
            if(player.getSecondFieldElement(x,y)=='x' || player.getSecondFieldElement(x,y)=='o')
            {//действия если по полю стрелять бессмысленно
                cout<<"V eto pole strelyat bessmyslenno";
                _getch();
                continue;
            }
 
            else
            {
                if(computer.getFirstFieldElement(x,y)==' ')
                {//если промазал
                    player.setSecondFieldElement(x,y,'o');
                    player.PrintFields();
                    _getch();
                    break;
                }
 
                else//если попал
                {
                    player.setSecondFieldElement(x,y,'x');//отметить попадание на втором поле
                    computer.setFirstFieldElement(x,y,'x');//отметить попадание на первом поле у компа
 
                    if(computer.ShipTest(x,y))//если корабль уничтожен
                    {
                        computer.getDeletedShipCoordinates(x,y,x1,y1,x2,y2);//получить координаты
                        player.DeleteOpponentShip(x1,y1,x2,y2);//отметить уничтоженный корабль на втором поле
                    }
 
                    computer.DeleteFlotLife();//уменьшить жизнь экскадры на одну палубу
 
                    if(computer.FlotLifeTest())//если экскадра разгромлена
                    {
                        PlayerWin=true;
                        player.PrintFields();
                        _getch();
                        break;
                    }
                    continue;
                }
            }
        }
 
        if(PlayerWin==true)
        {
            player.PrintFields();
            cout<<"Igrok pobedil!"<<endl;
            _getch();
            break;
        }
 
        while(1)//ходит комп-действия аналогичны
        {
            computer.getAtackCoordinates(x,y);
 
            if(computer.getSecondFieldElement(x,y)=='x' || computer.getSecondFieldElement(x,y)=='o')
                continue;
 
            else
            {
                if(player.getFirstFieldElement(x,y)==' ')
                {
                    computer.setSecondFieldElement(x,y,'o');
                    player.setFirstFieldElement(x,y,'o');
                    break;
                }
 
                else
                {
                    player.setFirstFieldElement(x,y,'x');
                    computer.setSecondFieldElement(x,y,'x');
                    player.PrintFields();
                    _getch();
 
                    if(player.ShipTest(x,y))
                    {
                        player.getDeletedShipCoordinates(x,y,x1,y1,x2,y2);
                        player.DeletePlayerShip(x1,y1,x2,y2);
                        player.PrintFields();
                        _getch();
                        computer.DeleteOpponentShip(x1,y1,x2,y2);
                    }
 
                    player.DeleteFlotLife();
 
                    if(player.FlotLifeTest())
                    {
                        ComputerWin=true;
                        player.PrintFields();
                        _getch();
                        break;
                    }
                    continue;
                }
            }
        }
 
        if(ComputerWin==true)
        {
            player.PrintFields();
            cout<<"Computer vuigral!"<<endl;
            _getch();
            break;
        }
    }
}
Добавлено через 2 минуты 48 секунд
C++
1
2
3
4
5
6
7
8
9
#include "TheGame.h"
 
int main()
{
    TheGame one;
    one.setShips();
    one.RunGame();
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2009, 14:24
Ответы с готовыми решениями:

Головоломка «Морской бой». Разместите в таблице полную флотилию для игры в «Морской бой». Корабли не должны касаться дру
с++ Головоломка «Морской бой». Разместите в таблице полную флотилию для игры в «Морской бой». Корабли не должны касаться друг друга даже...

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

Морской бой
Пишу расстановку кораблей для морского боя в рандомном порядке. И если с однопалубными кораблями все понятно, то вот с двупалобным и далее...

13
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
05.05.2009, 14:27  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

вот в архиве
Вложения
Тип файла: rar Морской бой.rar (4.4 Кб, 466 просмотров)
0
 Аватар для Return
2 / 2 / 0
Регистрация: 12.04.2009
Сообщений: 11
05.05.2009, 22:24
Бартимеус, Впечатляет!
Только почему текст не на русском?!

Добавлено через 22 минуты 55 секунд
continue не просто начинает цикл снова, а прерывает указанную итерацию и переводит цикл к следующей итерации!!!
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
06.05.2009, 05:57  [ТС]
Цитата Сообщение от Return Посмотреть сообщение
continue не просто начинает цикл снова, а прерывает указанную итерацию и переводит цикл к следующей итерации!!!
немного не понял
0
 Аватар для Return
2 / 2 / 0
Регистрация: 12.04.2009
Сообщений: 11
06.05.2009, 13:49
Просто переход, без выполнения действия. То есть, если условие истинно, то оператор continue переводит к следующей итерации без выполнения ниже обозначенных действий в данном цикле!
Кто из нас Морской бой написал?! Это я тебя должен спрашивать!
Я вообще только начинаю что-то понимать.
0
 Аватар для Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
06.05.2009, 14:27  [ТС]
Ааа) ну так там все continue на месте - conyinue которые стоят не в конце цикла и должны прерывать его без выполнения последующих действий
0
Fanktast
28.02.2010, 17:14
что то не работает эта игра
НастЁнкО
14.04.2010, 19:29
Помогите, пожалуйста, написать эту же программу, но на языке Си. ))
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 36
15.04.2010, 18:28
блин, пытаюсь запустить в BC - error - unable to open input file .... /main.cpp

как исправить?? я так понимаю директорию менять нужно подругому, но никак подобрать не могу - у меня Борлэнд находится на C:\bc\
как настроить две последние директории (в настройках) ??
0
Peace 2 all shining faces
 Аватар для Vorona
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
15.04.2010, 20:01
Бартимеус, могу посоветовать для большей понятности писать какие именно корабли требуется разместить, ато я немного запутался вначале и можно сделать поле: сверху с буквами, сбоку с цифрами, так легче ориентироваться будет
и еще, вам стоит доработать размещение кораблей по заданным координатам, т.е., когда ввожу координаты корабля ((1, 10)(1, 8)) пишет ошибку, а когда ввожу((1, 8)(1, 10)), то нормально, я предполагаю, что длину корабля нужно вычислять с помощью модуля, тогда не будет противоречия в результате -2 и 2 (примерно)

Насчет ИИ, думаю, будет логично, если враг попадает в корабль игрока, то он теперь должен стрелять рядом в горизонтальном либо вертикальном направлениях
для этого будет лучше написать отдельную ф-цию, где враг начинает обстрел вокруг пораженной части корабля (на пример стреляет в точку выше пораженной области, если мимо, то по часовой стрелке к примеру или рандомно стреляет в другую часть около пораженной цели(справа и т.д.) если с какой-то стороны ему удалось снова поразить цель, то он движется в этом направлении пока не затопит корабль)
так же можно придумать тактики хода, к примеру враг буде атаковать главные и побочные диагонали поля через 1, а потом крест-на крест...в интернете впринципе должно быть много разных тактик, если этот проект стоит этих стараний
0
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
15.04.2010, 20:02
Бартимеус, интересная тема)тоже хотел что-то подобное сделать
0
0 / 0 / 0
Регистрация: 25.03.2018
Сообщений: 4
25.03.2018, 15:27
а как откурыть игру
0
0 / 0 / 0
Регистрация: 20.09.2022
Сообщений: 27
13.02.2023, 12:23
как ее открыть
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,281
13.02.2023, 16:57
Открывай мою. Ехе-шник в папке bin. Установка: один 5-палубный, два 4-х, три 3-х, четыре 2-х, пять однопалубных. Корабли могут изгибаться. Корабли не могут касаться углами. Для установки кликаешь мышкой по своему полю - появляется палуба. Повторный клик удаляет палубу. В случае ошибки (углы или лишние палубы) корабли краснеют. После правильной установки становится активной кнопка Игра. Для игры кликаешь по полю компьютера.
Миниатюры
"Морской бой": нужны комментарии/замечания   "Морской бой": нужны комментарии/замечания   "Морской бой": нужны комментарии/замечания  

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

Морской бой в С
Прошу,что-бы он был максимально упрощенным .А то я ток начинающий программист)

Морской бой
Входные данные двумерный массив 10х10, заполненный нолями и единицами, где 0-пустая клетка, а 1-занятая, найти наиболее длинную линию из...

Морской бой=)
Создать игру &quot; Морской бой&quot;

Морской Бой
Люди прошу помогите....курсовую надо сдавать, а как решить задачу я не знаю... Вот такое условие: Дан двумерный массив размером 8х8,...

Морской бой
Расстановка кораблей в игре &quot;м-морской бой&quot; задана двумерным массивом, например, таким: Dim b(,) As Integer = {{0, 0, 0, 0, 0, 0, 0,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru