Campo Minado Multiplayer

14 respostas
D

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

A

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!

D

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 ?

D

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

D

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.

D

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.

D

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

D

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

D
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 ?

D

OK vlw pessoal

J

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.

D

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 ?

V

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);

W

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

W

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