Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
seleccionar celdas del tablero

Hola Neftali Casimiro y compañia

esta vez es algo sencillo (creo) pero que a mi me marea bastante jajaja

recordais el TABLERO del juego no?? de 11 x 12 filas y columnas (empezando desde la posicion 0,0 X-Y)

bien, lo que me gustaria hacer de forma rapida, es calcular en base a un numero de puntos de una tirada de dado (numero entero del 1 al 16) las posiciones en dicho tablero de las celdas accesibles mediante dicha puntuacion para iluminarlas de forma suave para indicar el RANGO de donde puede moverse partiendo de donde tiene la nave posicionada en celda tal y cual

yo no acabo de verlo muy claro aunque si me pongo lo hare pero quizas vosotros tengais la mente mas despierta para elaborar alguna clase de codigo que lo haga bien y sin formar mucho lio

solo necesito que haga el calculo de que celdas son las posibles "alcanzables" que podria "mover la ficha" en base a los puntos del dado (lo de iluminarlas ya lo hago yo, eso no problem)

un Saludo

Última edición por navbuoy fecha: Hace 2 Semanas a las 16:00:24.
Responder Con Cita
  #2  
Antiguo Hace 1 Semana
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.440
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por lo que recuerdo de clase (que a esta alturas es poco ) hay varias estrategias para resolverlo.
Una de las más fáciles de implementar es "Prueba y error".

Se trata de evaluar todas las posibilidades e ir descartando las que no son correctas. En tu caso recorrer todas las celdas del tablero, e ir descartando las que no son accesibles o no están a accesibles con tu tirada.

Te queda generar una función que te devuelva la distancia entre 2 celdas del tablero.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo Hace 1 Semana
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
le he preguntado a ChatGPT:

Cita:
Para resolver este problema, puedes crear una función que reciba una posición inicial y un número de puntos de movimiento, y que calcule todas las posiciones de las celdas a las que puedes moverte en un tablero de 11 x 12 celdas.

Para simplificar, consideremos que:

La ficha puede moverse en cuatro direcciones: arriba, abajo, izquierda y derecha.
Los movimientos están limitados por el tamaño del tablero y por los puntos de movimiento disponibles.
Una posible estrategia es usar una búsqueda en anchura (BFS, por sus siglas en inglés), que te permitirá explorar todas las celdas alcanzables en función de los puntos de movimiento.

Pasos:
Entrada:

La posición inicial de la ficha (fila, columna).
Los puntos de movimiento disponibles.

Proceso:

Utiliza una cola para ir guardando las posiciones a las que te puedes mover.
Desde cada posición, intenta moverte a las cuatro direcciones posibles.
Resta un punto de movimiento cada vez que te muevas a una nueva celda.
Evita moverte fuera del tablero o visitar la misma celda más de una vez.

Salida:

Un conjunto de posiciones a las que te puedes mover.

Utilizaremos un enfoque basado en BFS (búsqueda en anchura) con una cola y un conjunto para almacenar las celdas visitadas. A continuación te presento un ejemplo de cómo podrías implementarlo.
Código:
#include <vcl.h>
#include <queue>
#include <set>
#include <utility>  // Para std::pair
#include <vector>
#pragma hdrstop
#pragma argsused

// Definir las dimensiones del tablero
const int FILAS = 11;
const int COLUMNAS = 12;

// Función para obtener las posiciones alcanzables
std::set<std::pair<int, int>> movimientos_posibles(std::pair<int, int> inicio, int puntos_movimiento) {
    // Direcciones de movimiento: arriba, abajo, izquierda, derecha
    std::vector<std::pair<int, int>> direcciones = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    
    // Set para almacenar las posiciones alcanzables
    std::set<std::pair<int, int>> visitadas;
    // Cola para BFS (posición actual y puntos de movimiento restantes)
    std::queue<std::pair<std::pair<int, int>, int>> cola;
    
    // Agregar la posición inicial
    cola.push({inicio, puntos_movimiento});
    visitadas.insert(inicio);
    
    while (!cola.empty()) {
        // Obtener el frente de la cola
        auto actual = cola.front();
        cola.pop();
        int fila_actual = actual.first.first;
        int col_actual = actual.first.second;
        int movimientos_restantes = actual.second;
        
        if (movimientos_restantes > 0) {
            // Explorar las 4 direcciones
            for (auto direccion : direcciones) {
                int nueva_fila = fila_actual + direccion.first;
                int nueva_columna = col_actual + direccion.second;
                
                // Verificar si la nueva posición está dentro del tablero
                if (nueva_fila >= 0 && nueva_fila < FILAS && nueva_columna >= 0 && nueva_columna < COLUMNAS) {
                    std::pair<int, int> nueva_posicion = {nueva_fila, nueva_columna};
                    // Si la posición no ha sido visitada
                    if (visitadas.find(nueva_posicion) == visitadas.end()) {
                        // Agregar la nueva posición
                        visitadas.insert(nueva_posicion);
                        // Agregar la nueva posición a la cola con los movimientos restantes
                        cola.push({nueva_posicion, movimientos_restantes - 1});
                    }
                }
            }
        }
    }
    
    return visitadas;
}

int main() {
    // Posición inicial en la celda (5, 5)
    std::pair<int, int> inicio = {5, 5};
    int puntos_movimiento = 3;  // Número de puntos de movimiento

    // Obtener las celdas alcanzables
    std::set<std::pair<int, int>> celdas_alcanzables = movimientos_posibles(inicio, puntos_movimiento);

    // Imprimir las posiciones alcanzables
    for (auto posicion : celdas_alcanzables) {
        printf("(%d, %d)\n", posicion.first, posicion.second);
    }

    return 0;
}

creo que por ahi ya puedo ir desarrollandolo

me he puesto este disco para animarme con el codigo jaja



https://www.youtube.com/watch?v=0YG2...45yRnZ8mA1RE93

Última edición por navbuoy fecha: Hace 1 Semana a las 07:05:21.
Responder Con Cita
  #4  
Antiguo Hace 1 Semana
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
ya hemos hecho una pantalla de Login decente, menos mal

Responder Con Cita
  #5  
Antiguo Hace 1 Semana
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.440
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por navbuoy Ver Mensaje
ya hemos hecho una pantalla de Login decente, menos mal

Está chula!!
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo Hace 4 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino




Mira Neftali, joe estuvo ampliando cosas del interface de botones con mas cosas que tendra el juego
Tambien he optimizado el juego (porque utilizando TTable que carga todo en memoria, cargaba 18.000 registros del tablero total de celdas (que cazurro llega a ser uno eh?), menos mal que me di cuenta que con un TQuery todo queda mucho mas optimizado a nivel de consultas de X registros y ya)

como ves ahi, la policia nos atosiga igual que en la vida real, no es fantastico este juego??

Última edición por navbuoy fecha: Hace 4 Días a las 01:18:01.
Responder Con Cita
  #7  
Antiguo Hace 4 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
Mirad Casimiro y Neftali

Responder Con Cita
  #8  
Antiguo Hace 4 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino



Última edición por navbuoy fecha: Hace 4 Días a las 05:28:29.
Responder Con Cita
  #9  
Antiguo Hace 4 Días
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.193
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #10  
Antiguo Hace 3 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
Casimiro, Neftali, mirad, he estado trabajando en un "switcher" para alternar entre 2 tipos de tableros, el normal que ha sido el de las captures que hemos visto hasta ahora. y un modo "reducido" con celdas hexagonales mas cucas y pequeñitas (aun tengo que adaptar los sprites) pero tiene una pinta asi:

Responder Con Cita
  #11  
Antiguo Hace 3 Días
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.440
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto

Por ahora se ve espectacular.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo Hace 3 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
pues si, ya me lo habeis dicho varias personas que esta todo muy cuidado y bien diseñado y claro que si, nos estamos esforzando en que el aspecto sea bueno ya que no tengo yo talento como para hacer un juego asi espectacular en plan animado, podria si, ponerme con Unity o Unreal porque de C/C++ tengo ya algunos años de estudio y practica pero no se, las capacidades de "personalizar" cada paso que da el codigo en Rad Studio es lo que me convence mas que esos motores aunque reconozco que con Unity y Unreal el resultado es demoledor (graficamente en 3D, renderizado, iluminacion y con efectos que si de particulas etc)

El EXE ahora funciona muy bien, le das y carga al momento y la conexion con el servidor de BD la hace en 1 segundo tambien

el total de lineas del Form1 (el del tablero) que es mas que nada todo el codigo principal tiene 2.770 lineas de momento.

tambien he implementado dentro, un sistema de manejo de archivos PAK donde almaceno cosas del juego para cargarlas luego de forma dinamica ya que estoy viendo que el peso del EXE aumenta ya que tiene graficos y cosas integradas "dentro" y todo eso va aumentando su tamaño claro.

Aparte ya he suprimido todo el uso de las TTable en memoria y todo funciona a base de TQuery's (de esa forma la carga y trasiego de datos con las consultas queda reducida y acotada a lo que necesita cada vez y no mas)

he escogido esta cancion para abrir la pantalla de Login (suena esa musica cuando ejecuta el programa)


Última edición por Casimiro Notevi fecha: Hace 3 Días a las 19:46:27.
Responder Con Cita
  #13  
Antiguo Hace 3 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
bueno, asi queda el tablero en modo reducido con los iconos

https://ibb.co/tbpxWRV


Última edición por Casimiro Notevi fecha: Hace 3 Días a las 19:45:52.
Responder Con Cita
  #14  
Antiguo Hace 2 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
gracias casimiro.... no se porque cuando agrego imagenes https no las pilla.... he visto que tu enlace pone una "i." delante... es por eso no?
Responder Con Cita
  #15  
Antiguo Hace 2 Días
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.193
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por navbuoy Ver Mensaje
gracias casimiro.... no se porque cuando agrego imagenes https no las pilla.... he visto que tu enlace pone una "i." delante... es por eso no?
Porque tu enlace es: https://ibb.co/tbpxWRV
Y eso no es una imagen, entonces lo que tienes que hacer es ir al enlace y pulsar sobre la imagen (botón derecho), copiar enlace de la imagen.
Entonces, ahora, sí, pegas ese enlace tras pulsar el icono de imagen, claro
Responder Con Cita
  #16  
Antiguo Hace 2 Días
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino
ah vale si, que lo que te da como enlace es la propia pagina si, claro, no me habia dado cuenta jeje

joe hizo esto esta mañana (creo que es un dibujo suyo de la "azafata") supongo que para ver como quedaria algo tipo helper


Última edición por navbuoy fecha: Hace 2 Días a las 16:20:35.
Responder Con Cita
  #17  
Antiguo Hace 12 Horas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 58
Poder: 1
navbuoy Va por buen camino





Última edición por navbuoy fecha: Hace 12 Horas a las 11:33:37.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como seleccionar un rango de celdas con Ctrl+clic de un StringGrid wanda Varios 3 28-04-2018 19:56:24
StringGrid problemas al seleccionar celdas danielmj Varios 3 29-10-2014 19:38:58
Cambiar color por defecto al seleccionar varias celdas de un TStringGrid JAI_ME Varios 1 05-08-2012 18:58:19
como seleccionar las celdas de un dbgrid con el mouse jjaen26 OOP 0 13-10-2011 17:48:45
Tablero de Control lucero_chivas C++ Builder 5 23-08-2006 16:59:31


La franja horaria es GMT +2. Ahora son las 00:18:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi