Guía de desarrollo de juegos Indie

GreyShock

¡Buenas! Por fin ayer mi equipito de arte se puso a hacer cosillas y pude implementar las primera pruebas de estética al minijuego que me traigo entre manos. Como ya mencioné, estará hecho enteramente con recortes de papel escaneados. Ayer hicimos el fondo y un gatito. La cosa está quedando así de momento:

Si queréis verlo en movimiento, hay un streaming grabado de cómo montábamos el fondo.

En el minuto 54:30 podéis ver el juego en movimiento. Hay 5 tipos de enemigos en total, y 5 tipos de armas y mejoras que ya funcionan. Al disparar a los enemigos salen monedas y puedes recogerlas para comprar mejoras. es decir, la lógica del juego está termina, así que todo está a expensas de implementar el arte y los menús :)

streaming de ayer: http://www.twitch.tv/greyshock/b/314663670 (minuto 54.30 gameplay)

2 1 respuesta
Buffoncete

#481 en vez de xtreme programming, stream programming!

jajaja

como esto se pongan a hacerlo los de blizzard, sacan tajada, todos sus trabajadores con stream puesto (doble utilización, control + dinero por anuncios)

1 respuesta
GreyShock

#482 Lo he montado de cara a la Ludum Dare y como petición personal de algunos coleguis de mediavida, no tengo especial interés en ser monitorizado todo el tiempo... xD Ayer les estaba enseñando la creación del arte a Jastro y a Midgard y.. ya que está grabado, pues lo cuelgo para el que quiera verlo. Pero vaya, trabajar siendo grabado me hace trabajar lento y mal :P

m3l0

por si a alguien le interesa, minecraft esta echo con esto:
http://lwjgl.org/

Nucklear

Me he propuesto hacer un jueguillo de plataformas/shooter en 2D con java pero al empezar (Como siempre todo sea dicho) estoy un poco perdido.

En principio voy a crear la clase Sprite con la que dibujar el personaje jugable, los enemigos y algunos items.

El mayor problema que tengo es el como plantear la estructura global del juego, lo que tengo en mente sería algo así:

Una clase Game donde creo la ventana de juego y llamo al init, start, stop, draw, etc. Una clase Sprite como ya dije y una clase Enemy, Player, Item que heredan Sprite. La duda es ¿Cual sería la mejor manera de añadir las animaciones, físicas, colisiones, etc?

No se si me explico :/

2 respuestas
Buffoncete

#485 por ejemplo

class Game{
	void init();
	void end();
	void loop();
	void game();
}

void game(){
	try {
		while(true){
			loop();
		}
	}catch(UserSelectedExitEvent e){
		//end
	}
}

dentro del loop

void loop(){
	captureInputs();
	updateUser();
	updateEnemies();
	detectCollisions();
	...
}

void captureInputs(){
	//read user keys
	key = readKeys();

if(key == KEY_SPECIFIED_TO_EXIT_GAME){
	throw new UserSelectedExitEvent();
}

...
}
Buffoncete

#485
Creo que no hace falta esto pero:

interface Sprite{
	paint();
}

class Player implements Sprite
class Enemies implements Sprite
class Ball implements Sprite


class Renderer {
	void render(Sprite... sprites){
		for(Sprite sprite : sprites){
			sprite.paint();
		}
	}
}
1 respuesta
Nucklear

#487 Gracias por el codigo, eso lo entiendo. Voy a replantear la pregunta para que se entienda.

Siendo el objetivo un plataformas/shotter (Estilo Metal Slug pero cutre) ¿Como haríais el esqueleto del juego?

Tengo la clase Sprite básica:

import java.awt.Point;
import java.awt.image.BufferedImage;


public class Sprite {
	
BufferedImage sprite;
int xPos,yPos,width,height;
float xVel,yVel;

public Sprite(){
	xPos=0;
	yPos=0;
	xVel=0;
	yVel=0;
	width=0;
	height=0;
}

public void setSprite(BufferedImage img){
	sprite = img;
}
public BufferedImage getSprite(){
	return sprite;
}
public void setxPos(int xPosition){
	xPos = xPosition;
}
public int getxPos(){
	return xPos;
}
public void setyPos(int yPosition){
	yPos = yPosition;
}
public int getyPos(){
	return yPos;
}
public void setxVel(float xVelocity){
	xVel = xVelocity;
}
public float getxVel(){
	return xVel;
}
public void setyVel(float yVelocity){
	yVel = yVelocity;
}
public float getyVel(){
	return yVel;
}

}

¿Donde asigno las animaciones a cada personaje?¿Donde inicializo el mundo? Mas bien sería ¿Que clases crearíais vosotros para el juego?

Creo que el problema mio es no saber bien que clases/metodos necesito para un juego así.

Thanks por la ayuda.

1 respuesta
Buffoncete

yo haría.

class Player extends Sprite(){
	public Player(){
		super();
		setX(PLAYER_X);
		setY(PLAYER_Y);
		setxVel(PLAYER_X_VEL);
		setyVel(PLAYER_Y_VEL);
	}
}

class Enemy extends Sprite(){
	public Enemy(){
		super();
		setX(ENEMY_X);
		setY(ENEMY_Y);
		setxVel(ENEMY_X_VEL);
		setyVel(ENEMY_Y_VEL);
	}
}

//.. etc etc...

y luego tendría un PlayerPainter o un un PlayerRenderer como lo quieras llamar, que haga de Decorator
http://en.wikipedia.org/wiki/Decorator_pattern

Si todos se pintan igual

class SpriteDecorator{
	private Sprite sprite;

//get & set

public void render();
}

Si alguno se pinta diferente

class EnemyDecorator extends SpriteDecorator{
	private Enemy enemy;

public void render(){ 
	//own implementation 
}
}

y si todos se pintan diferente, SpriteDecorator pasaría a ser una interfaz y el resto la implementarían (render)

Al final seguirás teniendo un GameRenderer que tenga una lista de SpriteRenderer (sea interfaz o no) que llamará al método render del mismo.

Buffoncete

#488 de todas maneras, y déjame que te de un consejo, estás muy verde para implementarlo en un juego esto, o al menos, a hacerlo en un juego con sprites.

mejor ponte retos más pequeñitos que utilicen las mismas funcionalidades pero te abstraigan de querer ver un gráfico, estudiate varios patterns y entiende para que sirven.

1 respuesta
Nucklear

#490 Si, eso es lo que estoy viendo xD

Si me puedes pasar alguna guia, o algunos ejemplos sería de agradecer. Precisamente este problema que estoy teniendo ahora viene de lo que hablaba el otro dia de usar frameworks preconstruidos que no terminas de entender al 100% sin tener una buena base.

#492 Me acabas de dejar perdidísimo :/ Se hacerlo "a mi manera" pero con los patrones no entiendo nadita...

#492 Mirando un poco he encontrado este enlace que explica un poco los patrones y creo que se por donde van los tiros de lo que propones:
http://msdn.microsoft.com/es-es/library/bb972240.aspx

1 respuesta
Buffoncete

#491 mas que una guia podemos hacerlo diferente, te propongo un ejercicio y lo diseñas sin implementar y te digo como lo habría hecho yo.

Ejercicio
Tenemos un videojuego de naves, tipo Space Invaders, que salen de la parte superior de la pantalla siempre el mismo tipo de nave (Nave1), queremos poder introducir más tipo de naves según un guión.

El guión será un fichero con el siguiente esquema.

ejemplo de fichero
NAVE_1
NAVE_2
NAVE_2
NAVE_2
NAVE_1
NAVE_1
NAVE_2
NAVE_2
NAVE_2
NAVE_2

Cada nave saldrá a un tiempo fijo predeterminado en el sistema con la constante TIME_BETWEEN_INVADERS

Pistas
• Patrón factory
• Patrón builder
• La cantidad de distintas naves debe ser ampliable sin cambiar código, sólo añadiendo. (principio Open-Close)

1 respuesta
GreyShock

Hamijos, vengo a decir que he comprado impactJS y es la puta hostia. Me ha encantado. Es un framework de javascript sobre html5 con motor de físicas incluído que permite hacer juegos 2d a una velocidad pasmosa.

esta chorrada se puede hacer en 5 minutos.

http://www.jordidepaco.com/game/

Una vez programas una entidad, personaje, o lo que sea, luego es todo drag & drop y definir zonas colisionables y ale, party hard.

va a ser mi apuesta para la Ludum Dare seguro.

2 2 respuestas
Nucklear

#493 Tiene buena pinta ese FW, pero 99$ es demasié...

¿Te fijaste en el videotutorial que pone Hacking Facebook.pdf Hacking the pentagon.pdf High School Musical y hanamontana.mp3? WTF xD

1 1 respuesta
GreyShock

#494 Fueron 77€ al cambio. No me parece tan caro viendo lo que ofrece. Eso sí, ocupa 122kb, así que me ha salido caro el kb xD Pero bueno, felizmente gastados oigà.

#496 No la hay, pero ocupando 122kb no me extrañaría que alguien lo hubiera subido por ahí... Yo la rularía, pero la advertencias eran tan serias que por 77€ no me atrevo a ser castigado xD

1 respuesta
Potito

A mi me parece barato, solo te lo pregunte por si habia version trial

1 respuesta
Linkyd

#493 Flipa el codigo son 4 lineas 'contas' xD

1 respuesta
GreyShock

#497 Hay más código del que parece, pero está cargado con includes desde el main.js, así queda todo compacto y protegido :D

Pero vaya, crear entidades del juego es muy sencillo, el gato es simplemente esto:

ig.module( 
    'game.entities.prota' 
)
.requires(
    'impact.entity'
)
.defines(function(){

EntityProta = ig.Entity.extend({
    size: {x:30,y:66},
    collides: ig.Entity.COLLIDES.ACTIVE,
    // Load an animation sheet
    animSheet: new ig.AnimationSheet( 'media/bcoll_gatico.png', 30, 66 ),        
    
    init: function( x, y, settings ){
	this.parent( x, y, settings );	
	this.addAnim( 'idle', 1, [0] );
            this.maxVel.x = 200;
            this.maxVel.y = 1000;
    },
    update: function(){
            //SALTO
            if( ig.input.pressed('salto') && this.standing){
                this.vel.y = -250;
            }
            //MOV HORIZONTAL
            if( ig.input.state('left') ) {
                    this.vel.x = -100;
            }
            else if( ig.input.state('right') ) {
                    this.vel.x = 100;
            }
            else {
                    this.vel.x = 0
            }
            this.parent(); // esto lo updatea
    }
})

});

P.D.: Me flipan cosas como "this.standing" que devuelve true si el objeto está tocando el suelo y false si está en el aire. MAJIA.

elkaoD

#495 yo no rularía el código. Seguro que lo tienen "tamperado" para ver quién es el que lo ha rulado.

1 1 respuesta
zoeshadow

¿Has usado algún IDE o algo similar para hacer el juego ese? o a pelo?

1 respuesta
GreyShock

#500 me dices a mí? He usado ImpactJS y he trabajado con Netbeans, como si de desarrollo web se tratase, al fin y al cabo es javascript y html5.

#499 wtf? xD Si en todo caso estoy haciendo publicidad xD No se ve nada del core, sólo la creación de un objeto, que lo tienen ellos expuesto públicamente en la documentación de su web.

No sé si estás bromeando, ahora mismo voy muy borracho y puedo apreciar bien la realidad.

P.D.: ¡VIVA LOS VIERNES!

2 respuestas
metanoia

#501 No sé si estás bromeando, ahora mismo voy muy borracho y puedo apreciar bien la realidad.

Se nota, se nota :>

1 1 respuesta
elkaoD

#501

  1. ¿Borracho a las 15:19?
  2. ¡¿¡¿Borracho a las 15:19?!?!?
  3. Lo decía por:

"No la hay, pero ocupando 122kb no me extrañaría que alguien lo hubiera subido por ahí... Yo la rularía, pero la advertencias eran tan serias que por 77€ no me atrevo a ser castigado xD"

PD: Y yo que entro en 10 mins a clase....... ¡cabrón con suerte! xD

1 1 respuesta
GreyShock

#502 ups xD

#503 Bueno, ahora un poco ya de resaca... Es que los viernes termino de currar al mediodía, y los compañeros nos tomamos unas birras a nuestra salud.. y a veces una birra te lleva a la otra y acabas con la mesa llena y con resaca a las 6 de la tarde xD Pero oye, felicidad asegurada xD Ahora tras una buena comida y una pequeña siesta, a programar como buen friki de mierda.

En cuanto a lo de impact... creo que ya da igual xDD

1 respuesta
Buffoncete

#504 una buena comida y una siesta, el sueño de todo hombre.

1
B

Estilo de Space Invaders para proyecto final de curso

¿Qué os parecería? No sé si alguien se enteró en el post de Unsurvive, pero lo cerré para centrarme en un proyecto simple para final de curso, creéis que estaría bien hacer un Space Invaders? Aun que sea bastante simple digo yo que será mejor presentar algo terminado que algo en desarrollo, no?

Opiniones porfavor!

Scottie

es importante decir que curso y nivel cursas... :S

1 respuesta
B

#507 Es un curso de informática nada importante, pero el profesor nos dijo que para aprobar el curso había que presentar un proyecto final, relacionado con la informática, o algo que ejecute un PC, ya sea un programa, una torre para un pc hecha de cristal.. lo que sea, así que dije que iba a intentar presentar un juego, simple pero que gustase, y para no quemarme mucho no sé si hacer un Space Invaders ^^

2 respuestas
Scottie

#508 ok ok. Esta bien, pero lo mismo puede ser demasiado trabajo para lo que es el curso. Si ves que con poco se conforma, no te esfuerces y termina el otro proyecto, que debes callar bocas que ya se te suben demasiado a la chepa. Pero eso si, no presentes nada, ni evoluciones ni noticias ni nada. y si tienes tentación, abre un topic en este foro que son mas colaborativos.

1 respuesta
B

#509 No si ya, es lo que he visto, hasta aquí parece que no llegan los trolls o.o

1 respuesta
Tema cerrado