Recursos para aprender a programar

3744 Nachrichten, 125 Seiten:  1; 121 122123 124 125 ↖ Zurück zur Themenliste

~msgScore~: +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é.

~msgScore~: +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);
}
}
}

~msgScore~: +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é.

~msgScore~: +0

3664. Dherhion,

~msgScore~: +0

Zuletzt geändert von Dherhion, Jun 3 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?

~msgScore~: +0

3666. Dherhion,

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

~msgScore~: +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?

~msgScore~: +0

3668. Dherhion,

Investiga sobre wx y tus problemas estarán resueltos.

~msgScore~: +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

~msgScore~: +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);
}
}

~msgScore~: +0

3671. dhegwork-adakly,

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

~msgScore~: +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

~msgScore~: +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ó.

~msgScore~: +0

Zuletzt geändert von IceCat, Jun 3 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ó.

~msgScore~: +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.

~msgScore~: +0

Zuletzt geändert von IceCat, Jun 3 2024 19:07:09

3676. Alejandro_Vargas,

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

~msgScore~: +0

3677. IceCat,

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

~msgScore~: +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

~msgScore~: +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

~msgScore~: +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.

~msgScore~: +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.

~msgScore~: +0

3682. Alejandro_Vargas,

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

~msgScore~: +0

3683. dhegwork-adakly,

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

~msgScore~: +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

~msgScore~: +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...

~msgScore~: +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.

~msgScore~: +0

3687. Ramson,

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

~msgScore~: +0

3688. Dherhion,

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

~msgScore~: +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í.

~msgScore~: +0

Zuletzt geändert von Alejandro_Vargas, Jun 4 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?

~msgScore~: +0

3744 Nachrichten, 125 Seiten:  1; 121 122123 124 125 ↖ Zurück zur Themenliste

Auf das Thema antworten

Sie müssen angemeldet sein, um posten zu können

Passwort vergessen? Benutzerkonto erstellen