Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/79: Рейтинг темы: голосов - 79, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 4

Считать исходный код интернет страницы

04.07.2011, 19:21. Показов 16252. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!!! Парни у меня к вам большая просьба,помогите с написанием програмы на C++! Нужно написать консольную програму в которой адрес сайта вводиш с клавиатуры и програма сохраняет исходный код страницы в файл!!! Помогите плиз!!! Ума не приложу как это сделать!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2011, 19:21
Ответы с готовыми решениями:

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

Исходный код интернет-страницы
Никак не могу разобраться, как загрузить из интернета только! исходный код страницы без картинок и другой иформации? Пробовал через...

Исходный код страницы из браузера и код присылаемый сервером отличаются
Здравствуйте, С помощью вот этого кода получаю страницу сайта https://www.weblancer.net/jobs/, попытался распарсить ее и столкнулся с...

18
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.07.2011, 21:29
Лучший ответ Сообщение было отмечено как решение

Решение

как-то вот так)
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
#include <iostream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
 
using boost::asio::ip::tcp;
 
int main()
{
    std::locale::global(std::locale(""));
    try
    {
        std::cout << "Enter URL(example: [url]www.cyberforum.ru):[/url] ";
        std::string URL;// = "www.cyberforum.ru";
        std::getline(std::cin, URL, '\n');
 
        boost::asio::io_service io_service;
 
        tcp::resolver resolver(io_service);
        tcp::resolver::query query(URL, "http");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;
 
        tcp::socket socket(io_service);
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end)
        {
            socket.close();
            socket.connect(*endpoint_iterator++, error);
        }
        if (error)
            throw boost::system::system_error(error);
 
        boost::asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "GET / HTTP/1.0\r\n"
                       << "Host: " + URL + "\r\n"
                       << "Accept: text/html\r\n"
                       << "Connection: close\r\n\r\n";
 
        boost::asio::write(socket, request);
        boost::asio::streambuf response;
        boost::asio::read_until(socket, response, "\r\n");
 
        std::istream response_stream(&response);
        std::string header;
        while (std::getline(response_stream, header) && header != "\r");
        
        std::ofstream file("web_source.txt");
        if(!file)
            throw std::runtime_error("Cannot create file");
 
        while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
        {
            file << &response;
        }
        if (error != boost::asio::error::eof)
            throw boost::system::system_error(error);
 
        std::cout << "Done!\n";
        std::getchar();
    }
    catch (std::exception& e)
    {
        std::cout << "Exception: " << e.what();
        std::getchar();
    }
    return 0;
}
19
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 4
04.07.2011, 23:41  [ТС]
Спасибо, только вот при компиляции у мееня выбивает такая ошибка fatal error C1083: Cannot open include file: 'boost/asio.hpp': No such file or directory Что мне сделать???
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
04.07.2011, 23:41
Лучший ответ Сообщение было отмечено как решение

Решение

нужно установить boost
3
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 4
04.07.2011, 23:49  [ТС]
спасибо!!!
0
 Аватар для igorrr37
2893 / 2040 / 992
Регистрация: 21.12.2010
Сообщений: 3,790
Записей в блоге: 9
05.07.2011, 13:55
Лучший ответ Сообщение было отмечено как решение

Решение

с учётом перенаправления
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
#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <windows.h>
#define BOOST_FILESYSTEM_VERSION 2
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/regex.hpp>
#include <boost/asio.hpp>
typedef boost::asio::ip::tcp tcp;
namespace fs=boost::filesystem;
// [url]https://www.cyberforum.ru/cpp-beginners[/url]
// [url]http://www.overclockers.ru/download?1223[/url]
std::string uri="www.cyberforum.ru"; // адрес
std::string host, get;
boost::smatch res;
boost::regex regUri("(?:[url]http://)?([/url][^/]+)(.*)");
boost::regex regLocation("Location: ([^ \r]+)");
boost::regex regStartingLine("HTTP/\\d\\.\\d +\\d{3}.*\r");
boost::regex regFileName("/([^/\\?]*)[^/]*$");
 
int ParseUri(){
    if(!boost::regex_match(uri, res, regUri)) return 1;
    host=res[1];
    if((get=res[2]).empty()) get="/";
    return 0;
}
 
int main(){
    SetConsoleOutputCP(1251);
    try{
        boost::asio::io_service io;
        tcp::resolver resolver(io);
        tcp::socket sock(io);
        boost::system::error_code err;
        boost::asio::streambuf reqBuf;
        std::ostream reqStream(&reqBuf);
        boost::asio::streambuf* pRespBuf=new boost::asio::streambuf();
        std::istream respStream(pRespBuf);
        while(true){
            if(ParseUri()){
                std::cerr<<"ParseUri() failed\n";
                return 4;
            };
            tcp::resolver::query q(host, "http");
            tcp::resolver::iterator it = resolver.resolve(q, err), itEnd;
            if (err){
                std::cerr<<"resolve() failed:\n"<<err.message()<<"\n";
                return 5;
            }
            err = boost::asio::error::host_not_found;
            while (err && it != itEnd){
                sock.close();
                sock.connect(*it++, err);
            }
            if (err){
                std::cerr<<"connect() failed: try again after two seconds\n";
                return 3;
            }
            reqStream << "GET " << get << " HTTP/1.0\r\n";
            reqStream << "Host: " << host << "\r\n";
            reqStream << "Connection: close\r\n\r\n";
            boost::asio::write(sock, reqBuf);
            boost::asio::read_until(sock, *pRespBuf, "\r\n\r\n");
            std::string headers, tmp;
            while(std::getline(respStream, tmp)&&tmp!="\r"){
                headers+=(tmp+'\n');
            }
            std::cout<<headers<<"\n";
            if (!boost::regex_search(headers, res, regStartingLine)){
                std::cout<<"\nUnexpected starting line"<<std::endl;
                return 1;
            }
            if(boost::regex_search(headers, res, regLocation)){
                uri=res[1];
                std::cout<<"Trying use new uri:\n"<<uri<<"\n\n";
                pRespBuf->consume(pRespBuf->size());
            }
            else break;
        }
        if(!boost::regex_search(get, res, regFileName)){
            std::cerr<<"regFileName error\n";
            return 2;
        }
        std::string fileName=res[1];
        if(fileName.find('.')==std::string::npos) fileName+="_.html";
        std::cout<<"fileName= "<<fileName<<"\n";
        fs::ofstream ofs(fileName, std::ios::binary);
        if(pRespBuf->size()) ofs<<pRespBuf;
        while (boost::asio::read(sock, *pRespBuf, boost::asio::transfer_at_least(1), err)){
            ofs<<pRespBuf;
        }
        ofs.close();
        if (err != boost::asio::error::eof) throw boost::system::system_error(err);
        respStream.rdbuf(NULL);
        delete pRespBuf;
        pRespBuf=NULL;
        sock.shutdown(tcp::socket::shutdown_both);
        sock.close();
    }
    catch (std::exception& e){
        std::cerr << "Thrown exception:\n" <<e.what()<< "\n";
    }
    return 0;
}
все значки [url] из исходника удалить
7
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 4
05.07.2011, 14:12  [ТС]
А теперь подскажите что мне почитать чтоб разобраться в єтих обеих програмных кодах??? Очень хочу разобраться как они работают!!!
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.07.2011, 14:18
документация только на английском
http://www.boost.org/doc/libs/... _asio.html
2
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 12
24.09.2011, 21:44
ребята, помогите пожалуйста. Как это реализовать не на бусте, а с помощью сокетов.. или где почитать об этом?
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.09.2011, 23:36
Весло, вот не давно запостил код загляни.
https://www.cyberforum.ru/cpp-... 59730.html
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
25.09.2011, 01:58
Цитата Сообщение от Весло Посмотреть сообщение
Как это реализовать не на бусте, а с помощью сокетов.
Re: Как получить html страницы?, только скорее всего всё равно не скомпилируется, хоть вроде и без буста, и точно знаю, что работает...
1
 Аватар для tomaticus
51 / 51 / 5
Регистрация: 02.01.2011
Сообщений: 503
18.06.2012, 20:39
Вроде бы boost использует технологию сокетов. Поправьте, если не так.
0
 Аватар для igorrr37
2893 / 2040 / 992
Регистрация: 21.12.2010
Сообщений: 3,790
Записей в блоге: 9
18.06.2012, 20:52
использует, вот на винсокетах
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
#define WINVER 0x501
#include <iostream>
#include <fstream>
#include <ws2tcpip.h>
#include <winsock2.h>
#include <windows.h>
#include <string>
 
void Perror(const char*);
 
int main()
{
    WSADATA wsad;
    if(!WSAStartup(0x0202, &wsad))
    {
        if(2 == LOBYTE(wsad.wVersion) && 2 == HIBYTE(wsad.wVersion))
        {
            SOCKET sock = INVALID_SOCKET;
            addrinfo aiHint, *paiRes = nullptr, *pai = nullptr;
            ZeroMemory(&aiHint, sizeof(aiHint));
            aiHint.ai_socktype = SOCK_STREAM;
            aiHint.ai_family = AF_UNSPEC;
            int res;
            const char* remName = "www.mail.ru";
            if(!(res = getaddrinfo(remName, "80", &aiHint, &paiRes)))
            {
                pai = paiRes;
                do
                {
                    sock = socket(pai->ai_family, pai->ai_socktype, pai->ai_protocol);
                    if(INVALID_SOCKET == sock)
                        continue;
                    if(connect(sock, pai->ai_addr, pai->ai_addrlen) != SOCKET_ERROR)
                        break;
                    else if(SOCKET_ERROR == closesocket(sock)) Perror("closesocket");
                }
                while (pai = pai->ai_next);
                if(pai)
                {
                    std::string sReq =
                        "GET / HTTP/1.0\r\n"
                        "Host: " + std::string(remName) + "\r\n"
                        "Connection: close\r\n\r\n";
                    if(sReq.size() == send(sock, sReq.c_str(), sReq.size(), 0))
                    {
                        std::ofstream ofs("out.txt");
                        if(ofs.is_open())
                        {
                            char buf[1024];
                            do
                            {
                                res = recv(sock, buf, sizeof(buf), 0);
                                switch(res)
                                {
                                    case 0: std::cout << "Connection closed\n"; break;
                                    case SOCKET_ERROR: Perror("recv"); break;
                                    default:
                                    {
                                        ofs.write(buf, res);
                                        break;
                                    }
                                }
                            }
                            while(res > 0);
                        }
                        else std::cerr << "Unable to open file" << std::endl;
                        ofs.close();
                    }
                    else Perror("send");
                }
                else Perror("connect or socket");
                freeaddrinfo(paiRes);
            }
            else std::cerr << "getaddrinfo failed: " << res << std::endl;
            if(SOCKET_ERROR == closesocket(sock)) Perror("closesocket");
        }
        else std::cerr << "Needed library version not found" << std::endl;
        if(SOCKET_ERROR == WSACleanup()) Perror("WSACleanup");
    }
    else Perror("WSAStartup");
    return 0;
}
 
void Perror(const char* fName)
{
    std::cerr << fName << " failed: " << WSAGetLastError() << std::endl;
}
0
 Аватар для tomaticus
51 / 51 / 5
Регистрация: 02.01.2011
Сообщений: 503
18.06.2012, 20:54
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
bool ok = false;
 
    // инициализируем WinInet
    HINTERNET hInternet =
        ::InternetOpen(
            TEXT("WinInet Test"),
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,NULL,
            0);
 
    if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect = 
            ::InternetConnect(
                hInternet,
                TEXT("site,ru"),
                INTERNET_DEFAULT_HTTP_PORT,
                NULL,NULL,
                INTERNET_SERVICE_HTTP,
                0,
                1u);
 
        if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest = 
                ::HttpOpenRequest(
                    hConnect,
                    TEXT(""),
                    TEXT(""),
                    NULL,
                    NULL,
                    0,
                    INTERNET_FLAG_KEEP_CONNECTION,
                    1);
 
            if (hRequest != NULL) {
                // посылаем запрос
                BOOL bSend = ::HttpSendRequest(hRequest, NULL,0, NULL,0);
                if (bSend) {
                    // создаём выходной файл
                    ofstream fnews("news.html",ios::out|ios::binary);
                    if (fnews.is_open()) for (;;) {
                        // читаем данные
                        char  szData[1024];
                        DWORD dwBytesRead;
                        BOOL bRead = 
                            ::InternetReadFile(
                                hRequest,
                                szData,sizeof(szData)-1,
                                &dwBytesRead);
 
                        // выход из цикла при ошибке или завершении
                        if (bRead == FALSE  ||  dwBytesRead == 0)
                            break;
 
                        // сохраняем результат
                        szData[dwBytesRead] = 0;
                        fnews << szData;
                        
                        ok = true;
                    }
                }
                // закрываем запрос
                ::InternetCloseHandle(hRequest);
            }
            // закрываем сессию
            ::InternetCloseHandle(hConnect);
        }
        // закрываем WinInet
        ::InternetCloseHandle(hInternet);
    }
 
    // для полного счастья, запускаем считанную страничку
    if (ok)
    {
        cout << "\nsucsess!" << endl;
        system("start news.html");
    }
    else
    {
        cout << "fail" << endl;
    }
http
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
25.04.2019, 21:50
Подскажите пожалуйста, почему возникает такая ошибка при попытке запустить первый код в этом теме:

C++
1
2
3
Ошибка (активно)   E2512   Аргумент для тестирования функции макро должен быть простым идентификатором. Boost asio proba    C:\boost_1_70_0\boost_1_70_0\boost\system\detail\config.hpp 51  
Ошибка    LNK1104 не удается открыть файл "C:\boost_1_70_0\boost_1_70_0\.obj" Boost asio proba    C:\Users\Android-1\source\repos\Boost asio proba\Boost asio proba\LINK  1   
Ошибка    MSB6006 "link.exe" завершилась с кодом 1104.   Boost asio proba    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets  720
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
28.04.2019, 00:37
Почему то код приведенный во втором сообщении не на все сайты действует. Для некоторых сайтов ничего не возвращается почему то.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
06.05.2019, 00:24
Цитата Сообщение от Jupiter Посмотреть сообщение
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
#include <iostream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
 
using boost::asio::ip::tcp;
 
int main()
{
    std::locale::global(std::locale(""));
    try
    {
        std::cout << "Enter URL(example: [url]www.cyberforum.ru):[/url] ";
        std::string URL;// = "www.cyberforum.ru";
        std::getline(std::cin, URL, '\n');
 
        boost::asio::io_service io_service;
 
        tcp::resolver resolver(io_service);
        tcp::resolver::query query(URL, "http");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;
 
        tcp::socket socket(io_service);
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end)
        {
            socket.close();
            socket.connect(*endpoint_iterator++, error);
        }
        if (error)
            throw boost::system::system_error(error);
 
        boost::asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "GET / HTTP/1.0\r\n"
                       << "Host: " + URL + "\r\n"
                       << "Accept: text/html\r\n"
                       << "Connection: close\r\n\r\n";
 
        boost::asio::write(socket, request);
        boost::asio::streambuf response;
        boost::asio::read_until(socket, response, "\r\n");
 
        std::istream response_stream(&response);
        std::string header;
        while (std::getline(response_stream, header) && header != "\r");
        
        std::ofstream file("web_source.txt");
        if(!file)
            throw std::runtime_error("Cannot create file");
 
        while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
        {
            file << &response;
        }
        if (error != boost::asio::error::eof)
            throw boost::system::system_error(error);
 
        std::cout << "Done!\n";
        std::getchar();
    }
    catch (std::exception& e)
    {
        std::cout << "Exception: " << e.what();
        std::getchar();
    }
    return 0;
}
Подскажите пожалуйста, на какой строчке кода происходит запись полученных данных html кода в файл "web_source.txt" ??
Что то я понять не могу.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
06.05.2019, 01:20
на 57ой
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
06.05.2019, 11:24
Спасибо!

А как вообще понять, как работает этот код ?

1)Все что я нагуглил, так это то что io_service - это какой то некий обязательный объект, который нужно обозначит и который предоставляет доступ к API операционной системы.
Но там же была вот такая к примеру фраза: "Обычно одного экземпляра io_service бывает достаточно"
Непонятно, а когда недостаточно ? В чем эта недостаточность может проявляется ?
2)Или tcp::resolver resolver(io_service) - как понять какое действие выполняется в этой строке ?

Что необходимо почитать, чтобы разобраться, как работает этот код ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2019, 11:24
Помогаю со студенческими работами здесь

Исходный код страницы
Доброго времени суток! Мне необходимо получить html код на сайте mail.ru Просматривая через браузер код страницы, весь контент...

Исходный код страницы
Если нажать правой кнопкой на странице сайта, то там можно найти вкладку исходный код страницы. Подскажите, пожалуйста, в какой папке сайта...

Исходный код Html страницы
есть код: procedure TForm1.SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser); var PersistStream: IPersistStreamInit; ...

Исходный код страницы в переменную
На примере стим маркета. Использую следующий код для получения исходного кода страницы в переменную php: $handle = curl_init(); ...

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 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