User Tag List

Resultados 1 al 14 de 14

Tema: [C#] - Software Tutorial - Catalogo de juegos hecho por mi

  1. #1
    Avatar de Juancho
    Fecha de ingreso
    Jul 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    37
    Steam
    Hellhound7700
    Mensajes
    2,499

    [C#] - Software Tutorial - Catalogo de juegos hecho por mi

    Bueno este es el primero de unos cuantos ejemplos de software que voy a estar subiendo. En este caso es un catalogo de juegos para windows, hecho en un par de semanas hace como un año, lo he ido mejorando de a poco. Tome la iniciativa de hacerlo porque tengo un storage de red con 1.5 Tb de juegos y estaba manteniendo la lista con una planilla excel... apesta. Me considero un coleccionista cuando se trata de juegos y el hecho de hacer un catalogo me interesaba muchisimo.

    Screenshots:
    Spoiler: 





    Como veran es bastante feo, pero 100% funcional.

    Desde el punto de vista tecnologico, esta hecho en C# 4.0, usando WPF. Tiene varias cositas interesantes para el aficionado a .NET. Todo el sistema de busqueda esta hecho con linq de manera bastante mutable. Consta con extension methods, buenos ejemplos de recursividad, serializacion y una arquitectura que no es la gran cosa pero tiene los elementos bien separados cosa de que mañana puedo separar las funcionalidades principales y crear por ejemplo un web service. Contiene un control wpf customizado que esta mismo en la solucion, se trata de un control de grafica de barras que recibe un Dictionary<string, int> como parametro de criterio para graficar. En cuanto a WPF hay varias cosas interesantes, controles de paneles colapsables, controles de listas, imagen, tabla de datos, etc. Todo es adaptable a cualquier tamaño de ventana.

    Caracteristicas:
    Código:
    - Permite crear entradas de manera muy facil con un formulario con secciones colapsables.
    - En la pantalla principal muestra los datos del juego asi como imagenes del mismo que rotan cada 10 segundos.
    - Contiene la posibilidad de graficar el rendimiento esperado del juego en la pc donde se corre el programa (el programa detecta los specs de hardware).
    - Utiliza archivos xml para guardar la informacion de los juegos, la lista de generos y sub generos, quiere decir que hasta cierto punto es bastante configurable.
    - Tiene un directorio con filtros de busqueda muy especificos, se puede buscar juegos por rango de años, desarrollador, genero, tags... etc etc.
    - Al usar linq como principal metodologia de busqueda, el programa es sumamente rapido.
    - Contiene una pantalla con diferentes estadisticas, desde conteo de juegos por genero hasta graficas de mejores juegos por año, etc etc.
    Lista de ToDo para la proxima version:
    Código:
    - Informacion sobre capacidades multiplayer, por ejemplo si soporta lan, si tiene coop, etc etc.
    - Pantalla de configuracion... demasiado necesario.
    - Arreglar un bug que segun el procesador no toma los multicore.
    - Arreglar un bug que en algunas PCs no toma el espacio libre en disco
    - Implementar un buen sistema de puntaje de VGA, el actual es muy trucho
    - Implementar el boton de go to web site, pense que funcionaba pero no :)
    - Poder hacer override de la deteccion del hardware asi el usuario puede dar info de otra maquina o la info real de la suya si algo falla.
    - Soportar varios lenguajes
    Me imagino que este programa me va a ser bastante util en esas lanes que nadie sabe que jugar, simplemente se busca, se asegura que en todas las maquinas se corre y se baja del storage

    Links:
    Source
    Binaries

    Si alguien tiene alguna consulta sobre el codigo postee aca
    Última edición por Juancho; 07-09-2013 a las 11:46 PM Razón: faltaban cosas

  2. #2
    El neandertal Avatar de Master of the Wind
    Fecha de ingreso
    Jul 2013
    Edad
    33
    Steam
    Master of the Wind
    Origin
    MasterOfTheWind1
    Xfire
    masterofthewind1
    Mensajes
    10,777
    Yo te iba a preguntar en el otro topic en que lo hiciste, pero veo que fue en C#.


    Ta interesante, te chusmeo el codigo de atrevido.
    // Desktop: Core i5 13600KF - 32GB DDR4@3600 Mhz (16 GB DDR4 Thermaltake Thoughram + 16 GB DDR4 TForce VulcanZ) - Asus Prime Z690-P D4 - EVGA RTX 3090 FTW3 Ultra 24GB GDDR6X - SSD M.2 Kingston 2TB x2 - SSD M.2 Kingston 1TB - Thermaltake GF1 850W - Cooler Master Masterliquid 240 - Cooler Master H500 - Asus Strix Soar - Windows 11 x64
    // Gear:
    Razer Blackwidow V3 Mini 65% Hyperspeed - Razer Deathadder V2 Pro - Red Dragon Suzaku XL - Sony Dual Sense + Xbox Series Controller + 8BitDo USB Receiver 2 - Razer Kraken
    // Display: Gigabyte M32U 32" 4K@144hz
    // Retro: Core i3 6100 3.7Ghz - 8GB DDR4@2133 Mhz - 128 GB SSD - 1TB HDD - AMD Radeon R5 340X 2GB GDDR3 - 8 Bitdo SF30 Pro - Sony Wega Trinitron 36" CRT + VGA to Component transcoder - Batocera Linux
    // Work: Macbook Pro 15" 2019 - Core i9 2.3 Ghz - 16 GB DDR4 - 512 GB SSD - Intel UHD Graphcis 630/AMD Radeon Pro 560X 4GB GDDR5
    // Server ITX: Antec ISK 300 - Gigabyte GA AB350N Gaming WIFI - AMD Ryzen 3 3200g - 32GB RAM DDR4 - 1TB NVME SSD
    // Console peasant: New Nintendo 3DS XL 128GB MicroSD - Xbox 360 Slim 120GB - Nintendo Wii 512GB MicroSD - Nintendo Switch 256GB MicroSD + RCMLoader
    // Console no peasant: Steam Deck - 256GB SSD - 1TB MicroSD

  3. #3
    Admin Avatar de G4lle
    Fecha de ingreso
    Jul 2013
    Steam
    g4llego
    Origin
    G4lle
    Mensajes
    2,335
    Hablamos de esto varias veces pero no llegué a verlo en funcionamiento, así que voy a chusmearlo y romper un poco...

  4. #4
    Avatar de Reizor
    Fecha de ingreso
    Jul 2013
    Edad
    35
    Steam
    Reizorblei
    Origin
    Reizorblei
    Xbox Live
    mathidoloX2
    PSN
    Reizorblei
    Mensajes
    1,180
    Lo que tiene se estupendo WPF es la forma que podea customizar los controles desde xaml. y los bindings son un golazo.


  5. #5
    Avatar de Juancho
    Fecha de ingreso
    Jul 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    37
    Steam
    Hellhound7700
    Mensajes
    2,499
    Cita Iniciado por Daidalos Ver mensaje
    Lo que tiene se estupendo WPF es la forma que podea customizar los controles desde xaml. y los bindings son un golazo.
    Si, hacer controles custom esta de fiesta, es re facil y se presta para hacer de todo, en el codigo ese el control custom de graficas utiliza un canvas como base para dibujar las graficas.

  6. #6
    Administrador Avatar de Emisand
    Fecha de ingreso
    Aug 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    33
    Mensajes
    137
    Está bien lindo el código, bien ordenado y comentado.
    Por lo del multilanguaje creo que lo ideal es usar un resource file .resx por cada idioma que quieras implementar y cargar el idioma segun la configuracion regional y de cultura de windows, permitiendo hacer override en las settings.

    Para cambiar el idioma a cargar de los resources programaticamente se reemplaza en
    Thread.CurrentThread.CurrentCulture y en
    Thread.CurrentThread.CurrentUICulture

    Lo he hecho mil veces, en especial en aplicaciones web multilenguaje.

    Consulta:
    Tenés idea de como es la mejor manera de implementar un patrón MVC o MVVM con WPF?
    Última edición por Emisand; 14-09-2013 a las 03:10 AM

  7. #7
    Avatar de Juancho
    Fecha de ingreso
    Jul 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    37
    Steam
    Hellhound7700
    Mensajes
    2,499
    Cita Iniciado por Emisand Ver mensaje
    Está bien lindo el código, bien ordenado y comentado.
    Por lo del multilanguaje creo que lo ideal es usar un resource file .resx por cada idioma que quieras implementar y cargar el idioma segun la configuracion regional y de cultura de windows, permitiendo hacer override en las settings.

    Para cambiar el idioma a cargar de los resources programaticamente se reemplaza en
    Thread.CurrentThread.CurrentCulture y en
    Thread.CurrentThread.CurrentUICulture

    Lo he hecho mil veces, en especial en aplicaciones web multilenguaje.

    Consulta:
    Tenés idea de como es la mejor manera de implementar un patrón MVC o MVVM con WPF?
    Lo de usar los archivos de resource lo he hecho y de hecho es como planeo hacer el multilenguaje de esto gracias

    Trabaje en un proyecto bastante grande en el que usabamos MVVM con WPF. La estructura de la solucion estaba dividida principalmente en 3 carpetas Views, Models, ViewModels. Las views tenian solo de de WPF, lo importante que hay que tener en cuenta con este modelo es que el WPF tiene que tener basicamente cero logica, es tu principal regla con este patron de diseño, la cosa es cuando empezas a manejar conceptos de dependency property y dependency injection, ahi se complica un cacho la cosa. Pero bueno, sin irse mucho por las ramas, en el constructor de cada wpf haces que reciban el view model asociado como parametro y haces un set de propiedades que estan asociadas directamente al view model.

    Ejemplo, en el code behind del WPF:
    Código:
    private windowViewModel myVM;
    
    public int value1 
    {
         get { return myVM.value1; }
         set { myVM.value1 = value; }
    }
    Entonces en el xaml bindeas los controles a estas propiedades del code behind y te quedan bindeadas al view model.

    Luego el model, bueno eso simplemente van a ser tus entidades principalmente. Los principios a tener en cuenta es que el WPF nunca toque modelos y el view-model actua como mediador entre datos e interfaz.

  8. #8
    Administrador Avatar de Emisand
    Fecha de ingreso
    Aug 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    33
    Mensajes
    137
    Cita Iniciado por Juancho Ver mensaje
    Lo de usar los archivos de resource lo he hecho y de hecho es como planeo hacer el multilenguaje de esto gracias

    Trabaje en un proyecto bastante grande en el que usabamos MVVM con WPF. La estructura de la solucion estaba dividida principalmente en 3 carpetas Views, Models, ViewModels. Las views tenian solo de de WPF, lo importante que hay que tener en cuenta con este modelo es que el WPF tiene que tener basicamente cero logica, es tu principal regla con este patron de diseño, la cosa es cuando empezas a manejar conceptos de dependency property y dependency injection, ahi se complica un cacho la cosa. Pero bueno, sin irse mucho por las ramas, en el constructor de cada wpf haces que reciban el view model asociado como parametro y haces un set de propiedades que estan asociadas directamente al view model.

    Ejemplo, en el code behind del WPF:
    Código:
    private windowViewModel myVM;
    
    public int value1 
    {
         get { return myVM.value1; }
         set { myVM.value1 = value; }
    }
    Entonces en el xaml bindeas los controles a estas propiedades del code behind y te quedan bindeadas al view model.

    Luego el model, bueno eso simplemente van a ser tus entidades principalmente. Los principios a tener en cuenta es que el WPF nunca toque modelos y el view-model actua como mediador entre datos e interfaz.
    Bien, eso lo tengo claro.
    Yo he trabajado bastante con ASP.NET MVC.

    Lo que veo que estaría faltando, es como mapeo eventos en el xaml a algun controlador o algo que se encargue de ejecutar la operacion y refrescar la vista o cargar otra vista.
    Por ejemplo en MVC tenes en el html de la vista (con razor por ejemplo) los forms que linkeas a una acción de un controlador, o tenes links a acciones, o tambien usas ajax para ejecutar de forma async las acciones sin refrescar la página. Ahora en WPF como implementaría esto con el mínimo código posible en los xaml y code behind?

  9. #9
    Avatar de Reizor
    Fecha de ingreso
    Jul 2013
    Edad
    35
    Steam
    Reizorblei
    Origin
    Reizorblei
    Xbox Live
    mathidoloX2
    PSN
    Reizorblei
    Mensajes
    1,180
    Para utilizar los viewmodels en WPF se implementa una interfaz INotifyPropertChange que contiene una funcion OnPropertyChange, y en el set de cada property se notifica a la vista del cambio llamando a la funcion OnPropertyChange.
    A nivel de la vista se le bindea el model y a cada elemento de la vista se le bindea la property en la cual deberia de escuchar el evento onchange. En el caso de colecciones en vez de utilizar el List utilizas la clase ObservableCollection que internamente implementa INotifyPropertChange.

    Este post de codeproject me ayudo a entenderlo cuando empeze a laburar con WPF:
    http://www.codeproject.com/Articles/...del-Simplified
    Última edición por Reizor; 17-09-2013 a las 10:42 AM Razón: correciónes ortograficas xD y un link de ejemplo


  10. #10
    Avatar de Juancho
    Fecha de ingreso
    Jul 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    37
    Steam
    Hellhound7700
    Mensajes
    2,499
    Podes investigar el uso de Commands, eso lo tengo medio oxidado para ser honesto pero es re mutable, podes definir Commands en el codigo y usarlos en el xaml, pero como dije antes tambien podes bindear eventos en el xaml.

    Digamos por ejemplo:
    Código:
    <Button Content="" Height="32" HorizontalAlignment="Left" Name="btnRandom" VerticalAlignment="Top" Width="32" Grid.Row="3" ToolTip="Random Game" Click="btnRandom_Click">
    en el code behind te queda el metodo publico con parametro tipico de evento (object sender) y en ese metodo haces el llamado a tu rutina en el view model o controlador.

    Para actualizar una vista en WPF hay un truquito, el tema es que las vistas en WPF corren en un thread separado a las operaciones que se levantan desde ellas mismas. Es decir, .NET utiliza un thread especifico para todo lo grafico en WPF y los eventos que se disparan levantan otro thread para hacer la parte de logica. Cual es el problema con esto? que a diferencia de winforms, si tenes logica por fuera del WPF y su code behind que necesita actualizar algo del WPF tenes que usar el famoso Dispatcher.

    Digamos que a nivel de la clase de view model tu vista se llama PM y tiene un control ListBox llamado ProxiesListBox, para llamar un metodo de la vista tenes que implementar lo siguiente:

    Código:
    Thread thread = new Thread(new System.Threading.ThreadStart(
                              delegate()
                              {
                                  PM.ProxiesListBox.Dispatcher.Invoke(
                                      System.Windows.Threading.DispatcherPriority.Normal,
                                      new Action(delegate()
                                      {
                                          PM.UpdateList();
                                      }
                                      ));
                              }
                                ));
    
                            thread.Start();
    Espero que sea de ayuda

  11. #11
    Avatar de Juancho
    Fecha de ingreso
    Jul 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    37
    Steam
    Hellhound7700
    Mensajes
    2,499
    Cita Iniciado por Daidalos Ver mensaje
    Para utilizar los viewmodels en WPF se implementa una interfaz INotifyPropertChange que contiene una funcion OnPropertyChange, y en el set de cada property se notifica a la vista del cambio llamando a la funcion OnPropertyChange.
    A nivel de la vista se le bindea el model y a cada elemento de la vista se le bindea la property en la cual deberia de escuchar el evento onchange. En el caso de colecciones en vez de utilizar el List utilizas la clase ObservableCollection que internamente implementa INotifyPropertChange.

    Este post de codeproject me ayudo a entenderlo cuando empeze a laburar con WPF:
    http://www.codeproject.com/Articles/...del-Simplified
    Esto es parte de DependencyProperty no? solo lo use una vez en mi vida para actualizar una lista de checkboxes segun el model que se cargaba de la base de datos, un penal de aquellos.

  12. #12
    Avatar de Reizor
    Fecha de ingreso
    Jul 2013
    Edad
    35
    Steam
    Reizorblei
    Origin
    Reizorblei
    Xbox Live
    mathidoloX2
    PSN
    Reizorblei
    Mensajes
    1,180
    Si, exacto.
    Yo lo utilice en toda una aplicación, y la verdad simplifico mucho.
    El único control que puede romper las bolas son los combobox que tienen unos dramas que no refrescan adecuadamente si no inicializaste la observablecoletion antes de agregar el listener.
    Lo que tiene las dependency properties es que te olvidas de codebehind, y te apoyas 100% en el XAML a no ser que quieras switchear viewmodels y view dentro de una view padre que va a ser el unico momento done utilizas el code behind, aparte claro de la declaración de los eventos de los controles.
    También se pueden declarar commands en el viewmodel para ejecutar acciones sobre el model y bindiarlas en el XAML.


  13. #13
    Administrador Avatar de Emisand
    Fecha de ingreso
    Aug 2013
    Ubicación
    Montevideo, Uruguay
    Edad
    33
    Mensajes
    137
    Ok, estuve viendo el tema y si, WPF está diseñado para que se pueda trabajar fácilmente con un patrón MVVM. Es decir las interfaces de notify y los commands son la forma más adecuada y limpia de trabajar con WPF.
    También vi que hay algunos frameworks para facilitar el desarrollo de WPF + MVVM tales como Catel o MVVM Light Toolkit.

    Alguno de ustedes probó alguno de estos frameworks para facilitar el desarrollo de WPF + MVVM y recomienda alguno?

    Nunca he necesitado trabajar con WPF o SL porque me dedico más a aplicaciones web que aplicaciones de escritorio, y para las aplicaciones web he trabajado tanto con ASP.NET clásico como con MVC 4, pero siempre puede surgir un proyecto que lo requiera y es bueno estar bien preparado.

  14. #14
    Avatar de Reizor
    Fecha de ingreso
    Jul 2013
    Edad
    35
    Steam
    Reizorblei
    Origin
    Reizorblei
    Xbox Live
    mathidoloX2
    PSN
    Reizorblei
    Mensajes
    1,180
    Yo probé solo MVVM Light, simplifica mucho la implementación de commands, después no utilicé mas nada del framework. Me apoye en lo posible 100% en el xmal y mis viewmodels.


Información de tema

Usuarios viendo este tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas similares

  1. Media Center + Juegos + Nas Recomendación de software
    Por piercing en el foro Home Theater
    Respuestas: 1
    Último mensaje: 14-08-2014, 07:40 PM
  2. Una visita por id Software (1993)
    Por Juancho en el foro General
    Respuestas: 4
    Último mensaje: 02-07-2014, 01:15 AM
  3. [Programas para la plebe] Catalogo de juegos personal
    Por Juancho en el foro Programas y Sistemas
    Respuestas: 2
    Último mensaje: 14-09-2013, 02:46 AM

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •