Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
[Java]Sistema multiplayer offline
Página 1 de 1
[Java]Sistema multiplayer offline
Tipo: Tutorial
Nível: Intermediário.
Linguagem: java.
Contato e mais informações: https://lucasindiesh1p.wordpress.com
Mais tutorais sobre: https://lucasindiesh1p.wordpress.com/2018/11/08/como-fazer-um-sistema-multiplayer-offline/
Passo 0: 1º decida quais teclas são do usuário1 e quais teclas são do usuário 2, e o que cada tecla faz.
E declarar isso no programa.
Como por exemplo em um jogo do qual o jogador 1 nada mais é do que uma imagem 1 controlada por uma quantidade de botões e o jogador dois é uma imagem 2 controlado por outros botões, porém ambas imagens sendo processadas pelo mesmo programa e na manipuladas na mesma tela.
Passo 1: A classe responsável pelo controle de eventos e inputs do jogador deverá salvar em uma lista ou uma collection ou algo similar cada
botão precionado ou deixado de ser precionado pelo usuário.
Nesse caso estamos usando o HashSet.
Estaremos importando do .awt e do .util
passo2:
O método que recebe o input de quando qualquer botão é apertado e/ou no método que recebe o input de quando qualquer botão é liberado,
devera ter uma condição para verificar se mais de duas teclas foram usadas pelo usuário, se for verdade então vai verificar se faz parte dos comandos declarados para o jogador 1 ou declarados para o jogador 2, você pode criar uma lista ou uma classe para cada jogador e fazer declarações para que seja possível fazer essa COMPARAÇÃO caso queira.
E então, após a comparação ser feita ou a condição ser validade, vai ativar um comando, de um ou dos dois usuários.
Sobre o KeyListener: “The KeyListener interface allows detecting key pressing and releasing separately.”
Exemplo:
RESULTADOS: Ao apertar a tecla” X” ou a tecla” Y” mesmo que as aperte ao mesmo tempo o sistema irá verificar e responder as duas de forma separada porém de forma síncrona.
Observações¹: Para sincronia é necessário colocar synchronized nos métodos que vão verificas as teclas apertadas.
Observações²: Sobre a
https://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time
https://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time
https://stackoverflow.com/questions/3341202/what-is-the-fastest-way-to-compare-two-sets-in-java
https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
https://www.codejava.net/java-core/collections/java-set-collection-tutorial-and-examples#Implementations
http://www.guj.com.br/t/percorrer-um-set-para-salvar-no-banco/92120
https://forum.imasters.com.br/topic/347915-resolvido%C2%A0qual-a-diferen%C3%A7a-entre-while-e-for/
https://stackoverflow.com/questions/1085709/what-does-synchronized-mean
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
Nível: Intermediário.
Linguagem: java.
Contato e mais informações: https://lucasindiesh1p.wordpress.com
Mais tutorais sobre: https://lucasindiesh1p.wordpress.com/2018/11/08/como-fazer-um-sistema-multiplayer-offline/
Passo 0: 1º decida quais teclas são do usuário1 e quais teclas são do usuário 2, e o que cada tecla faz.
E declarar isso no programa.
Como por exemplo em um jogo do qual o jogador 1 nada mais é do que uma imagem 1 controlada por uma quantidade de botões e o jogador dois é uma imagem 2 controlado por outros botões, porém ambas imagens sendo processadas pelo mesmo programa e na manipuladas na mesma tela.
Passo 1: A classe responsável pelo controle de eventos e inputs do jogador deverá salvar em uma lista ou uma collection ou algo similar cada
botão precionado ou deixado de ser precionado pelo usuário.
Nesse caso estamos usando o HashSet.
Estaremos importando do .awt e do .util
- Código:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashSet;
import java.util.Set;
passo2:
O método que recebe o input de quando qualquer botão é apertado e/ou no método que recebe o input de quando qualquer botão é liberado,
devera ter uma condição para verificar se mais de duas teclas foram usadas pelo usuário, se for verdade então vai verificar se faz parte dos comandos declarados para o jogador 1 ou declarados para o jogador 2, você pode criar uma lista ou uma classe para cada jogador e fazer declarações para que seja possível fazer essa COMPARAÇÃO caso queira.
E então, após a comparação ser feita ou a condição ser validade, vai ativar um comando, de um ou dos dois usuários.
Sobre o KeyListener: “The KeyListener interface allows detecting key pressing and releasing separately.”
Exemplo:
- Código:
public class MultiTecladoKey implements keyListener{
private final Set<Character> apertaram = new HashSet<Character>();
public synchronized void keyPressed(KeyEvent e) {
apertaram.add(e.getKeyChar());
if(apertaram.size() >= 1){
for (Character i : apertaram) { // vai percorrer todos os elementos do conjunto salvo
System.out.println (i);
if (i=='x')
System.out.println("Jogador1 apertou atacou");
if(i=='y')
System.out.println("jogador2 apertou atacou");
}
apertaram.clear(); //vai apagar todos os elementos do conjunto.
}
}
public static void main(String[] args) { //neste exemplo estamos usando o Jframe
JFrame jfm = new JFrame("Aperte Duas teclas ao mesmo tempo e veja no console");
//obs: os system.out.println são visiveis apenas no console.
jfm.setSize(400,400);
jfm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfm.addKeyListener(new MultiTecladoKey());
jfm.setVisible(true);
}
}
RESULTADOS: Ao apertar a tecla” X” ou a tecla” Y” mesmo que as aperte ao mesmo tempo o sistema irá verificar e responder as duas de forma separada porém de forma síncrona.
Observações¹: Para sincronia é necessário colocar synchronized nos métodos que vão verificas as teclas apertadas.
Observações²: Sobre a
Class HashSet(https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html)
“Note that this implementation is not synchronized. If multiple threads access a hash set concurrently, and at least one of the threads modifies the set, it must be synchronized externally. This is typically accomplished by synchronizing on some object that naturally encapsulates the set. If no such object exists, the set should be “wrapped” using the Collections.synchronizedSet method. This is best done at creation time, to prevent accidental unsynchronized access to the set:- Código:
Set s = Collections.synchronizedSet(new HashSet(...));"
https://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time
https://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time
https://stackoverflow.com/questions/3341202/what-is-the-fastest-way-to-compare-two-sets-in-java
https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
https://www.codejava.net/java-core/collections/java-set-collection-tutorial-and-examples#Implementations
http://www.guj.com.br/t/percorrer-um-set-para-salvar-no-banco/92120
https://forum.imasters.com.br/topic/347915-resolvido%C2%A0qual-a-diferen%C3%A7a-entre-while-e-for/
https://stackoverflow.com/questions/1085709/what-does-synchronized-mean
https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
CDZ- Novato
- Mensagens : 22
Créditos : 0
Tópicos semelhantes
» [Java] Tratando dos eventos das teclas do usuário com java awt (Abstract Window Toolkit )
» [Java]Animando imagens com java: update VS Swing Timer
» [Java]Carregando e mostrando imagens com java.awt
» [Java]O esqueleto dos games 2d em java
» Shadowgun - TPS Multiplayer Kit
» [Java]Animando imagens com java: update VS Swing Timer
» [Java]Carregando e mostrando imagens com java.awt
» [Java]O esqueleto dos games 2d em java
» Shadowgun - TPS Multiplayer Kit
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos