Seguro que siempre os habéis preguntado como se hace un tablero hexagonal en pantalla
Aqui os dejo parte de mi codigo para que lo implementéis en vuestro programa si queréis....es muy sencillo
Gracias a _Leo de Lanzarote por sus correcciones en la rutina original
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DrawHexGrid();
}
//---------------------------------------------------------------------------
inline TPoint PosPt(int x, int y)
{
const int sx = 70, sy = 41; //separación
return Point((y&1)*sx + x*sx*2, y*sy);
}
//---------------------------------------------------------------------------
void __fastcall TForm1:SmilierawHexGrid()
{
// limpia la pantalla
skreen->Canvas->Brush->Color = clBlack;
skreen->Canvas->Rectangle(0, 0, skreen->Width, skreen->Height);
for (int y = 0; y < 12; ++y)
{
for (int x = 0; x < 8; ++x)
{
TPoint pos = PosPt(x, y);
celda[x][y].rect = TRect(pos.x, pos.y, pos.x + 90, pos.y + 90);
celda[x][y].flag = false;
skreen->Canvas->Draw(pos.x, pos.y, Image1->Picture->Graphic);
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::skreenMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
static int oldCol = 0, oldRow = 0;
// Busca celda
bool found = false;
int col, row;
for (int y = 0; y < 12 && !found; ++y)
{
for (int x = 0; x < 8; ++x)
{
TPoint pos = PosPt(x, y);
if (PtInRect(celda[x][y].rect, Point(X, Y)) &&
!Image3->Picture->Bitmap->Canvas->Pixels[X - pos.x][Y - pos.y])
{
found = true;
col = x;
row = y;
if (col == oldCol && row == oldRow) return;
// Como ejemplo cambiamos la celda al pasar por encima
celda[col][row].flag = !celda[col][row].flag;
skreen->Canvas->Draw(pos.x, pos.y, celda[col][row].flag
? Image2->Picture->Graphic : Image1->Picture->Graphic);
break;
}
}
}
Caption = found ? String().sprintf(L"%d, %d", col, row) : String("<no>");
oldCol = col;
oldRow = row;
}
//---------------------------------------------------------------------------