Загадки мозга

Тема в разделе "WASM.HEAP", создана пользователем Blackbeam, 19 июн 2011.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Паскаль, он же дельфи. Он не понимает саму суть сборки. Мнение новое тут не нужно. Это матем можно обосновать, не правы.

    Такое понятие как матем. расчет вероятности не адекватен. 10^40 это цифры, к реалу не относятся.
     
    Последнее редактирование: 12 июн 2026 в 01:03
  2. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Масштаб delphi - это миллион строк кода на ассемблере. До delphi был турбо паскаль. Правильно ли сравнивать с вашими поделками?
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Tech,

    Ты ошибся форумом, тут дельфя неприемлема.

    Мы можем реверснуть ядро, собрать с нуля формат, но паскаль это баг и его рассматривать мы не будем. Для этого есть модеры.
     
  4. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Твоя механика распознавания изображений - нахрен никому не всравшаяся вещь. С этим трансформеры хорошо справляются.
     
  5. q2e74

    q2e74 Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    1.027
    давайте не выходить за рамки именно обсуждаемого тезиса.

    вы сказали что нейронка это..., показали .... и к чему это?.... просто блин один на север другой на запад. Но шизофреническое слабоумие у всех
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.190
    Да, наслышаны про хеловорлды по паре мегабайт, про бредогенерацию на паттернах:
    Код (Text):
    1. 005083A0 55            push ebp
    2. 005083A1 8BEC          mov ebp,esp
    3. 005083A3 81C4 FCFEFFFF add esp,FFFFFEFC
    4. 005083A9 53            push ebx
    5. 005083AA 56            push esi
    6. 005083AB 8BF0          mov esi,eax
    7. 005083AD 8339 00       cmp dword ptr ds:[ecx],0
    8. 005083B0 0F84 98050000 je totalcmd.50894E
    9. 005083B6 8BC2          mov eax,edx
    10. 005083B8 3D E9030000   cmp eax,3E9
    11. 005083BD 7F 52         jg totalcmd.508411
    12. 005083BF 0F84 73010000 je totalcmd.508538
    13. 005083C5 83F8 03       cmp eax,3
    14. 005083C8 7F 29         jg totalcmd.5083F3
    15. 005083CA 0F84 79020000 je totalcmd.508649
    16. 005083D0 05 3C280000   add eax,283C ;???
    17. 005083D5 2D 2D010000   sub eax,12D ;???
    18. 005083DA 0F82 27030000 jb totalcmd.508707
    Солидно, солидно.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.395
    Единственный, кто не ошибся форумом, это - индий.
     
  8. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Мой код при желании легко портируется на цэ парой промптов. Или он тоже не заходит?

    Давайте не будем ныть про delphi 7 если вы не можете разобраться где WinApi а где vcl,
    и навешиваете ярлыки ссылаясь на какие-то асм листинги. Лично меня не парит размер ехе в 15-20 кб.

    Имхо - демагогия. И самоутверждение за счет других.
     
    Последнее редактирование: 12 июн 2026 в 02:12
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.190
    Ну не хочешь, не ной. Разрешаю.
     
  10. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Опять не в тему. Меня устраивает размер в 15-20 кб.

    Ты стал какие-то асм листинги приводить.

    Можешь еще турбо-паскаль распотрошить.
    Там тоже есть косяки по генерации кода.

    Код (C):
    1. #include <windows.h>
    2. #include <stdlib.h>
    3. #include <time.h>
    4.  
    5. // Константы
    6. #define ID_TIMER 1
    7. #define ROAD_WIDTH 360
    8. #define SCREEN_WIDTH 800
    9. #define SCREEN_HEIGHT 700
    10. #define FPS 60
    11. #define TIMER_INTERVAL (700 / FPS)
    12.  
    13. // Цвета (в WinAPI используются RGB макросы)
    14. #define BLACK   RGB(0, 0, 0)
    15. #define WHITE   RGB(255, 255, 255)
    16. #define GRAY    RGB(100, 100, 100)
    17. #define DARK_GRAY RGB(60, 60, 60)
    18. #define GREEN   RGB(30, 100, 30)
    19. #define YELLOW  RGB(255, 255, 100)
    20. #define RED     RGB(220, 50, 50)
    21. #define BLUE    RGB(50, 50, 220)
    22. #define BROWN   RGB(139, 69, 19)
    23.  
    24. // Структуры данных
    25. typedef enum {
    26.     CK_CAR,
    27.     CK_TRUCK
    28. } TCarKind;
    29.  
    30. typedef struct {
    31.     int Lane;
    32.     int Y;
    33.     TCarKind Kind;
    34. } TCar;
    35.  
    36. typedef struct {
    37.     int Left;
    38.     int ScrollY;
    39. } TRoad;
    40.  
    41. typedef struct {
    42.     int Lane;
    43.     int X;
    44.     int Y;
    45.     int MoveDelay;
    46. } TPlayer;
    47.  
    48. typedef struct {
    49.     TCar* List;
    50.     int Count;
    51.     int Capacity;
    52. } TCars;
    53.  
    54. typedef struct {
    55.     double Score;
    56.     double HighScore;
    57.     int Active;
    58.     double Speed;
    59.     int CarTimer;
    60. } TGameplay;
    61.  
    62. typedef struct {
    63.     TRoad Road;
    64.     TPlayer Player;
    65.     TCars Cars;
    66.     TGameplay Gameplay;
    67. } TGame;
    68.  
    69. typedef struct {
    70.     HDC BufferDC;
    71.     HBITMAP hBitmap;
    72.     HBITMAP hOldBitmap;
    73. } TGraphics;
    74.  
    75. // Глобальные переменные
    76. TGame Game;
    77. TGraphics Graphics;
    78. HWND g_hWnd;
    79.  
    80. // Вспомогательные функции
    81. int CarWidth(TCarKind Kind) {
    82.     return (Kind == CK_TRUCK) ? 45 : 30;
    83. }
    84.  
    85. int CarHeight(TCarKind Kind) {
    86.     return (Kind == CK_TRUCK) ? 45 : 40;
    87. }
    88.  
    89. // Функции рисования
    90. void DrawRect(HDC hdc, int x, int y, int w, int h, COLORREF color, BOOL filled) {
    91.     HBRUSH br = filled ? CreateSolidBrush(color) : GetStockObject(NULL_BRUSH);
    92.     HPEN pen = CreatePen(PS_SOLID, 1, color);
    93.  
    94.     SelectObject(hdc, pen);
    95.     SelectObject(hdc, br);
    96.     Rectangle(hdc, x, y, x + w, y + h);
    97.  
    98.     DeleteObject(pen);
    99.     DeleteObject(br);
    100. }
    101.  
    102. void DrawLine(HDC hdc, int x1, int y1, int x2, int y2, COLORREF color, int width) {
    103.     HPEN pen = CreatePen(PS_SOLID, width, color);
    104.     HPEN oldPen = SelectObject(hdc, pen);
    105.  
    106.     MoveToEx(hdc, x1, y1, NULL);
    107.     LineTo(hdc, x2, y2);
    108.  
    109.     SelectObject(hdc, oldPen);
    110.     DeleteObject(pen);
    111. }
    112.  
    113. void DrawCircle(HDC hdc, int x, int y, int radius, COLORREF color, BOOL filled) {
    114.     HBRUSH br = filled ? CreateSolidBrush(color) : GetStockObject(NULL_BRUSH);
    115.     HPEN pen = CreatePen(PS_SOLID, 1, color);
    116.  
    117.     SelectObject(hdc, pen);
    118.     SelectObject(hdc, br);
    119.     Ellipse(hdc, x - radius, y - radius, x + radius, y + radius);
    120.  
    121.     DeleteObject(pen);
    122.     DeleteObject(br);
    123. }
    124.  
    125. // Инициализация
    126. void InitRoad(TRoad* Road) {
    127.     Road->Left = (SCREEN_WIDTH - ROAD_WIDTH) / 2;
    128.     Road->ScrollY = 0;
    129. }
    130.  
    131. void InitPlayer(TPlayer* Player) {
    132.     Player->Lane = 1;
    133.     Player->X = SCREEN_WIDTH / 2;
    134.     Player->Y = SCREEN_HEIGHT - 80;
    135.     Player->MoveDelay = 0;
    136. }
    137.  
    138. void InitCars(TCars* Cars) {
    139.     Cars->List = NULL;
    140.     Cars->Count = 0;
    141.     Cars->Capacity = 0;
    142. }
    143.  
    144. void InitGameplay(TGameplay* Gameplay) {
    145.     Gameplay->Score = 0;
    146.     Gameplay->HighScore = 0;
    147.     Gameplay->Active = 1;
    148.     Gameplay->Speed = 4.0;
    149.     Gameplay->CarTimer = 0;
    150. }
    151.  
    152. // Получение прямоугольников для проверки коллизий
    153. RECT GetPlayerRect(void) {
    154.     RECT rect;
    155.     rect.left = Game.Player.X - 15;
    156.     rect.top = Game.Player.Y - 20;
    157.     rect.right = Game.Player.X + 15;
    158.     rect.bottom = Game.Player.Y + 20;
    159.     return rect;
    160. }
    161.  
    162. RECT GetCarRect(TCar car) {
    163.     int lane_width = ROAD_WIDTH / 3;
    164.     int car_x = Game.Road.Left + lane_width / 2 + car.Lane * lane_width;
    165.     RECT rect;
    166.     rect.left = car_x - CarWidth(car.Kind) / 2;
    167.     rect.top = car.Y - CarHeight(car.Kind) / 2;
    168.     rect.right = car_x + CarWidth(car.Kind) / 2;
    169.     rect.bottom = car.Y + CarHeight(car.Kind) / 2;
    170.     return rect;
    171. }
    172.  
    173. BOOL CheckCollision(RECT r1, RECT r2) {
    174.     return !((r1.right <= r2.left) || (r1.left >= r2.right) ||
    175.              (r1.bottom <= r2.top) || (r1.top >= r2.bottom));
    176. }
    177.  
    178. // Игровая логика
    179. void UpdatePlayer(void) {
    180.     if (!Game.Gameplay.Active) return;
    181.  
    182.     if (Game.Player.MoveDelay <= 0) {
    183.         if (GetAsyncKeyState(VK_LEFT) & 0x8000) {
    184.             if (Game.Player.Lane > 0) Game.Player.Lane--;
    185.             Game.Player.MoveDelay = 10;
    186.         }
    187.         else if (GetAsyncKeyState(VK_RIGHT) & 0x8000) {
    188.             if (Game.Player.Lane < 2) Game.Player.Lane++;
    189.             Game.Player.MoveDelay = 10;
    190.         }
    191.     }
    192.     else {
    193.         Game.Player.MoveDelay--;
    194.     }
    195.  
    196.     int lane_width = ROAD_WIDTH / 3;
    197.     int target_x = Game.Road.Left + lane_width / 2 + Game.Player.Lane * lane_width;
    198.     Game.Player.X += (int)((target_x - Game.Player.X) * 0.2);
    199. }
    200.  
    201. void SpawnCar(void) {
    202.     if (!Game.Gameplay.Active) return;
    203.  
    204.     BOOL lanes_in_use[3] = {FALSE};
    205.     int available[3];
    206.     int avail_count = 0;
    207.  
    208.     for (int i = 0; i < Game.Cars.Count; i++) {
    209.         if (Game.Cars.List[i].Y < SCREEN_HEIGHT - 100) {
    210.             lanes_in_use[Game.Cars.List[i].Lane] = TRUE;
    211.         }
    212.     }
    213.  
    214.     for (int i = 0; i < 3; i++) {
    215.         if (!lanes_in_use[i]) {
    216.             available[avail_count++] = i;
    217.         }
    218.     }
    219.  
    220.     if (avail_count > 0) {
    221.         int lane = available[rand() % avail_count];
    222.         TCarKind car_kind = (rand() % 2 == 0) ? CK_CAR : CK_TRUCK;
    223.    
    224.         if (Game.Cars.Count >= Game.Cars.Capacity) {
    225.             Game.Cars.Capacity = Game.Cars.Capacity == 0 ? 10 : Game.Cars.Capacity * 2;
    226.             Game.Cars.List = (TCar*)realloc(Game.Cars.List, Game.Cars.Capacity * sizeof(TCar));
    227.         }
    228.    
    229.         Game.Cars.List[Game.Cars.Count].Lane = lane;
    230.         Game.Cars.List[Game.Cars.Count].Y = -rand() % 200 - 50;
    231.         Game.Cars.List[Game.Cars.Count].Kind = car_kind;
    232.         Game.Cars.Count++;
    233.     }
    234. }
    235.  
    236. void UpdateCars(void) {
    237.     int i = 0;
    238.     while (i < Game.Cars.Count) {
    239.         Game.Cars.List[i].Y += (int)Game.Gameplay.Speed;
    240.    
    241.         if (Game.Cars.List[i].Y - 30 > SCREEN_HEIGHT) {
    242.             Game.Cars.List[i] = Game.Cars.List[Game.Cars.Count - 1];
    243.             Game.Cars.Count--;
    244.             Game.Gameplay.Score += 10;
    245.             continue;
    246.         }
    247.    
    248.         if (Game.Gameplay.Active) {
    249.             RECT player_rect = GetPlayerRect();
    250.             RECT car_rect = GetCarRect(Game.Cars.List[i]);
    251.             if (CheckCollision(player_rect, car_rect)) {
    252.                 Game.Gameplay.Active = 0;
    253.                 if (Game.Gameplay.Score > Game.Gameplay.HighScore) {
    254.                     Game.Gameplay.HighScore = Game.Gameplay.Score;
    255.                 }
    256.             }
    257.         }
    258.    
    259.         i++;
    260.     }
    261. }
    262.  
    263. void UpdateGame(void) {
    264.     if (!Game.Gameplay.Active) return;
    265.  
    266.     Game.Gameplay.Speed = 4.0 + Game.Gameplay.Score / 1500;
    267.     if (Game.Gameplay.Speed > 11.0) Game.Gameplay.Speed = 11.0;
    268.     Game.Gameplay.Score += 0.2;
    269.  
    270.     Game.Gameplay.CarTimer++;
    271.     if (Game.Gameplay.CarTimer > 30 + (int)(30 - Game.Gameplay.Score / 100)) {
    272.         if (Game.Gameplay.CarTimer > 60 - (int)(Game.Gameplay.Score / 100)) {
    273.             Game.Gameplay.CarTimer = 0;
    274.             SpawnCar();
    275.         }
    276.     }
    277.  
    278.     UpdateCars();
    279.     UpdatePlayer();
    280.     Game.Road.ScrollY = (Game.Road.ScrollY + (int)Game.Gameplay.Speed) % 40;
    281. }
    282.  
    283. void RestartGame(void) {
    284.     InitRoad(&Game.Road);
    285.     InitPlayer(&Game.Player);
    286.     InitCars(&Game.Cars);
    287.     InitGameplay(&Game.Gameplay);
    288. }
    289.  
    290. // Отрисовка
    291. void DrawRoad(HDC hdc) {
    292.     DrawRect(hdc, Game.Road.Left, 0, ROAD_WIDTH, SCREEN_HEIGHT, GRAY, TRUE);
    293.     DrawLine(hdc, Game.Road.Left, 0, Game.Road.Left, SCREEN_HEIGHT, YELLOW, 4);
    294.     DrawLine(hdc, Game.Road.Left + ROAD_WIDTH, 0, Game.Road.Left + ROAD_WIDTH, SCREEN_HEIGHT, YELLOW, 4);
    295.  
    296.     int lane_width = ROAD_WIDTH / 3;
    297.     for (int i = 1; i <= 2; i++) {
    298.         int line_x = Game.Road.Left + i * lane_width;
    299.         for (int y = -40; y < SCREEN_HEIGHT + 40; y += 40) {
    300.             int y_pos = y + Game.Road.ScrollY;
    301.             if (y_pos >= 0 && y_pos <= SCREEN_HEIGHT) {
    302.                 DrawLine(hdc, line_x, y_pos, line_x, y_pos + 20, WHITE, 3);
    303.             }
    304.         }
    305.     }
    306. }
    307.  
    308. void DrawCar(HDC hdc, TCar car) {
    309.     int lane_width = ROAD_WIDTH / 3;
    310.     int x = Game.Road.Left + lane_width / 2 + car.Lane * lane_width;
    311.  
    312.     if (car.Kind == CK_TRUCK) {
    313.         DrawRect(hdc, x - 22, car.Y - 22, 45, 45, BROWN, TRUE);
    314.         DrawRect(hdc, x - 15, car.Y - 28, 30, 10, DARK_GRAY, TRUE);
    315.     } else {
    316.         DrawRect(hdc, x - 15, car.Y - 20, 30, 40, BLUE, TRUE);
    317.         DrawRect(hdc, x - 12, car.Y - 25, 24, 15, DARK_GRAY, TRUE);
    318.     }
    319.     DrawRect(hdc, x - 17, car.Y - 12, 6, 12, BLACK, TRUE);
    320.     DrawRect(hdc, x + 11, car.Y - 12, 6, 12, BLACK, TRUE);
    321.     DrawRect(hdc, x - 17, car.Y + 8, 6, 12, BLACK, TRUE);
    322.     DrawRect(hdc, x + 11, car.Y + 8, 6, 12, BLACK, TRUE);
    323. }
    324.  
    325. void DrawPlayerCar(HDC hdc) {
    326.     int x = Game.Player.X;
    327.     DrawRect(hdc, x - 15, Game.Player.Y - 20, 30, 40, RED, TRUE);
    328.     DrawRect(hdc, x - 12, Game.Player.Y - 25, 24, 15, RED, TRUE);
    329.     DrawRect(hdc, x - 8, Game.Player.Y - 22, 6, 8, BLACK, TRUE);
    330.     DrawRect(hdc, x + 2, Game.Player.Y - 22, 6, 8, BLACK, TRUE);
    331.     DrawCircle(hdc, x - 14, Game.Player.Y - 10, 4, YELLOW, TRUE);
    332.     DrawCircle(hdc, x + 14, Game.Player.Y - 10, 4, YELLOW, TRUE);
    333.     DrawRect(hdc, x - 16, Game.Player.Y - 12, 6, 12, BLACK, TRUE);
    334.     DrawRect(hdc, x + 10, Game.Player.Y - 12, 6, 12, BLACK, TRUE);
    335.     DrawRect(hdc, x - 16, Game.Player.Y + 8, 6, 12, BLACK, TRUE);
    336.     DrawRect(hdc, x + 10, Game.Player.Y + 8, 6, 12, BLACK, TRUE);
    337. }
    338.  
    339. void DrawUI(HDC hdc) {
    340.     char textBuf[256];
    341.     int oldBkMode = SetBkMode(hdc, TRANSPARENT);
    342.  
    343.     sprintf(textBuf, "СЧЁТ: %.0f", Game.Gameplay.Score);
    344.     TextOutA(hdc, 10, 10, textBuf, strlen(textBuf));
    345.  
    346.     sprintf(textBuf, "РЕКОРД: %.0f", Game.Gameplay.HighScore);
    347.     TextOutA(hdc, 10, 50, textBuf, strlen(textBuf));
    348.  
    349.     sprintf(textBuf, "СКОРОСТЬ: %.0f", Game.Gameplay.Speed * 25);
    350.     TextOutA(hdc, 10, 90, textBuf, strlen(textBuf));
    351.  
    352.     for (int i = 0; i < 3; i++) {
    353.         COLORREF color = (i == Game.Player.Lane) ? BLUE : DARK_GRAY;
    354.         DrawRect(hdc, SCREEN_WIDTH - 100 + i * 25, 20, 20, 40, color, TRUE);
    355.         DrawRect(hdc, SCREEN_WIDTH - 100 + i * 25, 20, 20, 40, BLACK, FALSE);
    356.     }
    357.  
    358.     if (!Game.Gameplay.Active) {
    359.         DrawRect(hdc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, BLACK, TRUE);
    360.         SetBkMode(hdc, TRANSPARENT);
    361.         SetTextColor(hdc, RED);
    362.         TextOutA(hdc, SCREEN_WIDTH/2 - 100, SCREEN_HEIGHT/2 - 60, "GAME OVER", 9);
    363.         SetTextColor(hdc, WHITE);
    364.         sprintf(textBuf, "Счёт: %.0f", Game.Gameplay.Score);
    365.         TextOutA(hdc, SCREEN_WIDTH/2 - 70, SCREEN_HEIGHT/2, textBuf, strlen(textBuf));
    366.         SetTextColor(hdc, YELLOW);
    367.         sprintf(textBuf, "Рекорд: %.0f", Game.Gameplay.HighScore);
    368.         TextOutA(hdc, SCREEN_WIDTH/2 - 80, SCREEN_HEIGHT/2 + 40, textBuf, strlen(textBuf));
    369.         SetTextColor(hdc, WHITE);
    370.         TextOutA(hdc, SCREEN_WIDTH/2 - 120, SCREEN_HEIGHT/2 + 100, "Нажми R для рестарта", 21);
    371.     }
    372.  
    373.     SetBkMode(hdc, oldBkMode);
    374. }
    375.  
    376. void Render(HDC hdc) {
    377.     DrawRect(hdc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GREEN, TRUE);
    378.     DrawRoad(hdc);
    379.     for (int i = 0; i < Game.Cars.Count; i++) {
    380.         DrawCar(hdc, Game.Cars.List[i]);
    381.     }
    382.     DrawPlayerCar(hdc);
    383.     DrawUI(hdc);
    384. }
    385.  
    386. // Оконная процедура
    387. LRESULT CALLBACK MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
    388.     PAINTSTRUCT ps;
    389.     HDC hdcPaint;
    390.  
    391.     switch (Msg) {
    392.         case WM_CREATE:
    393.             srand(time(NULL));
    394.             InitRoad(&Game.Road);
    395.             InitPlayer(&Game.Player);
    396.             InitCars(&Game.Cars);
    397.             InitGameplay(&Game.Gameplay);
    398.        
    399.             // Инициализация двойной буферизации
    400.             hdcPaint = GetDC(hWnd);
    401.             Graphics.hBitmap = CreateCompatibleBitmap(hdcPaint, SCREEN_WIDTH, SCREEN_HEIGHT);
    402.             Graphics.BufferDC = CreateCompatibleDC(hdcPaint);
    403.             Graphics.hOldBitmap = SelectObject(Graphics.BufferDC, Graphics.hBitmap);
    404.             ReleaseDC(hWnd, hdcPaint);
    405.        
    406.             SetTimer(hWnd, ID_TIMER, TIMER_INTERVAL, NULL);
    407.             break;
    408.        
    409.         case WM_TIMER:
    410.             if (wParam == ID_TIMER) {
    411.                 UpdateGame();
    412.                 InvalidateRect(hWnd, NULL, FALSE);
    413.             }
    414.             break;
    415.        
    416.         case WM_PAINT:
    417.             hdcPaint = BeginPaint(hWnd, &ps);
    418.             Render(Graphics.BufferDC);
    419.             BitBlt(hdcPaint, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Graphics.BufferDC, 0, 0, SRCCOPY);
    420.             EndPaint(hWnd, &ps);
    421.             break;
    422.        
    423.         case WM_KEYDOWN:
    424.             if (wParam == VK_ESCAPE) {
    425.                 PostQuitMessage(0);
    426.             }
    427.             if (wParam == 'R' || wParam == 'r') {
    428.                 RestartGame();
    429.             }
    430.             break;
    431.        
    432.         case WM_DESTROY:
    433.             KillTimer(hWnd, ID_TIMER);
    434.             SelectObject(Graphics.BufferDC, Graphics.hOldBitmap);
    435.             DeleteDC(Graphics.BufferDC);
    436.             DeleteObject(Graphics.hBitmap);
    437.             free(Game.Cars.List);
    438.             PostQuitMessage(0);
    439.             break;
    440.        
    441.         default:
    442.             return DefWindowProc(hWnd, Msg, wParam, lParam);
    443.     }
    444.     return 0;
    445. }
    446.  
    447. // Точка входа
    448. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    449.     WNDCLASS wc = {0};
    450.     MSG msg;
    451.  
    452.     wc.style = CS_HREDRAW | CS_VREDRAW;
    453.     wc.lpfnWndProc = MainWndProc;
    454.     wc.hInstance = hInstance;
    455.     wc.hbrBackground = GetStockObject(BLACK_BRUSH);
    456.     wc.lpszClassName = "GameRacingClass";
    457.  
    458.     RegisterClass(&wc);
    459.  
    460.     CreateWindow("GameRacingClass", "Game Racing",
    461.         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    462.         200, 30, SCREEN_WIDTH, SCREEN_HEIGHT,
    463.         NULL, NULL, hInstance, NULL);
    464.  
    465.     while (GetMessage(&msg, NULL, 0, 0)) {
    466.         TranslateMessage(&msg);
    467.         DispatchMessage(&msg);
    468.     }
    469.  
    470.     return msg.wParam;
    471. }
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Юный, активный, не нужный.

    Дельфя не код, это УГ. Тут не годится.

    :sarcastic:
     
  12. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    17
    Код (Text):
    1.  
    2. function StrLen(tStr:PChar):integer;  
    3. asm
    4.   PUSH  EBX
    5.   MOV  EDX,EAX  
    6. @L1:  MOV  EBX,[EAX]  
    7.   ADD  EAX,4  
    8.   LEA  ECX,[EBX-$01010101]  
    9.   NOT  EBX  
    10.   AND  ECX,EBX  
    11.   AND  ECX,$80808080  
    12.   JZ  @L1  
    13.   TEST  ECX,$00008080  
    14.   JZ  @L2
    15.   SHL  ECX,16  
    16.   SUB  EAX,2
    17. @L2:  SHL  ECX,9  
    18.   SBB  EAX,EDX  
    19.   POP  EBX
    20. end;
    21.  
    Код (Pascal):
    1.  
    2. function StrLen(tStr: PChar): integer;
    3. begin
    4.     result := 0;
    5.     while tStr[result] <> #0 do
    6.           if tStr[result + 1] <> #0 then
    7.              if tStr[result + 2] <> #0 then
    8.                if tStr[result + 3] <> #0 then
    9.                 inc(result, 4)
    10.              else
    11.              begin
    12.                  inc(result, 3);
    13.                  exit;
    14.              end
    15.             else
    16.             begin
    17.                 inc(result, 2);
    18.                 exit;
    19.              end
    20.          else
    21.          begin
    22.              inc(result);
    23.              exit;
    24.          end;
    25. end;
    26.  
    Разницы в скорости почти нет
     
  13. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Tech,

    Братишка а ты знаешь что этот человек f13 протекторов порешал больше, чем ты прожил ?

    Этот форум, люди было есчо когда ты в детский сад ходил и не тебе правила задавать.
     
    Последнее редактирование: 12 июн 2026 в 04:00
  14. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Я как раз паскаль изучал для задач производительности, пока ты мне глаза не открыл.
    Ты же не модер вроде? Чего раскудахтался? Убери все медленное, оставь только асм.
     
    Последнее редактирование: 12 июн 2026 в 04:04
  15. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Tech,

    Тебя забанят, ты хочешь сломать то, что наработано годами.
     
  16. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    А что наработано то? Имхо одна нищета и убожество.
    schuler, это не аргумент для них. У них все тезисы на уровне веры.
    --- Сообщение объединено, 12 июн 2026 в 05:31 ---
    Рецепт как стать невменяемым безмозглым дураком с манией величия.

    2026-06-12_05-29-33.png
    --- Сообщение объединено, 12 июн 2026 в 05:50 ---
    Как вариант:
    Код (Pascal):
    1. function StrLen(tStr: PChar): integer;
    2. begin
    3.     result := 0;
    4.     while tStr[result] <> #0 do
    5.           if tStr[result + 1] <> #0 then
    6.              if tStr[result + 2] <> #0 then
    7.                if tStr[result + 3] <> #0 then
    8.                 inc(result, 4)
    9.              else
    10.              begin
    11.                  inc(result, 3);
    12.                  exit;
    13.              end
    14.             else
    15.             begin
    16.                 inc(result, 2);
    17.                 exit;
    18.              end
    19.          else
    20.          begin
    21.              inc(result);
    22.              exit;
    23.          end;
    24. end;
    Код (Pascal):
    1. function StrLen(tStr: PChar): integer;
    2. begin
    3.     result := 0;
    4.     while True do
    5.     begin
    6.         if tStr[result] = #0 then Exit;
    7.         if tStr[result + 1] = #0 then
    8.         begin
    9.             Inc(result);
    10.             Exit;
    11.         end;
    12.         if tStr[result + 2] = #0 then
    13.         begin
    14.             Inc(result, 2);
    15.             Exit;
    16.         end;
    17.         if tStr[result + 3] = #0 then
    18.         begin
    19.             Inc(result, 3);
    20.             Exit;
    21.         end;
    22.         Inc(result, 4);
    23.     end;
    24. end;
    --- Сообщение объединено, 12 июн 2026 в 05:54 ---
    Точнее так:
    Код (Pascal):
    1. function StrLen(tStr: PChar): integer;
    2. var
    3.     i: integer;
    4. begin
    5.     i := 0;
    6.     while True do
    7.     begin
    8.         if tStr[i] = #0 then Break;
    9.         if tStr[i+1] = #0 then
    10.         begin
    11.             i := i + 1;
    12.             Break;
    13.         end;
    14.         if tStr[i+2] = #0 then
    15.         begin
    16.             i := i + 2;
    17.             Break;
    18.         end;
    19.         if tStr[i+3] = #0 then
    20.         begin
    21.             i := i + 3;
    22.             Break;
    23.         end;
    24.         i := i + 4;
    25.     end;
    26.     Result := i;
    27. 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):
    1. function StrLen(tStr: PChar): integer;
    2. begin
    3.     Result := 0;
    4.     while tStr[Result] <> #0 do  Inc(Result);
    5. end;
     
  17. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Tech,

    Ты не понимаешь, этот скрипт убожество", сорян за термин, другой не применим:

    После сборки это превратится в билд чепухи. И это только длину строки узнать.

    > А что наработано то?

    Мы знаем архитектуру, сам я создал инструменты анализа, методы(картирование, наследование), работы по виртам, виксам.
    А вы сюда пришли с галимым паскалем без понятия даже что такое визор или профайлер. Не зная истории форума. Благодаря мне ты можешь редактировать свои сообщения.
     
  18. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    Такое ощущение, что ты сам сомневаешься в ценности своих поделок. Иначе зачем втыкать перья в жопу.

    Я не куплю твои инструменты анализа.
    Это не мой сорец. По поводу того как его преобразовать это мысли вслух. Мне хватает функции Length.
     
  19. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    667
    Tech,

    Судя по скрипту, алго, ты умственно отсталый либо же школьник. Про select:case не слышал?

    А еще есть осевые интерфейсы для таких примитивов.

    Предлагаю таких сразу в бан.
     
    Последнее редактирование: 12 июн 2026 в 12:31
  20. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    17
    Ahimov, Это мой копипаст из сети, просто замерил скорость выполнения на делфи и на асме, никакой разницы не заметил по скорости. Вернее разница есть, но она не существенна.