Screeps #HO | MMO para programadores en JavaScript

EnderFX

#119 No problem, bro, no sabía si estabas hablando de OOP o haciendo la broma, por lo de que "no está OOP" (del OP del overpowered de la jerga nerd). Por si acaso, asumí que ambas. Ya que te referías a OOP de verdad, como contestación adicional no, JS no es un lenguaje orientado a objetos por definición, y no utiliza clases, herencia y polimorfismo como tal. Pero se puede hacer algo parecido con varios patrones.

OsFoEl

Para entrar a jugar, nada del tutorial. ¿Hay que pagar?

No hay trial?

2 respuestas
Kaiserlau

tienes tutorial y puedes picar free #122 para ver como va el juego

1 respuesta
arparchancla

#122 en #1 está explicado, la versión web es gratis.

1 respuesta
OsFoEl

#124 Ya lo he leido. La version web online hay que pagar.

Lo unico que veo gratis es el tutorial como dice #123.

2 respuestas
arparchancla

#125 Vale, no lo has entendido bien del todo, creo que con #7 lo entenderas :)

1 respuesta
EnderFX

#125 https://screeps.com/a/#!/sim

Si te sale el tutorial directamente pulsa back, y tendras 3 opciones:

Tutorial, training mode, custom mode. All free.

1 respuesta
OsFoEl

#126 Muchas gracias, es justamente lo que había dicho.

#127 Pero es todo digamos "offline".

1 respuesta
EnderFX

#128 Y sin el digamos, si. En esos 3 modos todo el codigo se ejecuta en tu navegador. En el online tu codigo se ejecuta en su servidor.

X

No soy precisamente fan de JS, pero vamos a probar el jueguecito.

Si no te importa, #1, voy a robarte vilmente el contenido del post para otro foro(citándote, claro).

MartiONE

Yo lo he dejado trabajando con el código de #1 , esta noche le hare una visita a ver en que puedo mejorar y desarrollar un par de cosillas.

covaga

me apunto, a ver si aprendo algo durante todo este verano

Lecherito

Pero como quiere alguien que no odie js joder es que joder

for(var name in Game.creeps) {
    var creep = Game.creeps[name]; <--- WTF? En qué quedamos que es Game.creeps?
}
3 respuestas
nerkaid

#133 Te contesto sin haber jugado prácticamente por lo que creo que es, si patino que alguien me corrija.

Game.Creeps es un array con los Creeps que tienes, y estos creeps tienen variables asignadas (por ejemplo role o name). Luego se asigna la variable "creep", en cada loop del for, según lo que contenga la variable name del creep que toque en ese loop. El array para que lo entiendas sería algo así como:

Game.Creeps = [Creep1 (name=Harverster1), Creep2 (name=Harverster2), Creep3 (name=Harverster3)]

Entonces

for(var name in Game.creeps) { --> Para cada variable name, dentro de Game.Creeps
    var creep = Game.creeps[name]; --> La variable "creep" es igual a el Creep cuyo nombre sea la variable name en ese momento.
}
EnderFX

#133 Lo que se conoce como hash, un diccionario que almacena pares <clave, valor>. For (var name in Game.creeps) es un bucle en el que name tomará como valor cada una de las claves.

var miHash = {
a: 1,
b: "dos",
c: new Date()
}

for(var property in miHash){
console.log(property);
}

Resultado:
a
b
c

Si accedes a miHash[property] accederás a miHash["a"], miHash["b"] y miHash["c"]. En Javascript puedes acceder a las propiedades de un objeto de varias maneras. Las más utilizadas son objeto.propiedad (miHash.a, miHash.b) que suele ser lo más natural, sobre todo si vienes de POO, u objeto['propiedad' <-- un string], que es muy útil cuando quieres, por ejemplo, acceder a una serie de propiedades que no conoces de antemano. Si te llega un array arr =['a','b'], la única manera de acceder a esas propiedades sin conocer antes su valor es miHash[arr[el índice que quieras]].

Lecherito

Gracias, me acabáis de recordar por qué me javascript me parece la mayor mierda del mundo!

1 respuesta
EnderFX

#136 De nada, una pena que no te guste. Todas las opiniones son respetables.

B

no sé qué tiene de malo ese loop pero bueno xd

1 respuesta
nerkaid

#138 Yo no he usado JScript en mi vida y lo veo bastante normal, no sé en qué programará normalmente.

1
Lecherito

En serio veis normal que exista un for simplificado en un diccionario/mapa y que mágicamente te devuelva el nombre? Es confuso como él solo, debería de devolverte una entrada del diccionario/mapa y luego ya poder elegir.

Programo en Java/Kotlin

val map = HashMap<Int, String>()

for ((i, s) in map) {
    ... // code
}
1 respuesta
covaga

hay un grupo creado sobre el juego?

2 respuestas
EnderFX

#140 Pues el problema está en que programas en Java, y estás acostumbrado a ese tipo de lenguajes. Intuyo que normalmente tocas lenguajes fuertemente tipados. Acostumbrarse a otros lenguajes más parecidos a JS, como pueden ser Ruby o Python requiere entender el origen y la utilidad del lenguaje.

Por ejemplo, entiende que JS es un lenguaje que inicialmente fue pensado como un lenguaje "limitado, pequeño" pensado para ejecutarse en un navegador, y ahora está en alza, ha salido del browser y está evolucionando de forma acorde. En el caso de Ruby, Matz (su creador) ya explicó que su propósito era crear un lenguaje eficiente y muy semántico, por eso encontrarás cosas (que podrás amar, o considerar una herejía) como poder crear una fecha con 3.days.ago. Cosas buenas de Java: que es muy difícil cagarla, que es estricto, lo que es un int siempre será un int. Cosas malas: poco flexible en algunos aspectos, portabilidad "cuestionable".
Cosas buenas de JS: que tienes muchísima libertad, puedes redefinir objetos, funciones en tiempo de ejecución, realizar programación funcional. Cosas malas: si no te controlas y pones orden, la puedes cagar y enmarañar de mil maneras.

Como te digo... es cuestión de gustos. A mí, personalmente, me encanta la programación. Prefiero JS, pero me gusta programar en Java/C# también, y me encantaría ponerme con C (admiro a los que pican C a diario) si tuviera muuucho tiempo.

Ejemplo muy simple. Quieres iterar como te mola a ti en tu lenguaje:

spoiler

#141 me temo que no, seguro que #1 nos sabe decir.

1 respuesta
AikonCWD

Bueeeeeeno, como lo lleváis? Yo he avanzado un montón, me da cosilla compartir mi código nuevo, fruto del sudor de mi frente xD. Me explico.

Actualmente el rol de harvester consistía en mover un creep hacia un source, minar y cuando está full volver a la base a almacenar. Ahí se pierde MUCHO tiempo, así que he repartido la tarea en 2 creeps:

  • Minero: El creep buscará un source, se desplazará a él y lo empezará a minar. Dicho creep no tiene la función CARRY por lo que toda su energia irá al suelo. Ese creep jamás se moverá de su posición, estará siempre pegado a un source minando como un negro.

  • Helper: Un creep con partes de CARRY + MOVE solamente, no necesita WORK. Se mueve muy rapido y buscará energia esparcida en el suelo, si la encuentra se desplazará y la devolverá a la base.

De ésta forma conseguimos un creep que no parará de trabajar y 2 o 3 helpers que recogeran la energia del suelo y la moverán. Ahora viene lo bueno:

El creep helper tiene una comprobación, cada vez que se desplaza ejecutará lo siguiente:

var creepCurrentPosition = creep.pos;
      if(Game.map.getTerrainAt(creepCurrentPosition) == 'plain'){
          creep.room.createConstructionSite(creepCurrentPosition, STRUCTURE_ROAD);
      }

De ésta forma, mientras el helper se desplaza mirará si está encima del "suelo", de ser así designará la construcción de una carretera. El creep con rol builder detectará la designación y la construirá, haciendo que los creeps que se desplazan por un mismo camino lo hagan el doble de rápido.

Ahora mis creeps pueden planificar una construcción automáticamente. Viva la IA joder!! :)

#141 no. Si alguien lo crea agradecería estar como admin.

1 2 respuestas
EnderFX

#143 yo estoy ahora terminando con el tutorial, que he tenido cosas que hacer, y a ver si me mola y empiezo a escribir algo de código organizado (odio tener piezas desperdigadas).

Si la cosa va bien, esta misma noche creo repo y si queréis grupo (o créalo tú si prefieres estar como máximo admin, que yo soy algo irregular con las actualizaciones, pero podría ayudar con lo que hiciera falta :D)

1 respuesta
Hopper

#144 Yo tengo repo creado ya, pero mi colega no puede sincronizarlo desde el juego... Quieres probar?

bultack

Qué pasada de juego! En github hay algún que otro proyecto que también es de este estilo pero no tiene un resultado gráfico, todo va por logs.

Le voy a echar un vistazo a la demo y según lo que me parezca a lo mejor me animo a comprarlo!

W0rd

Muy tentador, es un buen momento para mirarse javascript, con lo cómodo que está uno con java.

KinachO

Sabiendo java, pero ni papa de js, esto no debería costarme mucho no?

2 respuestas
Deigaz

#148 No, no debería.

AikonCWD

#148 A ver pedazo de trolls, que yo no tengo ni idea de Java, ni C, ni Python, soy de sistemas... y estoy montando un ejercito de creeps en 2 días. xD

Usuarios habituales

  • Amazon
  • Lolth
  • covaga
  • AikonCWD
  • n3krO
  • EnderFX
  • MartiONE

Tags