Juego de la brisca

Durante estos días de cuarentena he tratado de hacer una versión de la brisca en Python. No obstante, el resultado todavía dista de ser el deseado. Este es el proyecto https://drive.google.com/open?id=1BEXAI2mYjyhJoYFqfFdAPaZaR-GXwoP1

Le faltan algunas cosas que son la implementación de los triunfos y algunos ajustes estéticos. Debido a la baja complejidad de la última, no es un problema grave. Sin embargo, sí lo es el que no admita los triunfos. He de admitir que fue un error grave el diseño que escogí ya que si bien es relativamente intuitivo, ahora es muy difícil implementar esos triunfos y necesitará de varios parches.

Resumen de la segunda evaluación

Antes de comenzar he de comentar que esto no incluye todo el segundo trimestre, pero sí aquello de lo que no hay constancia en anteriores entradas o el propio Drive. Dicho esto, empecemos.

Python:

  • Finalizado el curso de introducción a las ciencias de la computación en CodeCombat:
  • Mitad del curso de Python 2 en CodeCademy:
Sin problemas en esta parte
Algo de dificultad en funciones, también en el uso de for argument1 in argument2
Debo repasar las listas y los diccionarios antes de continuar
  • A pesar de todo, este nivel adquirido en Python me permitió dar los primeros pasos en el diseño de programas. Para orientarme algo en los videojuegos utilicé este curso: http://programarcadegames.com/index.php?lang=es De momento solo he terminado las 4 primeras lecciones. Pero espero continuar con esta página y con codecademy.
  • El primer proyecto es el de adivinar un número al azar:
A pesar de que se explica como hacerlo en la lección 4 de la página mencionada, decidí hacerlo antes de ver la solución. De ahí las pequeñas diferencias, como el usar radint que me parece una función mucho mejor para esto.

-El funcionamiento del programa es sencillo. Primero exportamos la función randint de random. Luego establecemos una variable contadora de intentos (que por motivos lógicos es 1 al principio). A continuación generamos un número al azar con la función randint del 1 al 100 y lo guardamos en otra variable. Ahora pedimos introducir un número para tratar de adivinar y lo almacenamos en una tercera variable . Se realiza un bucle while de manera que hasta que no acertemos el número no podamos salir. (En caso de que hayamos acertado al principio, nunca entraremos en él)

-El bucle da una pista al jugador indicando si el número que tiene que adivinar es mayor o menor al que ha puesto, le deja volver a introducir un número y aumenta el número de intentos en uno. Cuando por fin salgas del bucle obtendrás un mensaje de victoria y se te dirá el número de intentos que necesitaste.

  • El segundo proyecto se basa en crear un juego de piedra papel o tijeras. Para este en concreto no he utilizado fuentes externas.

-Primero importamos la función randint (me encanta esa función). Ahora introducimos un típico mensaje de comienzo del juego. Declaramos seguir como verdadero, esto cobra sentido un poco más adelante. También declaramos i = 0 que será el número de partidas. También cobra sentido después.

-Hacemos un while que diga que seguirá mientras seguir sea equivalente a true. Esto sirve para que el usuario pueda jugar más de una partida. Declaramos que pc será un número del 1 al 3, esto lo hacemos después del while para que cada partida sea distinta. Lo siguiente sigue para darle un valor a pc1 que será la elección del ordenador según el número al azar.

-Ahora es el jugador quien elige. Hacemos un input dándole a escoger entre 6 opciones «piedra» «papel» «tijeras» «pi» «pa» «t». Para evitar problemas con la mayúscula creamos una variable que coja ese input y con la función lower lo ponga en minúsuculas. A continuación comenzamos un if que haga que cuando coincidan los dos valores, ponga un mensaje concreto.

-Los elif contemplan las distintas posibilidades en el juego. Elegí que fuesen elif para poder utilizar un else como mensaje de error en caso de que no se cumpliesen ninguno de estos, porque significaría que el jugador no hizo lo que se le mandó en el input.

-A continuación crearemos otro while para saber si el jugador quiere seguir en la partida. El motivo de que sea un while es el de prever errores y hacer más sencillo el programa. Le preguntamos si quiere o no seguir jugando. Si quiere seguir solo pasamos respuesta a verdadero para salir del bucle. Si es no, hacemos que respuesta sea verdadero para salir de ese bucle y seguir falso para poder salir del primer bucle y finalizar el programa.

-Ahora explicaremos que hace esa i en el medio. Como ya dijimos, representa el número de partidas jugadas. Se añade una al final de cada partida y tiene una función de optimización. Cuando el número de partidas sea superior a 3, para ahorrar tiempo al usuario, dejaremos de preguntarle si quiere seguir jugando. Pero a partir de 10 le volveremos a preguntar y le diremos que ya ha jugado bastante.

Esto es todo lo que he hecho durante este trimestre. La mayoría ha sido formación y teoría lo cual me prepara para hacer juegos básicos actualmente y más complejos en un futuro.

Extra: Para el juego de pares y nones tengo pensado hacer lo siguiente:

  • Al igual que en el de piedra papel y tijeras y adivina el número usaré la función randint para seleccionar un número del 0 al 5 y asignárselo al pc.
  • Se colocará un input() para que el usuario introduzca un número del 0 al 5. Si es diferente saltará un mensaje de error y se le obligará a volver a introducir.
  • Se preguntará al jugador si elige pares o nones introduciendo «p» o «n».
  • Se suman los valores de la elección del pc y la del jugador. Al estar en valores numéricos no hay que convertirlos.
  • Buscaré una función para crear un if que de la condición de nones en caso de que la suma sea impar un else que diga que entonces serán pares. Sospecho que se puede lograr con la función for ___ in___ mencionada anteriormente.
  • Finalmente creo un if que diga que si la elección del jugador es igual al resultado (equivalente) nos de un mensaje de victoria y un else que de un mensaje de derrota. Finalmente al igual que en el piedra papel y tijeras puedo implementar un while o dos para seguir jugando.

Actualización: Hoy sábado 14 hice el juego de pares y nones. En lugar de la función for __ in __ definí yo mismo una para saber si era par o impar.

Algoritmos y Diagramas de Flujo

Un algoritmo es una serie de instrucciones que le damos a una máquina, persona, etc… para que realice una función.

¿Por qué necesitamos dar unas instrucciones, es decir, hacer un algoritmo para nuestro ordenador? Es debido a que el ordenador no entiende nuestro lenguaje y por lo tanto a partir de sencillas instrucciones que explican paso por paso todo lo que se debe de hacer, el ordenador puede llegar a hacer complejísimas operaciones las cuales tardaríamos años por nuestra cuenta.

Los diagramas de flujo son una manera de estructurar los pasos del algoritmo de una manera esquematizada y clara. Su utilidad es la de que después de hacerlo, es más fácil saber cómo debes crear el programa que cumpla el algoritmo.

A continuación, un sencillo diagrama para la creación de un algoritmo que permitirá calcular la nota media de selectividad. (En el anterior artículo se muestra el programa ya hecho).

El programa posteriormente sufrió modificaciones, pero esta fue la base que se usó.

Calcular a nota de acceso á universidade con Scratch

Scratch é unha linguaxe creada polo M.I.T. o instituto tecnolóxico de Massachusetts. O programa de scratch serve para programar de maneira visual por medio de bloques de código e unha pantalla para observar o desenvolvemento do código.

O obxectivo do programa que fixen con esta linguaxe é calcular a nota de acceso á universidade de cada individuo a partir dos correspondentes datos:

  • Nota media en 1ºBacharelato
  • Nota media en 2ºBacharelato
  • Nota da parte xeral das ABAU
  • Nota da primeira específica e a súa ponderación
  • Nota da segunda específica e a súa ponderación
  • Nota da terceira específica e a súa ponderación (opcional)
  • Nota da cuarta específica e a súa ponderación (opcional)

Antes de nada, comparto o enlace en drive para a descarga do programa, pincha aquí.

En caso de non poder visualizalo, o código é o seguinte:

Agora pasarei a comentar o código e logo falarei das versións anteriores e por que foron remplazadas.

Primeiro de todo fixamos as variables a 0 para evitar erros cando se queira repetir o programa. As variables son as seguintes.

  • M1=Media de primeiro de bacharelato
  • M2=Media de segundo de bacharelato
  • X=Media da parte xeral de selectividade
  • EP=Nota da primeira opcional e logo ponderada (máis adiante verase a razón do cambio de significado nas variables)
  • ES=Nota da segunda opcional e logo ponderada
  • ET=Nota da terceira opcional e logo ponderada
  • EC=Nota da cuarta opcional e logo ponderada
  • M1=Nota máis alta das ponderadas
  • M2=Segunda nota máis alta das ponderadas
  • R=Nota de acceso á universidade

A continuación mandamos ao gato dicir uns mensaxes xenéricos informando de que vamos a pedir os datos para calcular a nota de acceso á universidade. Logo preguntamos a nota media de 1ºBach e a partir da resposta fixamos a variable M1. O que ven debaixo é para evitar erros, manda repetir a pregunta ate que M1 non sexa maior ca 10 nin menor ca 0. Repetimos o proceso con M2 e X

En EP e ES cambia lixeiramente a situación pois logo de preguntar a nota, preguntamos a súa ponderación. É dicir, se pondera 0, 0,1 ou 0,2 na carreira. Co fin de optimizar o proceso e ahorrarnos variables EP e ES convértense logo nas notas ponderadas ao multiplicarse a súa ponderación coa variable orixinal.

O seguinte foi posiblemente o máis complicado, a integración óptima das dúas variables ET e EC as cales son opcionais. Primeiro preguntamos se se quere introducir outra opcional. Abrimos un condicional (foi un intento de realizar un booleano de forma algo tosca) polo cal se a resposta á pregunta é «S», este actívase. Dentro do condicional seguimos os pasos normais que se fixeron con EP e ES, ao terminar e sen saír do condicional volvemos a preguntar se se quere calcular outra opcional (EC) e no caso de dar coma resposta «S», vólvese a entrar noutro condicional. Repítese o proceso que con ET e ao terminar saese do condicional de EC e de ET.

Agora chega a parte complicada que mencionei anteriormente, aínda que a solución é relativamente simple en comparación ca idea orixinal de como facelo. O problema: determinar cal das catro notas ponderadas era maior e cal a segunda maior para logo transformalas en M1 e M2 respectivamente. Obstáculo, non encontrar ninguna ferramenta que os comparase directamente e os introducise nas variables.

Esto faise co bloque se/senon. Primeiro establecemos coma condición que EP>ES, EP>ET, EP>EC. De esta forma averiguamos se EP é o maior. En caso de cumplirse a condición, EP será asignado coma E1 e agora abriremos outras cláusulas se/non para determinar E2: se ES>ET e ES>EC entón E2=ES, senon: facemos un novo condicional descartando a variable ES pois non pode ser nunca E2 e repetimos o proceso, así ata descartar todas as posibilidades. Deste modo acharemos E2 se E1=EP, para os outros casos está a primeira claúsula se/senon, no senon similar a como fixemos para achar E2, abriremos outro condicional e buscaremos se ES=E1 descartando EP pois é imposible que sexa E1, repetimos isto ate esgotar todas as variables.

Finalmente o que queda non ten dificultade, creamos una nova variable R a cal será igual a M1*0,3+M2*0,3+X*0,4+E1+E2. Engadimos outra mensaxe xenérica e dicimos o valor de R.

Tríptico de seguridade informática

Búsquea de información

Para o traballo o primeiro foi a búsquea da información necesaria a cal se organizou en dous arquivos de Libre Office Writter cada un dividido en tres columnas de igual tamaño.

(La imagen de retrovirus me gustó tanto que es mi nueva imagen de perfil en WhatsApp)

Empregáronse unha numerable cantidade de páxinas para a recolecta de información, sobresaen:

https://www.codedimension.com.ar/noticias-sobre-tecnologia/consejos/un-nuevo-virus-informatico-afecta-cientos-de-usuarios-y-servidores/298

http://www.gadae.com/blog/que-hacer-si-entra-un-virus-en-tu-ordenador/

O traballo estructurase nunha primeira parte cunha portada, unha contraportada que serve coma glosario e unha breve introdución do tríptico.

A segunda parte estrutúrase de xeito que a primeira páxina informe sobre a prevención, a segunda sobre a detección dado o momento e a terceira comente algúns datos curiosos de hackers para relaxar a tensión con datos amenos e en parte graciosos.

Montaxe

Tras adecuar a información en cada unha das páxinas, abríronse dous documentos en GIMP acoutados cas medidas dun folio A-4 en posición horizontal, ao igual que nos arquivos de Libre Office Writter, dividímolos en tres columnas iguais empregando as liñas guía que ofrece o propio programa.

Para a organización dos títulos buscamos exemplos na rede que logo son adaptados co propio editor de imaxes xa sexa convertendo a imaxe nunha transparente (.png) ou cambiando a cor a un máis adecuado.

Cas seguintes páxinas web escollemos os colores apropiados

Por outra parte, ambos fondos eran similares, pero coa ferramenta de fusionar capas, fusionouse o fondo da Primeira Parte (Glosario/Contraportada, Portada, Introdución) cunha folla en branco dándolle un aspecto moito máis claro e así diferenciar ambos fondos.

O traballo tivo varios fallos como:

  • A búsquea para encaixar as cores mencionada anteriormente (o resultado é decente, pero mellorable)
  • O deseño en xeral quedou bastante simple e é moi lineal
  • O logo non combina apropiadamente pois non da unha imaxe suficientemente clara.
  • A búsquea de información e a redacción é vaga e básica (sin embargo apropiada para o nivel
  • A estructuración deixa moito que desexar
  • O fondo debido ós seus cambios de cor foi posiblemente unha mala decisión xa que complicou o traballo innecesariamente
  • As imaxes para colocar títulos eran repetitivas

Por outra parte hai algúns acertos coma:

  • Usar imaxes de alivio para non facer moi pesado o tríptico
  • A inserción dun logo que aínda que como se mencionou ten bastantes pegas, é un elemento fundamental
  • O deseño de portada que non se ve tan mal coma o resto do tríptico e destaca o uso da cor verde na imaxe (editada previamente) o cal reflexa seguridade nese contexto

As dificultades principais do proxecto foron:

  • Saber que era un tríptico exactamente (realmente si que foi unha dificultade importante)
  • O problema de xerar imaxes monocromáticas para facer os bloques, ó final era unha longa búsquea pola rede buscando imaxes, pegandoas e escalando.
  • O escalado de imaxes tamén foi moi incómodo e tedioso (debeuse empregar Inkscape)

A continuación colocaranse os aquivos en .pdf e debaixo

Página web en html5

Página en cuestión

Captura del menú de inicio

La página se divide en 5 secciones: Inicio, Índice, DIO, Música, Galería.

Dificultades generales: Insertar música, estas pueden ser reproducidas en casi cualquier navegador ya que contempla los tres formatos principales «.ogg» «.mp3» «.ogg». Uso de un fondo distinto en cada imagen, para ello se usó el código <body style=»background-color:(color en cuestión)»>. Todas las imágenes tienen el tamaño ajustado, un título y la etiqueta alt en caso de que el navegador no pueda mostrar la imagen. Uso de diversas etiquetas como padding, float o margin entre otras.

Inicio: En esta página destaca el uso de la etiqueta <hr> como intento de separar el texto de la imagen. El centrado de la imagen inferior creando una clase nueva que luego se insertó en la etiqueta imagen.

Índice: Lo más destacable de esta sección es el usar dos fondos distintos para la tabla diferenciando impares y pares. Además del uso de botones con enlaces los cuales redirigen a otra página en una nueva pestaña.

DIO: Vídeos insertados desde YouTube y centrados por «style=»text-align:center»». Además de función autoplay en la música para que empiece a sonar al entrar en la página.

Música: Se colocaron tres canciones separadas por un float right, la clase creada para centrar imágenes y otro float right en el tercer audio. Esto le da un efecto de escalera debido a la clase del segundo audio que impide que los otros audios permanezcan en su propio párrafo.

Galería: se colocaron imágenes en una tabla de dos columnas con el tamaño de ancho adaptado a 600 sabiendo que el alto se regulaba automáticamente. El fondo de esa tabla es una imagen, la usada como fondo de página web en la versión alfa. Se mantienen los bordes de tabla para mantener su estructura.

Ideas no añadidas: Utilizar la etiqueta <form> para crear un registro de usuarios, debido al pequeño contenido de la página, me pareció innecesario hacerlo. Además, no tengo el conocimiento para enviar mensajes de confirmación a un correo electrónico, aunque sospecho que depende del uso de bots. Otra idea sería la de utilizar porcentajes para los tamaños en lugar de píxeles permitiendo que funcionase en distintos dispositivos. (Esto último no se hizo por falta de tiempo)

Bugs en los videojuegos

Se le denomina bug, también conocido como glitch en los videojuegos, es cualquier error de software que se presente y puede estar hasta en el programa más sencillo. Para solucionar alguno de estos bugs se utilizan los llamados debuggers que son programas encargados de la detección y eliminación de bugs.

Hablando del ámbito de los videojuegos, estos pueden ser causados por las prisas por terminar el proyecto o en el caso de juegos antiguos debido a limitaciones del hardware que obligaban a recortar código dejándolo abierto a bugs. No obstante, la causa más probable es que sean causados por errores involuntarios que no se ven durante la fase Alfa o Beta.