anchor.diff:  bool isRunning = false;
   
   final bitmapInfo = BITMAPINFO.allocate();
  +Pointer<Void> bitmapMemory = nullptr;
   int bitmapWidth;
   int bitmapHeight;
   int bytesPerPixel = 4;
  
positive.code: }
  
  void drawRect(int rectX, int rectY, int width, int height, int hexColor) {
    // unsigned char R = static_cast<unsigned char>(((hexColor >> 16) & 0xFF));
    // unsigned char G = static_cast<unsigned char>(((hexColor >> 8) & 0xFF));
    // unsigned char B = static_cast<unsigned char>((hexColor & 0xFF));
    final pitch = bitmapWidth * bytesPerPixel;
    // uint8_t *Row = (uint8_t *)BitmapMemory;
    for (var y = 0; y < bitmapHeight; ++y) {
      // uint8_t *Pixel = (uint8_t *)Row;
      for (var x = 0; x < bitmapWidth; ++x) {
        if ((x >= rectX && y >= rectY) &&
            (x <= (rectX + width) && y <= (rectY + height))) {
          //blue
          // *Pixel = B;
          ++pixel;
  
          //green
          // *Pixel = G;
          ++pixel;
  
          //red
          // *Pixel = R;
          ++pixel;
  
          // *Pixel = 0;
          ++pixel;
        } else {
          // move along
          ++pixel;
          ++pixel;
          ++pixel;
          ++pixel;
        }
      }
      row += pitch;
    }
  }
  
  
negative.code:   bitmapInfo.biClrUsed = 0;
    bitmapInfo.biClrImportant = 0;
  
    final bitmapMemorySize = (width * height) * bytesPerPixel;
    bitmapMemory =
        VirtualAlloc(nullptr, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);
  
    // init other variables here
    blocksPerWidth = (width / 10).floor();
    blocksPerHeight = (height / 10).floor();
    data = List.generate(
        blocksPerHeight, (e) => List.generate(blocksPerWidth, (e) => 0));
  
    resetGame();
  }
  
  void draw(int hdc, RECT rect, int x, int y, int width, int height) {
    // update memory state bitmap to window
    // this is a rect to rect copy
    final windowWidth = rect.right - rect.left;
    final windowHeight = rect.bottom - rect.top;
    StretchDIBits(
        hdc,
        //X, Y, Width, Height, X, Y, Width, Height,
        0,
        0,
        bitmapWidth,
        bitmapHeight,
        0,
        windowHeight + 1,
        windowWidth,
        -windowHeight,
        bitmapMemory,
        bitmapInfo.addressOf,
        DIB_RGB_COLORS,
        SRCCOPY);
  }
  
  void update() {
    // Update game simulation
    // set everything in our 10x10 grid and have that write to memory
  
    //move snake
    moveSnake();
  
    // is the snake head colliding with apple?
    if (snakePoints[0].x == appleX && snakePoints[0].y == appleY) {
      collectApple();
    }
  
    // check if snake is colliding with itself
    for (var i = 0; i < snakePoints.length; i++) {
      if (i > 0) {
        if (snakePoints[i].x == snakePoints[0].x &&
            snakePoints[i].y == snakePoints[0].y) {
          gameOver();
        }
      }
    }
  
    setVectorToMemory();
  }
  
  int MainWindowProc(int hwnd, int uMsg, int wParam, int lParam) {
  