Hace 10 años | Por pcow a github.com
Publicado hace 10 años por pcow a github.com

Creación de un juego similar a Minecraft, escrito en Python y utilizando la librería Pyglet. Míralo en acción aquí: http://www.youtube.com/watch?v=kC3lwK631X8

Comentarios

pcow

#1 Está excelente Minetest, lo bajaré para darle una revisada.
#3 Así es, actualmente Python es uno de los lenguajes de programación que recomiendan como primer lenguaje para los nuevos en esto.

D

#4 Como primer lenguaje sería un desastre. El Python tiene muchos vicios y no enseña los conceptos más importantes de programación.

prejudice

#8 ¿Qué vicios?
¿Qué lenguaje recomiendas tú?

M

#13 Entiendo que se refiere a funcionalidades que si ahorran mucho tiempo y son muy elegantes, pero que no vas a encontrar en otros lenguajes, por eso no es lo mejor coger el "vicio" de usar cosas que no siempre vas a tener disponible. Lo más adecuado IMHO es empezar con un lenguaje más básico (pascal, C, modula,... ) al menos para cursos en los que tienes que adquirir conocimientos de estructuras de datos, algoritmos y esas cosas.

Si quieres algo con lo que aprender a programar en plan hobby, o ya tienes una base solida si es de los mejores.

cnicolas

#13 Yo te recomiendo que no te dediques a programar, asi tendras una vida
Pd: Soy programador, asi que tambien me rio de mi mismo

prejudice

#35 LLegas 18 años tarde lol
Ahora lo difícil es encontrar un lenguaje en el que no haya programado
Personalmente recomiendo para aprender Python para la gente que no esté interesada en profundizar, y C para los que estén muy interesados en el tema

cnicolas

#c-54" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2074973/order/54">#54 Pues me imagino que entonces ya conocerás unos cuantos, asi que pásate al lado oscuro de Cobol.
Pd. como programo en java me gustaria saber programar bien en C, pero no C++ ni C#, si no C puro y duro.

prejudice

#59 No olvides liberar memoria después de asignarla, que en C no hay recolector de basura como en Java lol

#60 Te puede no gustar ese código. Pero cuando descubras Python te darás cuenta que hay muchas formas de programar (Se podría decir que da mas libertad que Java).

Se suele decir que Java está diseñado para que sea difícil programar mal, y Python en diseñado para sea fácil programar bien. O dicho con otras palabras un mal programador tiene mas peligro con Python que con Java

cnicolas

#62 Si, eso y los punteros son las mayores diferencias entre uno y otro, pero como por trabajo programo en Java, 'cuesta' hacerse a la idea de programar en C, me imagino que al reves pasará lo mismo.
Personalmente la idea de liberar memoria por uno mismo me parece buena idea, lo de los punteros esta claro que es util pero su uso es un poquito especial, la asignacion de variables es mas 'comoda' en Java

prejudice

#63 Sí al revés pasa lo mismo, lo de tener que encapsular todo dentro de una clase sí o sí, es algo incómodo (En C++ y en Python tiene la opción de seguir usando programación estructurada si quieres)

Lo de asignar y liberar memoria tu mismo es un gustazo una vez que te acostumbras

Para mi "lo peor" de C es la forma con la que se trabaja con cadenas de texto, es bastante mas incómodo y peligroso. Por ejemplo, si escribes en un buffer de 100 bytes una cadena de 105 caracteres, escribirás sin darte cuenta otra parte de la memoria, y te puede dar errores totalmente impredecibles (es muy divertido). Y luego por ejemplo la concatenación de cadenas no es tan fácil como usar el signo +

cnicolas

#64 Lo ultimo que te refieres lo de la memoria con las cadenas que sobrepasan lo estipulado es una verdadera paranoia hasta que te das cuenta

prejudice

#65 Lo curioso es que alguna funciones estándar para capturar datos por teclado no controlan los caracteres que se escriben dentro de un buffer, pongamos por ejemplo:


#include

int main ()

return 0;
">



Si tú metes mas de 79 caracteres tienes diversión asegurada con errores aleatorios.

Creo que la solución es usar algo como

scanf("%79s", str);

Una solución mas elegante es usar fgets que sirve para leer cadenas dentro de un fichero, indicando que el fichero es la entrada estándar (stdin)

fgets(str, sizeof(str), stdin);

A parte de esto creo que también hay problemas cuando se trabaja con cadenas UTF-8, dónde no todos los caracteres ocupan un byte, pero eso ya es otro tema

cnicolas

#66 En estas cosas es donde java es mas predecible y creo que por eso su uso mayoritario. De los carácteres especiales tipo retorno de carro, tabulador, etcetera mejor correr un tupido velo sobre ellos.

D

#c-13" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2074973/order/13">#13 Existen dos tipos de programadores, los que aprendieron con C (y quizás también Fortran) y los que aprendieron con otro lenguaje tipo C#, QBasic, JAVA, etc... Ves el código de uno y de otro y sabes enseguida quien es quien. Y sin menospreciar las habilidades de cada programador, uno que aprendió con C le mete mano a cualquier otro lenguaje en menos de una semana, pero los que no han aprendido a programar en C no son capaces de hacerse con él.

NoBTetsujin

#47 Sin menospreciar a nadie, unos saben y otros no. Menos mal que no hay menosprecio, si no ya los tratarías de retrasados lol

d

#c-47" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2074973/order/47">#47 Pues tengo que ser la excepción que confirma tu regla. No tengo ni idea de C y mi primer lenguaje fue C#, y hasta ahora acumulo seis lenguajes distintos (sin contar los que aprendo "jugueteando"), además con sus respectivos frameworks. Y quedarme con la sintaxis no me cuesta más de dos días. Solo me costó dos días en el caso de objetive-c.

Afirmar que las personas que vienen de C son mejores programadores que el resto, es cuanto menos ridículo. La capacidad va en la persona y su actitud, no en el lenguaje aprendido.

o

#8 Premio a la gilipollez más gorda del día.

Zeioth

#c-4" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2074973/order/4">#4 Yo tampoco lo enseñaria como primer lenguaje la verdad. C# o java dan una base mucho mas amplia.
Como segundo lenguaje si que es una gran opción

M

#1 Es espectacular el minetest....sin calentar el ordenador...y funciona en ordenadores no muy modernos.

M

#1 En el curro tenemos un server para divertirnos montado.

D

#7 Si te conectas al servidor de Minetest en LibrePlanet te bajas un moton de mods útiles automáticamente.

sadcruel

Me gusta eso del "python como primer lenguaje". (algunos aprendimos con pascal, ya es hora de modernizarse en temas de enseñanza de programación).

sadcruel

#5 Cierto, aunque me refería al Pascal por lo de la programación estructurada.

De hecho, recuerdo echar la tarde picando el código de algunos juegos que traía la Micromanía (que muchas veces no funcionaban) para luego ponerme a hacer mi programa chorra de colorines con mis GOTOs... ¡Que tiempos!

emilio.herrero

goto comentario #5

Metalaria2

#5 Yo tengo un profesor en la universidad que aprendió en los 60 con código máquina

Amenophis

#5 BASIC en un Amstrad. Ains, que tiempos picando código a lo bruto para que al llegar al RUN no funcionara...

Sofrito

#3 Qué recuerdos. Yo aprendí a programar con Turbo Pascal 2.0

AaLiYaH

Hace cosa de 30 años que no se mide la calidad del software por lineas de código, pero no esperaba menos de los pythonistas, que se masturban cada vez que meten algo en una línea.

g

#c-44" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2074973/order/44">#44 se que es un tema controvertido, pero estóy convencido de ello. La grán mayoría de los comentarios que se usan son prescindibles. Por ejemplo en la línea 157 (s = 1 # step size). Se puede quitar el comentario y en vez de llamar a la variable "s" la llamamos "stepSize" (o step_size si no usamos camelCase). De esta forma siempre que veamos la variable sabemos lo es (aka código más legible). Otro ejemplo un poco mas adelante (# generate the hills randomly o = n - 10 ...). Aquí lo mejor sería crear una función nueva que se llame generate_the_hills_randomly. De esta forma vamos creando funciones con una única responsabilidad y con un "naming" que evita tener que meter comentarios (que no compilan y que muy posiblemente queden obsoletos y/o redundantes generando confusión). Y por cierto los buenos programadores hacen que sus programas parezcan triviales :), pero esto no es nada fácil de conseguir. Programar es fácil. Cualquiera con una pequeña base de álgebra y ganas puede progamar en poco tiempo, pero programar bien es muy, pero que muy complicado. Requiere mucha esperiencia y estudio.

Blaxter

#40 vamos, que no has programado en python en tu vida

Patxi_

Vaya tontería hablar de las líneas que tiene la librería que utiliza. La cuestión central es que si tú quieres hacer un clon de minecraft con python solo tienes que escribir 800 lineas.

Lobazo

¿Minecraft? ¿Qué es eso?

STARBOUND.

TALIVAN_HORTOGRAFICO

#2 Como Terraria pero con mas mas mas mucho mas!!

LenaAlcie

#2 #17 Que mania de comparar, Minecraft creó el genero, Terraria es el mismo genero, Starbound es Terraria usando una nave espacial entre los mundos, en Terraria tambien puedes ir a otros "mundos" con personajes y llevarte recursos de un mundo a otro. Vamos, que hace mil que no entro en un mundo de terraria sin mi personaje cheto de otros mundos más avanzados.

D

#2 eso es droga dura. No incites a la gente a ser improductiva lol

V

#2 En el futuro quizás... ahora mismo es basicamente un simulador de ladrón de muebles lol Uno que por cierto está lleno de bugs, desbalanceo, mecanicas a medio hacer y falto de contenido.

D

#22 Es normal, es una beta en 3 etapas y sólo están en la primera.

V

#37 De ahí que diga "En el futuro quizás...".

D

#39 Lo sé lo sé, era sólo una puntualización por si alguien más lo leía y pensaba que habían sacado el juego de cualquier manera.

theMaker

Esta muy bien, sobre todo si tenemos en cuenta en el poco codigo qu elo ha hecho, pero todavía para ser algo como minecraft le queda muuuuuucho.

Los mundos que genera son muchísimo mas artificiales que los de minecraft, basicamente mundos planos con montañitas de distintos tipos de bloques.
Minecraft, dentro de su caos, te genera mundos mucho mas 'creibles', mejor distribución de bloques, 'grandes llanuras', montañas, lagos, desiertos... da mucho más la sensación de mundo coherente.

Ojo que no le quito merito, pero que de hacer eso a hacer algo digno a minecraft, como minetest, hay miles de lineas de código de diferencia

c

#25 A parte de la variedad de bloques, el clima, los NPCs, el crafteo, redstone...

theMaker

#25 claro, pero me he limitado a comparar lo único que he visto, la topología del mundo creado. Mucho mejor la de minecraft.

K

eso no es un clon, es un quita pon de cuadrados con texturas, no hay bichos, ni arboles, ni crafteo, ni agua, ni espada de diamante, dios, no se puede ir sin espada de diamante

Blaxter

Por pocas líneas tiene bastante más mérito este https://github.com/fogleman/Craft (porque el de python al final usa piglet)

D

Es posible que el mito de que los programadores que aprendieron con C son mejores que los que aprendieron con Java, C# o Python se sustente en el hecho de que los que aprendieron con C lo aprendieron, vamos a poner, en 1990, los de Java en 2000 y los de Python en 2005. La implicación es obvia.

En el talento de cada programador individual habría que comprobar varios factores como la capacidad innata, la experiencia, etc. Y, a características individuales equivalentes, la única forma de demostrar que un lenguaje es mejor que otro sería, por ejemplo:

a)Coger a dos personas que no sepan programar.
b)Enseñarle a una Python y a la otra C, durante un cierto periodo de tiempo.
c)Pedirles que desarrollen el mismo programa en el mismo plazo de tiempo, cumpliendo con unos requerimientos de rendimiento.

Y aún en ese caso, el resultado dependería del proyecto. Porque si se tratara, por ejemplo, de hacer un programa que por razones del hardware tuviese que tener un control estricto de la memoria, y estar optimizado al máximo, sería mejor (o incluso obligatorio) usar C, y si se tratara de un plazo de tiempo muy corto con unos requerimientos de rendimiento más laxos, sería mejor usar Python o cualquier lenguaje administrado.

No existe el mejor lenguaje, cada lenguaje es mejor para unos tareas específicas.
Y si sólo hablamos de qué lenguaje es más conveniente no para producir, sino para aprender a programar, entramos en otro tema distinto; porque aprender a programar no es aprender una sintaxis, sino aprender estrategias para representar sistemas y los datos inherentes a estos (agrupados en determinadas estructuras y en distintos niveles de abstracción) y a manipular dichos datos a base de algoritmos; y eso es puramente conceptual y no depende de ningún lenguaje, luego ya elegirás un lenguaje u otro según como el lenguaje implemente el tipo de estructuras, rendimiento y capacidad de control fino que necesitarás para un proyecto determinado.

Nitros

Yo todavía no entiendo de que va ese juego, me baje la versión de Android que estaba de oferta y solo podía correr por encima de verdes y marrones y pegar a vacas.

D

En 895 lineas de código no escribo yo ni un hello world...

D

Minecraft no es solo un mundo donde pones y quitas bloques, llamar al engendro este un clon es comparar un dibujo de mi prima con la Mona Lisa. Si, son dibujos, y a lo mejor mi prima llegaria a hacer la Mona Lisa, pero esta un pelin lejos aun

Proyectos que renderizan cubos con esa estetica han salido cientos desde que Minecraft lo ha petado, hay en JS/Webgl, HTML5 Canvas, XNA, iOS, incluso directament en un shader (https://www.shadertoy.com/view/4ds3WS, 390 lineas, para los que les guste contar), o este en 252 bytes de Javascript (http://www.p01.org/releases/minicraft/minicraft.htm)

C

A mí el código me parece terrible. No conozco Python, pero a simple vista me "huelen" muchas cosas en esos 800 y pico líneas...

D

Yo estoy en proceso de hacer mi propio clon en C++, veo que no soy el único Pero éste tiene mundo infinito? El mío sí, y con eso la cosa se complica respecto a un simple array de cubos. Optimizarlo para que no dibuje los polígonos no visibles es otra cosa que requiere un puñado de líneas y no sé si en 800 cabrá todo eso. El mío tiene más (aunque son muy chapuceras y reducibles).

D

Que sigan desarrollándolo, si hace falta que lo hagan de pago, a ver si así los de Mojang se ponen las pilas.

D

Yo no es que sea muy jugon pero, sigo sin entender que ve la gente en minecraft.

TALIVAN_HORTOGRAFICO

#29 Es llevar el Lego a videojuego, simplemente. Pero teniendo que construirte los bloques. Y las herramientas con las que sacar bloques. El placer de empezar rompiendo arboles a pugnetazos y acabar con una construccion gigantesca.

d

Bah! donde se ponga un Dwarf Fortress... Este si que calienta poco la maquina.

c

Qué bueno. Y más de la mitad de las líneas son comentarios.

prejudice

894 líneas de código... de las cuales la mitad son comentarios
La verdad es que como ejemplo didáctico está muy bien
#14 Sal de mi mente

systembd

Yo sigo pensando que medir el código en líneas es absurdo. Aparte de las líneas de comentarios que menciona #15, muchas veces es más útil agrupar varias instrucciones -fuertemente relacionadas- en una sola línea para ganar claridad visual.

D

#14 #15 y tambien hay muchas lineas vacias

D

Esto es como si un pintor sale diciendo:"Yo pinto las Meninas con el pito". Una frikada...