Campo Minado Multiplayer

14 respostas
Dallagnol

Pessoal, tenho o jogo feito é o campo minado que quando achada uma mina ele coloca uma bandeira em cima e soma na pontuação do jogador, só que não sei como fazer o jogo multiplayer
o jogo já está feito , só falta colocar ele como cliente/servidor e criar os player e pontuação.

gostaria de algum tutorial ou alguém que já tenha feito poderia me enviar o projeto para mim olhar como foi feito.
obrigado.

14 Respostas

augustovieira

Velho, não tenho isso não. Posso te aconselhar a fazer, sei que não é difícil. Além de aprender muito, você personaliza do jeito que você quer. De uma procurada na net. Tem muito conteúdo!!

Boa sorte!

Dallagnol

por exemplo, gostaria de um exemplo de uma servidor e um cliente que quando iniciado o servidor ele tenha que esperar dois jogadores se conectarem e ai sim abrir a tela de jogo…

alguém ?

DavidUser

A melhor alternativa para seu problema parece ser o uso de RMI, busque mais a respeito.

Dallagnol

então me achem um exemplo desse tipo, eu procurei, (um exemplo que faça um tela de jogo atualizar para os dois cliente ) ,sincronizar eles na mesma tela , não achei eu so acho de troca de msg e essas CHAT e não sei o que.

DavidUser

Tudo sempre vai se basear em trocas de mensagens você tem que abstrair mais.

Mas creio que RMI seja uma boa pois nesse caso a interação dos clientes deve ser utilizar uma interface, mais transparente.

Dallagnol

vamos por parte, pra começar
como conectar dois clients na mesma tela do jogo ?
alguém de um exemplo por favor.

Dallagnol

essa que é a dificuldade, eu preciso de exemplo , ver como faz essas chamadas… sem isso não vou conseguir fazer.

Dallagnol
package aplicacao;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	static ServerSocket serverSocket;
	static Socket socket;
	static DataOutputStream out;
	static DataInputStream in;
	static Players[] player = new Players[2];

	public static void main(String[] args) throws Exception {
		System.out.println("Starting server..");
		serverSocket = new ServerSocket(7777);
		System.out.println("ServerStarted");

		while (true) {
			socket = serverSocket.accept();
			for (int i = 0; i < 2; i++) {

				System.out.println("Conectado com " + socket.getInetAddress());
				out = new DataOutputStream(socket.getOutputStream());
				in = new DataInputStream(socket.getInputStream());

				if (player[i] == null) {
					
					player[i] = new Players(out, in, player);
					Thread thread = new Thread(player[i]);
					thread.start();
					break;
				}
			}
		}
	}
}

class Players implements Runnable {

	DataOutputStream out;
	DataInputStream in;
	Players[] player = new Players[2];
	String name;

	public Players(DataOutputStream out, DataInputStream in, Players[] player) {
		this.out = out;
		this.in = in;
		this.player = player;
	}

	@Override
	public void run() {
		try {
			name = in.readUTF();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		while (true) {
			try {
				String message = in.readUTF();
				for (int i = 0; i < 2; i++) {
					if (player[i] != null) {
						player[i].out.writeUTF(name +":"+ message);
					}
				}
			} catch (IOException e) {

				this.out = null;
				this.in = null;
			}
		}
	}

}
A classe cliente está logo abaixo :
package aplicacao;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class Client {

	static Socket socket;
	static DataInputStream in;
	static DataOutputStream out;
	public static void main(String[] args) throws Exception{
		socket = new Socket("localhost",7777);
		
		in = new DataInputStream(socket.getInputStream());
		out = new DataOutputStream(socket.getOutputStream());
		
		Input input = new Input(in);
		
		Thread thread = new Thread(input);
		thread.start();
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Digite seu nome : ");
		String name = sc.nextLine();
		out.writeUTF(name);
		
		while(true){
			String sendMessage = sc.nextLine();
			out.writeUTF(sendMessage);
		}

	}

}

class Input implements Runnable{
	
	DataInputStream in;
		
	public Input(DataInputStream in) {
		this.in = in;
	}
	
	@Override
	public void run() {
		while(true){
			String message;
			try {
				message = in.readUTF();
				System.out.println(message);
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	
	}
	
}

agora eu pergunto como fazer um jogo campo minado que ja está implementado iniciar para os dois clientes e atualizar seus movimento , ta ai o que tenho mas não sei utilizar alguém se puder ?

Dallagnol

OK vlw pessoal

javaflex

Pesquise sobre o que falaram para usar. Em pesquisa rápida achei:



O resto vai ser sua lógica, estudos, pesquisas e tentativas para evoluir e poder perguntar pontualmente novas dúvidas.

Dallagnol

como eu chamaria um objeto campo minado e colocaria somente 2 client nele e cada alteracao feita por um cliente o outro recebe no mesmo tempo ?

ViniGodoy

Dizer que falta “só” o multiplayer é como dizer que para um carro funcionar, falta “só” construir o motor.

Não tem nada de trivial, nem de fácil para inserir um módulo multiplayer. Provavelmente, boa parte da organização das suas classes vai mudar.

Infelizmente, não existe um game.setMultiplayer(true);

WellingtonRamos

Pode ser sockets também. Tem bastante tutorial na net sobre isso.

WellingtonRamos

Dallagnol:
então me achem um exemplo desse tipo, eu procurei, (um exemplo que faça um tela de jogo atualizar para os dois cliente ) ,sincronizar eles na mesma tela , não achei eu so acho de troca de msg e essas CHAT e não sei o que.
Em vez de textos de bate-papo (vulgo chat) você passa a transmitir o que quer que seja atualizado. Boa parte da inteligência e toda a interação visual fica no cliente. Só se transmite o absolutamente necessário.

Ou seja, os exemplos ajudam o suficiente, o resto você vai ter que fazer mesmo…

Criado 28 de fevereiro de 2013
Ultima resposta 2 de mar. de 2013
Respostas 14
Participantes 6