Паскаль, он же дельфи. Он не понимает саму суть сборки. Мнение новое тут не нужно. Это матем можно обосновать, не правы. Такое понятие как матем. расчет вероятности не адекватен. 10^40 это цифры, к реалу не относятся.
Масштаб delphi - это миллион строк кода на ассемблере. До delphi был турбо паскаль. Правильно ли сравнивать с вашими поделками?
Tech, Ты ошибся форумом, тут дельфя неприемлема. Мы можем реверснуть ядро, собрать с нуля формат, но паскаль это баг и его рассматривать мы не будем. Для этого есть модеры.
Твоя механика распознавания изображений - нахрен никому не всравшаяся вещь. С этим трансформеры хорошо справляются.
давайте не выходить за рамки именно обсуждаемого тезиса. вы сказали что нейронка это..., показали .... и к чему это?.... просто блин один на север другой на запад. Но шизофреническое слабоумие у всех
Да, наслышаны про хеловорлды по паре мегабайт, про бредогенерацию на паттернах: Код (Text): 005083A0 55 push ebp 005083A1 8BEC mov ebp,esp 005083A3 81C4 FCFEFFFF add esp,FFFFFEFC 005083A9 53 push ebx 005083AA 56 push esi 005083AB 8BF0 mov esi,eax 005083AD 8339 00 cmp dword ptr ds:[ecx],0 005083B0 0F84 98050000 je totalcmd.50894E 005083B6 8BC2 mov eax,edx 005083B8 3D E9030000 cmp eax,3E9 005083BD 7F 52 jg totalcmd.508411 005083BF 0F84 73010000 je totalcmd.508538 005083C5 83F8 03 cmp eax,3 005083C8 7F 29 jg totalcmd.5083F3 005083CA 0F84 79020000 je totalcmd.508649 005083D0 05 3C280000 add eax,283C ;??? 005083D5 2D 2D010000 sub eax,12D ;??? 005083DA 0F82 27030000 jb totalcmd.508707 Солидно, солидно.
Мой код при желании легко портируется на цэ парой промптов. Или он тоже не заходит? Давайте не будем ныть про delphi 7 если вы не можете разобраться где WinApi а где vcl, и навешиваете ярлыки ссылаясь на какие-то асм листинги. Лично меня не парит размер ехе в 15-20 кб. Имхо - демагогия. И самоутверждение за счет других.
Опять не в тему. Меня устраивает размер в 15-20 кб. Ты стал какие-то асм листинги приводить. Можешь еще турбо-паскаль распотрошить. Там тоже есть косяки по генерации кода. Код (C): #include <windows.h> #include <stdlib.h> #include <time.h> // Константы #define ID_TIMER 1 #define ROAD_WIDTH 360 #define SCREEN_WIDTH 800 #define SCREEN_HEIGHT 700 #define FPS 60 #define TIMER_INTERVAL (700 / FPS) // Цвета (в WinAPI используются RGB макросы) #define BLACK RGB(0, 0, 0) #define WHITE RGB(255, 255, 255) #define GRAY RGB(100, 100, 100) #define DARK_GRAY RGB(60, 60, 60) #define GREEN RGB(30, 100, 30) #define YELLOW RGB(255, 255, 100) #define RED RGB(220, 50, 50) #define BLUE RGB(50, 50, 220) #define BROWN RGB(139, 69, 19) // Структуры данных typedef enum { CK_CAR, CK_TRUCK } TCarKind; typedef struct { int Lane; int Y; TCarKind Kind; } TCar; typedef struct { int Left; int ScrollY; } TRoad; typedef struct { int Lane; int X; int Y; int MoveDelay; } TPlayer; typedef struct { TCar* List; int Count; int Capacity; } TCars; typedef struct { double Score; double HighScore; int Active; double Speed; int CarTimer; } TGameplay; typedef struct { TRoad Road; TPlayer Player; TCars Cars; TGameplay Gameplay; } TGame; typedef struct { HDC BufferDC; HBITMAP hBitmap; HBITMAP hOldBitmap; } TGraphics; // Глобальные переменные TGame Game; TGraphics Graphics; HWND g_hWnd; // Вспомогательные функции int CarWidth(TCarKind Kind) { return (Kind == CK_TRUCK) ? 45 : 30; } int CarHeight(TCarKind Kind) { return (Kind == CK_TRUCK) ? 45 : 40; } // Функции рисования void DrawRect(HDC hdc, int x, int y, int w, int h, COLORREF color, BOOL filled) { HBRUSH br = filled ? CreateSolidBrush(color) : GetStockObject(NULL_BRUSH); HPEN pen = CreatePen(PS_SOLID, 1, color); SelectObject(hdc, pen); SelectObject(hdc, br); Rectangle(hdc, x, y, x + w, y + h); DeleteObject(pen); DeleteObject(br); } void DrawLine(HDC hdc, int x1, int y1, int x2, int y2, COLORREF color, int width) { HPEN pen = CreatePen(PS_SOLID, width, color); HPEN oldPen = SelectObject(hdc, pen); MoveToEx(hdc, x1, y1, NULL); LineTo(hdc, x2, y2); SelectObject(hdc, oldPen); DeleteObject(pen); } void DrawCircle(HDC hdc, int x, int y, int radius, COLORREF color, BOOL filled) { HBRUSH br = filled ? CreateSolidBrush(color) : GetStockObject(NULL_BRUSH); HPEN pen = CreatePen(PS_SOLID, 1, color); SelectObject(hdc, pen); SelectObject(hdc, br); Ellipse(hdc, x - radius, y - radius, x + radius, y + radius); DeleteObject(pen); DeleteObject(br); } // Инициализация void InitRoad(TRoad* Road) { Road->Left = (SCREEN_WIDTH - ROAD_WIDTH) / 2; Road->ScrollY = 0; } void InitPlayer(TPlayer* Player) { Player->Lane = 1; Player->X = SCREEN_WIDTH / 2; Player->Y = SCREEN_HEIGHT - 80; Player->MoveDelay = 0; } void InitCars(TCars* Cars) { Cars->List = NULL; Cars->Count = 0; Cars->Capacity = 0; } void InitGameplay(TGameplay* Gameplay) { Gameplay->Score = 0; Gameplay->HighScore = 0; Gameplay->Active = 1; Gameplay->Speed = 4.0; Gameplay->CarTimer = 0; } // Получение прямоугольников для проверки коллизий RECT GetPlayerRect(void) { RECT rect; rect.left = Game.Player.X - 15; rect.top = Game.Player.Y - 20; rect.right = Game.Player.X + 15; rect.bottom = Game.Player.Y + 20; return rect; } RECT GetCarRect(TCar car) { int lane_width = ROAD_WIDTH / 3; int car_x = Game.Road.Left + lane_width / 2 + car.Lane * lane_width; RECT rect; rect.left = car_x - CarWidth(car.Kind) / 2; rect.top = car.Y - CarHeight(car.Kind) / 2; rect.right = car_x + CarWidth(car.Kind) / 2; rect.bottom = car.Y + CarHeight(car.Kind) / 2; return rect; } BOOL CheckCollision(RECT r1, RECT r2) { return !((r1.right <= r2.left) || (r1.left >= r2.right) || (r1.bottom <= r2.top) || (r1.top >= r2.bottom)); } // Игровая логика void UpdatePlayer(void) { if (!Game.Gameplay.Active) return; if (Game.Player.MoveDelay <= 0) { if (GetAsyncKeyState(VK_LEFT) & 0x8000) { if (Game.Player.Lane > 0) Game.Player.Lane--; Game.Player.MoveDelay = 10; } else if (GetAsyncKeyState(VK_RIGHT) & 0x8000) { if (Game.Player.Lane < 2) Game.Player.Lane++; Game.Player.MoveDelay = 10; } } else { Game.Player.MoveDelay--; } int lane_width = ROAD_WIDTH / 3; int target_x = Game.Road.Left + lane_width / 2 + Game.Player.Lane * lane_width; Game.Player.X += (int)((target_x - Game.Player.X) * 0.2); } void SpawnCar(void) { if (!Game.Gameplay.Active) return; BOOL lanes_in_use[3] = {FALSE}; int available[3]; int avail_count = 0; for (int i = 0; i < Game.Cars.Count; i++) { if (Game.Cars.List[i].Y < SCREEN_HEIGHT - 100) { lanes_in_use[Game.Cars.List[i].Lane] = TRUE; } } for (int i = 0; i < 3; i++) { if (!lanes_in_use[i]) { available[avail_count++] = i; } } if (avail_count > 0) { int lane = available[rand() % avail_count]; TCarKind car_kind = (rand() % 2 == 0) ? CK_CAR : CK_TRUCK; if (Game.Cars.Count >= Game.Cars.Capacity) { Game.Cars.Capacity = Game.Cars.Capacity == 0 ? 10 : Game.Cars.Capacity * 2; Game.Cars.List = (TCar*)realloc(Game.Cars.List, Game.Cars.Capacity * sizeof(TCar)); } Game.Cars.List[Game.Cars.Count].Lane = lane; Game.Cars.List[Game.Cars.Count].Y = -rand() % 200 - 50; Game.Cars.List[Game.Cars.Count].Kind = car_kind; Game.Cars.Count++; } } void UpdateCars(void) { int i = 0; while (i < Game.Cars.Count) { Game.Cars.List[i].Y += (int)Game.Gameplay.Speed; if (Game.Cars.List[i].Y - 30 > SCREEN_HEIGHT) { Game.Cars.List[i] = Game.Cars.List[Game.Cars.Count - 1]; Game.Cars.Count--; Game.Gameplay.Score += 10; continue; } if (Game.Gameplay.Active) { RECT player_rect = GetPlayerRect(); RECT car_rect = GetCarRect(Game.Cars.List[i]); if (CheckCollision(player_rect, car_rect)) { Game.Gameplay.Active = 0; if (Game.Gameplay.Score > Game.Gameplay.HighScore) { Game.Gameplay.HighScore = Game.Gameplay.Score; } } } i++; } } void UpdateGame(void) { if (!Game.Gameplay.Active) return; Game.Gameplay.Speed = 4.0 + Game.Gameplay.Score / 1500; if (Game.Gameplay.Speed > 11.0) Game.Gameplay.Speed = 11.0; Game.Gameplay.Score += 0.2; Game.Gameplay.CarTimer++; if (Game.Gameplay.CarTimer > 30 + (int)(30 - Game.Gameplay.Score / 100)) { if (Game.Gameplay.CarTimer > 60 - (int)(Game.Gameplay.Score / 100)) { Game.Gameplay.CarTimer = 0; SpawnCar(); } } UpdateCars(); UpdatePlayer(); Game.Road.ScrollY = (Game.Road.ScrollY + (int)Game.Gameplay.Speed) % 40; } void RestartGame(void) { InitRoad(&Game.Road); InitPlayer(&Game.Player); InitCars(&Game.Cars); InitGameplay(&Game.Gameplay); } // Отрисовка void DrawRoad(HDC hdc) { DrawRect(hdc, Game.Road.Left, 0, ROAD_WIDTH, SCREEN_HEIGHT, GRAY, TRUE); DrawLine(hdc, Game.Road.Left, 0, Game.Road.Left, SCREEN_HEIGHT, YELLOW, 4); DrawLine(hdc, Game.Road.Left + ROAD_WIDTH, 0, Game.Road.Left + ROAD_WIDTH, SCREEN_HEIGHT, YELLOW, 4); int lane_width = ROAD_WIDTH / 3; for (int i = 1; i <= 2; i++) { int line_x = Game.Road.Left + i * lane_width; for (int y = -40; y < SCREEN_HEIGHT + 40; y += 40) { int y_pos = y + Game.Road.ScrollY; if (y_pos >= 0 && y_pos <= SCREEN_HEIGHT) { DrawLine(hdc, line_x, y_pos, line_x, y_pos + 20, WHITE, 3); } } } } void DrawCar(HDC hdc, TCar car) { int lane_width = ROAD_WIDTH / 3; int x = Game.Road.Left + lane_width / 2 + car.Lane * lane_width; if (car.Kind == CK_TRUCK) { DrawRect(hdc, x - 22, car.Y - 22, 45, 45, BROWN, TRUE); DrawRect(hdc, x - 15, car.Y - 28, 30, 10, DARK_GRAY, TRUE); } else { DrawRect(hdc, x - 15, car.Y - 20, 30, 40, BLUE, TRUE); DrawRect(hdc, x - 12, car.Y - 25, 24, 15, DARK_GRAY, TRUE); } DrawRect(hdc, x - 17, car.Y - 12, 6, 12, BLACK, TRUE); DrawRect(hdc, x + 11, car.Y - 12, 6, 12, BLACK, TRUE); DrawRect(hdc, x - 17, car.Y + 8, 6, 12, BLACK, TRUE); DrawRect(hdc, x + 11, car.Y + 8, 6, 12, BLACK, TRUE); } void DrawPlayerCar(HDC hdc) { int x = Game.Player.X; DrawRect(hdc, x - 15, Game.Player.Y - 20, 30, 40, RED, TRUE); DrawRect(hdc, x - 12, Game.Player.Y - 25, 24, 15, RED, TRUE); DrawRect(hdc, x - 8, Game.Player.Y - 22, 6, 8, BLACK, TRUE); DrawRect(hdc, x + 2, Game.Player.Y - 22, 6, 8, BLACK, TRUE); DrawCircle(hdc, x - 14, Game.Player.Y - 10, 4, YELLOW, TRUE); DrawCircle(hdc, x + 14, Game.Player.Y - 10, 4, YELLOW, TRUE); DrawRect(hdc, x - 16, Game.Player.Y - 12, 6, 12, BLACK, TRUE); DrawRect(hdc, x + 10, Game.Player.Y - 12, 6, 12, BLACK, TRUE); DrawRect(hdc, x - 16, Game.Player.Y + 8, 6, 12, BLACK, TRUE); DrawRect(hdc, x + 10, Game.Player.Y + 8, 6, 12, BLACK, TRUE); } void DrawUI(HDC hdc) { char textBuf[256]; int oldBkMode = SetBkMode(hdc, TRANSPARENT); sprintf(textBuf, "СЧЁТ: %.0f", Game.Gameplay.Score); TextOutA(hdc, 10, 10, textBuf, strlen(textBuf)); sprintf(textBuf, "РЕКОРД: %.0f", Game.Gameplay.HighScore); TextOutA(hdc, 10, 50, textBuf, strlen(textBuf)); sprintf(textBuf, "СКОРОСТЬ: %.0f", Game.Gameplay.Speed * 25); TextOutA(hdc, 10, 90, textBuf, strlen(textBuf)); for (int i = 0; i < 3; i++) { COLORREF color = (i == Game.Player.Lane) ? BLUE : DARK_GRAY; DrawRect(hdc, SCREEN_WIDTH - 100 + i * 25, 20, 20, 40, color, TRUE); DrawRect(hdc, SCREEN_WIDTH - 100 + i * 25, 20, 20, 40, BLACK, FALSE); } if (!Game.Gameplay.Active) { DrawRect(hdc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, BLACK, TRUE); SetBkMode(hdc, TRANSPARENT); SetTextColor(hdc, RED); TextOutA(hdc, SCREEN_WIDTH/2 - 100, SCREEN_HEIGHT/2 - 60, "GAME OVER", 9); SetTextColor(hdc, WHITE); sprintf(textBuf, "Счёт: %.0f", Game.Gameplay.Score); TextOutA(hdc, SCREEN_WIDTH/2 - 70, SCREEN_HEIGHT/2, textBuf, strlen(textBuf)); SetTextColor(hdc, YELLOW); sprintf(textBuf, "Рекорд: %.0f", Game.Gameplay.HighScore); TextOutA(hdc, SCREEN_WIDTH/2 - 80, SCREEN_HEIGHT/2 + 40, textBuf, strlen(textBuf)); SetTextColor(hdc, WHITE); TextOutA(hdc, SCREEN_WIDTH/2 - 120, SCREEN_HEIGHT/2 + 100, "Нажми R для рестарта", 21); } SetBkMode(hdc, oldBkMode); } void Render(HDC hdc) { DrawRect(hdc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GREEN, TRUE); DrawRoad(hdc); for (int i = 0; i < Game.Cars.Count; i++) { DrawCar(hdc, Game.Cars.List[i]); } DrawPlayerCar(hdc); DrawUI(hdc); } // Оконная процедура LRESULT CALLBACK MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdcPaint; switch (Msg) { case WM_CREATE: srand(time(NULL)); InitRoad(&Game.Road); InitPlayer(&Game.Player); InitCars(&Game.Cars); InitGameplay(&Game.Gameplay); // Инициализация двойной буферизации hdcPaint = GetDC(hWnd); Graphics.hBitmap = CreateCompatibleBitmap(hdcPaint, SCREEN_WIDTH, SCREEN_HEIGHT); Graphics.BufferDC = CreateCompatibleDC(hdcPaint); Graphics.hOldBitmap = SelectObject(Graphics.BufferDC, Graphics.hBitmap); ReleaseDC(hWnd, hdcPaint); SetTimer(hWnd, ID_TIMER, TIMER_INTERVAL, NULL); break; case WM_TIMER: if (wParam == ID_TIMER) { UpdateGame(); InvalidateRect(hWnd, NULL, FALSE); } break; case WM_PAINT: hdcPaint = BeginPaint(hWnd, &ps); Render(Graphics.BufferDC); BitBlt(hdcPaint, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Graphics.BufferDC, 0, 0, SRCCOPY); EndPaint(hWnd, &ps); break; case WM_KEYDOWN: if (wParam == VK_ESCAPE) { PostQuitMessage(0); } if (wParam == 'R' || wParam == 'r') { RestartGame(); } break; case WM_DESTROY: KillTimer(hWnd, ID_TIMER); SelectObject(Graphics.BufferDC, Graphics.hOldBitmap); DeleteDC(Graphics.BufferDC); DeleteObject(Graphics.hBitmap); free(Game.Cars.List); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, Msg, wParam, lParam); } return 0; } // Точка входа int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc = {0}; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = MainWndProc; wc.hInstance = hInstance; wc.hbrBackground = GetStockObject(BLACK_BRUSH); wc.lpszClassName = "GameRacingClass"; RegisterClass(&wc); CreateWindow("GameRacingClass", "Game Racing", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 200, 30, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, hInstance, NULL); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
Код (Text): function StrLen(tStr:PChar):integer; asm PUSH EBX MOV EDX,EAX @L1: MOV EBX,[EAX] ADD EAX,4 LEA ECX,[EBX-$01010101] NOT EBX AND ECX,EBX AND ECX,$80808080 JZ @L1 TEST ECX,$00008080 JZ @L2 SHL ECX,16 SUB EAX,2 @L2: SHL ECX,9 SBB EAX,EDX POP EBX end; Код (Pascal): function StrLen(tStr: PChar): integer; begin result := 0; while tStr[result] <> #0 do if tStr[result + 1] <> #0 then if tStr[result + 2] <> #0 then if tStr[result + 3] <> #0 then inc(result, 4) else begin inc(result, 3); exit; end else begin inc(result, 2); exit; end else begin inc(result); exit; end; end; Разницы в скорости почти нет
Tech, Братишка а ты знаешь что этот человек f13 протекторов порешал больше, чем ты прожил ? Этот форум, люди было есчо когда ты в детский сад ходил и не тебе правила задавать.
Я как раз паскаль изучал для задач производительности, пока ты мне глаза не открыл. Ты же не модер вроде? Чего раскудахтался? Убери все медленное, оставь только асм.
А что наработано то? Имхо одна нищета и убожество. schuler, это не аргумент для них. У них все тезисы на уровне веры. --- Сообщение объединено, 12 июн 2026 в 05:31 --- Рецепт как стать невменяемым безмозглым дураком с манией величия. --- Сообщение объединено, 12 июн 2026 в 05:50 --- Как вариант: Код (Pascal): function StrLen(tStr: PChar): integer; begin result := 0; while tStr[result] <> #0 do if tStr[result + 1] <> #0 then if tStr[result + 2] <> #0 then if tStr[result + 3] <> #0 then inc(result, 4) else begin inc(result, 3); exit; end else begin inc(result, 2); exit; end else begin inc(result); exit; end; end; Код (Pascal): function StrLen(tStr: PChar): integer; begin result := 0; while True do begin if tStr[result] = #0 then Exit; if tStr[result + 1] = #0 then begin Inc(result); Exit; end; if tStr[result + 2] = #0 then begin Inc(result, 2); Exit; end; if tStr[result + 3] = #0 then begin Inc(result, 3); Exit; end; Inc(result, 4); end; end; --- Сообщение объединено, 12 июн 2026 в 05:54 --- Точнее так: Код (Pascal): function StrLen(tStr: PChar): integer; var i: integer; begin i := 0; while True do begin if tStr[i] = #0 then Break; if tStr[i+1] = #0 then begin i := i + 1; Break; end; if tStr[i+2] = #0 then begin i := i + 2; Break; end; if tStr[i+3] = #0 then begin i := i + 3; Break; end; i := i + 4; end; Result := i; end; --- Сообщение объединено, 12 июн 2026 в 05:59 --- Правильный смысл до меня доходит не сразу. Чето немного тупанул. Правильнее 2 вариант, в последнем вводится лишняя переменная i. --- Сообщение объединено, 12 июн 2026 в 06:09 --- В последнем варианте Break вместо Exit. У Exit на 1-2 инструкции меньше. Не нужно сохранять промежуточный результат и делать дополнительный jmp. --- Сообщение объединено, 12 июн 2026 в 06:10 --- Разница будет в наносекундах на миллионы вызовов. --- Сообщение объединено, 12 июн 2026 в 06:28 --- Размотка хорошо работает для длинных строк. Если строк мало или они короткие, лучше: Код (Pascal): function StrLen(tStr: PChar): integer; begin Result := 0; while tStr[Result] <> #0 do Inc(Result); end;
Tech, Ты не понимаешь, этот скрипт убожество", сорян за термин, другой не применим: После сборки это превратится в билд чепухи. И это только длину строки узнать. > А что наработано то? Мы знаем архитектуру, сам я создал инструменты анализа, методы(картирование, наследование), работы по виртам, виксам. А вы сюда пришли с галимым паскалем без понятия даже что такое визор или профайлер. Не зная истории форума. Благодаря мне ты можешь редактировать свои сообщения.
Такое ощущение, что ты сам сомневаешься в ценности своих поделок. Иначе зачем втыкать перья в жопу. Я не куплю твои инструменты анализа. Это не мой сорец. По поводу того как его преобразовать это мысли вслух. Мне хватает функции Length.
Tech, Судя по скрипту, алго, ты умственно отсталый либо же школьник. Про select:case не слышал? А еще есть осевые интерфейсы для таких примитивов. Предлагаю таких сразу в бан.
Ahimov, Это мой копипаст из сети, просто замерил скорость выполнения на делфи и на асме, никакой разницы не заметил по скорости. Вернее разница есть, но она не существенна.