Recursos para aprender a programar

3744 сообщений, 125 страниц:  1; 121 122123 124 125 ↖ Вернуться к списку тем

счёт: +38

3661. Dherhion,

Pues no estaría mal. habría que idear bien el prompt y mantenerlo actualizado con los cambios, claro. Yo me estoy peleando con la concurrencia y la clase Network, he conseguido conectar que ya es, pero a la hora de procesar los eventos en un hilo distinto algo hago mal y no se el qué.

счёт: +0

3662. Alejandro_Vargas,

Lo estás haciendo con async quiero pensar? Yo lo hice así y me funciona perfecto, al menos para llamar a la función que tiene el while que maneja la red.
Adjunto mi pequeño ejemplo:
Cliente:

include "bgt_compat.nvgt"

include "form.nvgt"

include "speech.nvgt"

audio_form form;
network n;
network_event@ e;
int list, button, input;
void main(){
n.setup_client(10, 10);
n.connect("localhost", 6000);
form.create_window("networking test");
list=form.create_list("Lista de mensajes");
input=form.create_input_box("Escribe un mensaje", "", "", 0);
button=form.create_button("Enviar", true);
async<void> exec(netloop);
while(true){
wait(5);
form.monitor();
if(form.is_pressed(button)){
n.send_reliable(0, form.get_text(input), 0);
form.set_text(input, "");
}
}
}
void netloop(){
while(true){
wait(5);
@e = n.request();

if(e.type

event_connect) speak("¡Conectado!");


if(e.type == event_receive && e.channel == 0){
form.add_list_item(list, e.message, -1, false, false);
speak(e.message);
}
}
}

Servidor:

include "bgt_compat.nvgt"

include "speech.nvgt"

network n;
network_event@ e;
void main(){
n.setup_local_server(6000, 10, 10);
n.connect("localhost", 6000);
show_window("networking test");
async<void> exec(netloop);
while(!key_pressed(KEY_ESCAPE)){
wait(5);
if(key_pressed(KEY_L)){
uint64[] peer_list = n.get_peer_list();
speak("Clientes conectados: "+peer_list.length());
}
}
}
void netloop(){
while(true){
wait(5);
@e = n.request();

if(e.type == event_receive && e.channel == 0){
n.send_reliable(0, e.message, 0);
}
}
}

счёт: +0

3663. Alejandro_Vargas,

Actualizo mis pruebas con la concurrencia, ya logré ejecutar la red de lo que puse arriba en otro hilo y no de manera asíncrona, es similar a como se maneja en Python, dejo los ejemplos:
Cliente:

include "bgt_compat.nvgt"

include "form.nvgt"

include "speech.nvgt"

audio_form form;
network n;
network_event@ e;
int list, button, input;
thread my_thread("netloop");
void main(){
n.setup_client(10, 10);
n.connect("localhost", 6000);
form.create_window("networking test");
list=form.create_list("Lista de mensajes");
input=form.create_input_box("Escribe un mensaje", "", "", 0);
button=form.create_button("Enviar", true);
my_thread.start(netloop);
while(true){
wait(5);
form.monitor();
if(form.is_pressed(button)){
n.send_reliable(0, form.get_text(input), 0);
form.set_text(input, "");
}
}
}
void netloop(dictionary@ args=null){
while(true){
wait(5);
@e = n.request();

if(e.type

event_connect) speak("¡Conectado!");


if(e.type == event_receive && e.channel == 0){
form.add_list_item(list, e.message, -1, false, false);
speak(e.message);
}
}
}

Servidor:

include "bgt_compat.nvgt"

include "form.nvgt"

include "speech.nvgt"

network n;
network_event@ e;
thread my_thread("netloop");
void main(){
n.setup_local_server(6000, 10, 10);
n.connect("localhost", 6000);
show_window("networking test");
my_thread.start(netloop);
while(!key_pressed(KEY_ESCAPE)){
wait(5);
if(key_pressed(KEY_L)){
uint64[] peer_list = n.get_peer_list();
speak("Clientes conectados: "+peer_list.length());
}
}
}
void netloop(dictionary@ args=null){
while(true){
wait(5);
@e = n.request();

if(e.type == event_receive && e.channel == 0){
n.send_reliable(0, e.message, 0);
}
}
}
El único problema que veo hasta ahora es la comunicación entre hilos tipo para que no vaya a haber broncas al cerrar el programa o algo similar. La única que se me ocurre es usar variables globales y que, por ejemplo, en el while se haga una verificación para que si x variables es igual a x valor, entonces se efectúe el cierre del hilo y que todo salga correcto, de otra manera la verdad no sé.

счёт: +0

3664. Dherhion,

счёт: +0

Последнее изменение Dherhion, 03.06.2024 11:01:21

3665. IceCat,

Hola qué honda. Alguien me puede decir porqué en el menú de contexto no me aparece la opción de compilar script?

счёт: +0

3666. Dherhion,

marcaste la casilla correspondiente a la hora de instalarlo, asumo?

счёт: +0

3667. Zaitorus,

Me gustaría comenzar a crear aplicaciones en Python con interfaz gráfica, sé muy poco de todo esto, pero quiero recordar que para que una interfaz gráfica sea accesible con lectores de pantalla, hay que utilizar una librería diferente? no sé si ese es el término correcto. ¿Alguien me podría dar algo de información, por favor?

счёт: +0

3668. Dherhion,

Investiga sobre wx y tus problemas estarán resueltos.

счёт: +0

3669. IceCat,

Sí. Y de echo hice la instalación 3 veces para ver si me salto algo pero lo hago todo bien. Estas son las opciones que tengo. Hasta hice la reinstalación 3 veces.
Bundled include scripts checked 1 of 5 level 0
Windows compilation stubs checked 2 of 5 level 0
Linux cross-compilation stubs not checked 3 of 5 level 0
MacOS cross-compilation stubs not checked 4 of 5 level 0
File explorer context menu registration checked 5 of 5 level 0

счёт: +0

3670. Dherhion,

Es raro lo que te sucede.
Por cierto, arreglado. me falta gestionar el tema de la desconexión de clientes.

include "include/Cliente.nvgt"

funcdef void FuncEscuchar();

void main() {
show_window("test");
wait(10);
// Crear una instancia de Cliente
Cliente cliente("localhost", 233);

// Intentar conectar al servidor
if (!cliente.conectar()) {
screen_reader_speak("Error conectando al servidor", true);
return;
}

wait(10);
screen_reader_speak("Conectado al servidor", true);

// Crear una delegación para la función escuchar
async<void>(cliente.get_escuchar_func());

while (true) {
// Verificar si la tecla F4 está presionada para enviar un ping
if (key_pressed(KEY_F4)) {
cliente.enviar_ping();
wait(500); // Espera para evitar múltiples pulsaciones rápidas
}
wait(10); // Añadir una pequeña espera para evitar un bucle excesivamente rápido
}
}
class Cliente {
network n;
string direccion;
int puerto;
bool conectado;
datetime tiempo_ping;

Cliente(string dir, int p) {
direccion = dir;
puerto = p;
conectado = false;
}

bool conectar() {
if (!n.setup_client(1, 10)) {
// error no se ha podido iniciar el cliente
return false;
}
if (n.connect(direccion, puerto) == 0) {
// error no se ha podido conectar al servidor
alert("error", "No hay servidor");
return false;
}
conectado = true;
return true;
}

void enviar_mensaje(string mensaje) {
if (conectado) {
n.send_reliable(1, mensaje, 0);
}
}

void enviar_ping() {
if (conectado) {
tiempo_ping.set_date(DATE_YEAR, DATE_MONTH, DATE_DAY);
tiempo_ping.set_time(TIME_HOUR, TIME_MINUTE, TIME_SECOND);
n.send_reliable(1, "ping", 0);
screen_reader_speak("Ping enviado", true);
}
}

void escuchar() {
while (true) { // Aquí añadimos un bucle para mantener la escucha activa
wait(5);
network_event e = n.request(5); // Removemos @
if (e.type != event_none) { // Verificamos si no es null
procesar_evento(e);
}
}
}

void procesar_evento(network_event e) {
if (e.type == event_receive) {
if (e.message == "pong") {
datetime tiempo_pong;
tiempo_pong.set_date(DATE_YEAR, DATE_MONTH, DATE_DAY);
tiempo_pong.set_time(TIME_HOUR, TIME_MINUTE, TIME_SECOND);
int ms = calcular_diferencia_ms(tiempo_ping, tiempo_pong);
screen_reader_speak("Pong recibido en " + ms + " ms", true);
}
}
}

int calcular_diferencia_ms(datetime inicio, datetime fin) { // Removemos @
int diff = (fin.hour - inicio.hour) * 3600000 + (fin.minute - inicio.minute) * 60000 + (fin.second - inicio.second) * 1000;
return diff;
}

FuncEscuchar@ get_escuchar_func() {
return FuncEscuchar(this.escuchar);
}
}

счёт: +0

3671. dhegwork-adakly,

A mí tampoco me salen las opciones en el menú de contexto.

счёт: +0

3672. Markk,

Para los del menú de contexto, no tendrán windows 11 y el nuevo menú, no? supongo que las opciones de nvgt saldrán en el menú básico de toda la vida

счёт: +0

3673. IceCat,

No, conseguí recuperar el menú clásico y sigue sin salir las opciones de compilación. Además, las opciones de compilación de bgt si que salen. Y edito porque se me olvidó aclarar que ya hablé con sam y dijo que puede ser un bug, que ni el mismo save el porqué. Lo raro es que me preguntó en que idioma tengo mi windows, le dije en español, y ahí se quedó.

счёт: +0

Последнее изменение IceCat, 03.06.2024 18:10:23

3674. Alejandro_Vargas,

Puede ser que tengan que se abran los archivos .nvgt con otra aplicación al dar enter, si establecen como app predeterminada nvgtw ya sale, al menos eso me acaba de pasar a mí en esta otra computadora y con eso se arregló.

счёт: +0

3675. IceCat,

No, ya chequé y está en predeterminados nvgt.exe. Editado. Listo ya lo arreglé, releyendo y releyendo vi que sí que había un nvgtw.exe. Ahí está la solución, yo estaba poniendo a nvgt.exe pero es nvgtw.exe. Thx.

счёт: +0

Последнее изменение IceCat, 03.06.2024 19:07:09

3676. Alejandro_Vargas,

Mmmmm entonces no sabría decirte la verdad, te la debo.

счёт: +0

3677. IceCat,

Ahí lo edité, de echo pensé que te quibocaste con lo de w, pero no, el tonto fui yo jaja.

счёт: +1

3678. asmodeus,

¿alguien encontró como añadir efectos a los sonidos? logré hacer una plantilla para probar el audio pero quiero ver eso del eco y la reverberación

счёт: +0

3679. Harry_Dresden,

Ustedes creen que está ahora el n v b g t como para hacer un juego regularmente grande' online y algo así. O es mas como una curiosidad y algo para jugar un
rato

счёт: +0

3680. Alejandro_Vargas,

Yo calculo a ojo de buen cubero como dirían por acá que sí está ya para usarse en sí pero no al 100%, sino más a un 70% u 80% maso, hay muchas cosas que mejorarse según lo que voy leyendo en discord.

счёт: +0

3681. dhegwork-adakly,

MI windows está en inglés, así que no debe ser eso. Y está configurado para abrir los .nvgt con nvgt.

счёт: +0

3682. Alejandro_Vargas,

No es con nvgt.exe, es con nvgtw.exe.

счёт: +0

3683. dhegwork-adakly,

A ver rebiso,
Y sí, es ese mismo.
Default app agrupación 1 de 3
nvgtw.exe 1 de 1

счёт: +0

3684. AnimalMetal,

pues ahi tienes stw y crazy party para que mires que tan grande. y no me acuerdo que otros juegos ya estan con nvgt

счёт: +0

3685. Harry_Dresden,

bueno pues. para los amantes de b g t aí tienen algo actualizado y mejorado para jugar. Holeada de clones que aguantan mas de 100 players en 3, 2, 1...

счёт: +0

3686. Dherhion,

Otro con la misma canción de los clones.
Que no, que no se puede. Que el código de los clones está mal, que portarlos a nvgt no es suficiente para que te aguanten 100 players.

счёт: +0

3687. Ramson,

se puede si lo modificas... pero nadie que se ve obligado a hacer un clon sabrá como mejorarlo xd

счёт: +0

3688. Dherhion,

Si lo modificas = Si lo haces prácticamente de 0.

счёт: +0

3689. Alejandro_Vargas,

Es lo que digo, no van a saber ni siquiera que se necesita el bgt_compat o algo similar, el pasar de bgt a nvgt, para la gente que mantiene los clones se convierte en una tarea titánica cuando no saben ni siquiera qué es una función o algo similar.
Por otra parte, hablando de no saber...
¿Para qué es en sí eso de fast mutex @dherhion? Ví la clase en un archivo del repo junto con sus métodos pero no le entendí.

счёт: +0

Последнее изменение Alejandro_Vargas, 04.06.2024 13:05:01

3690. Ramson,

e, pregunto lo mismo xd. aparte de que hace un sonidito curioso al ser leído con el eloquence, ¿Qué hace?

счёт: +0

3744 сообщений, 125 страниц:  1; 121 122123 124 125 ↖ Вернуться к списку тем

Ответить на тему

Чтобы писать на форуме, вам нужно сначала войти.

Забыли пароль? Создать учётную запись