 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Alpinador Lt Cmdr

Registrado: 21 Abr 2014Mensajes: 123
|
Publicado: Lun 21 Ago, 2017 6:38 pm Asunto: Creando Tablero Hexagonal (codigo de Leo) |
|
|
Trabajando con Tableros hexagonales, se me ocurrio pedirle ayuda a _Leo, en fin, ya sabeis como es no? aqui os dejo el codigo
| Código: | //---------------------------------------------------------------------------
#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:: DrawHexGrid()
{
// 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;
}
//--------------------------------------------------------------------------- |
Aqui el proyecto en RAD Studio 10
http://www.qualinost-studio.tk/descargas/tablero_hexagonal_rutinaIIm.rar |
|
| Volver arriba |
|
 |
vizca321 Lt


Registrado: 06 May 2008Mensajes: 83Ubicación: Mexico
|
Publicado: Lun 22 Ene, 2024 11:25 pm Asunto: Re: Creando Tablero Hexagonal (codigo de Leo) |
|
|
Que tipo de objeto o variable es la celda
| Cita: | celda[x][y].rect = TRect(pos.x, pos.y, pos.x + 90, pos.y + 90);
celda[x][y].flag = false; |
_________________ [code:1]//----------------Att Gabriel----------------
void Gracias(){
if (Respuesta == true){
Showmessage("Muchisimas Gracias!")
else
Showmessage("Ojala te sirva... ^_^ ");
}[/code:1] |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|