Fórum jogo da forca via cliente/servidor #477590
29/04/2014
0
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Forca1 extends JFrame{
String Lista[] = {" " ,"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"};
private JToolBar Barra_Ferramenta = new JToolBar();
private JLabel MSN = new JLabel(" Escolha uma Letra: ");
private JButton Novo_Jogo = new JButton("Novo Jogo");
private JComboBox Opcao = new JComboBox(Lista);
private JLabel Ultima_Letra_Escolhida = new JLabel(" Utima Letra Escolhida: ");
private JTextField Text_Letra = new JTextField();
private JButton Palavra = new JButton("Ja sei a palavra certa!");
private GridLayout Layout = new GridLayout(2,1);
private JPanel Geral = new JPanel();
private JPanel Panel_de_Controle = new JPanel();
private JLabel Letra[] = new JLabel[12];
private Enforcado Panel_da_Animacao = new Enforcado();
private JLabel Barra_de_Status = new JLabel(" Numero de Letra(s) errada(s): 0");
public Forca1(){
super("Jogo da Forca");
// Adicionando os componentes a Barra de Ferramenta
Barra_Ferramenta.add(Novo_Jogo);
Barra_Ferramenta.add(MSN);
Barra_Ferramenta.add(Opcao);
Barra_Ferramenta.add(Ultima_Letra_Escolhida);
Barra_Ferramenta.add(Text_Letra);
Barra_Ferramenta.add(Palavra);
add(Barra_Ferramenta, BorderLayout.NORTH);
// Configurações Iniciais
for (int i=0; i<12; ++i){
Letra[i] = new JLabel("__");
Panel_de_Controle.add(Letra[i]);
Letra[i].setFont(new Font("Serif" , Font.BOLD, 48));
Letra[i].setVisible(false);
}
Geral.setLayout(Layout);
Geral.add(Panel_de_Controle);
Geral.add(Panel_da_Animacao);
add(Geral);
Barra_de_Status.setFont(new Font("Serif", Font.BOLD, 14));
Barra_de_Status.setHorizontalAlignment(SwingConstants.LEFT);
add(Barra_de_Status, BorderLayout.SOUTH);
Opcao.setEnabled(false);
Text_Letra.setEnabled(false);
Palavra.setEnabled(false);
Eventos_JogoDaForca Eventos = new Eventos_JogoDaForca();
Novo_Jogo.addActionListener(Eventos);
Palavra.addActionListener(Eventos);
Opcao.addItemListener(Eventos);
}
private class Eventos_JogoDaForca implements ActionListener, ItemListener{
private String Palavra_Misteriosa, Palavra_Certa;
int Tamanho_da_Palavra_Misteriosa, Letras_Encontradas, Numeros_de_Erros, Campos_Nao_Preenchidos;
int Exibir_Messagem=0;
public void actionPerformed (ActionEvent event){
// Inicializando um novo Jogo
if (event.getSource() == Novo_Jogo){
Exibir_Messagem=0;
Numeros_de_Erros = 0;
Habilitando_Desabilitando_Componentes(false);
for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
Letra[i].setVisible(false);
Palavra_Misteriosa = JOptionPane.showInputDialog(Forca1.this, "Qual nome deve ser advinhado?");
if(Palavra_Misteriosa != null){
if ((Palavra_Misteriosa.length() > 12) || (Palavra_Misteriosa.length() <= 0))
JOptionPane.showMessageDialog(
Forca1.this, "A palavra escolhida deverá ter no mímimo 1 e no máximo 12 caracteres!",
"Menssagem", JOptionPane.PLAIN_MESSAGE);
else{
Habilitando_Desabilitando_Componentes(true);
Tamanho_da_Palavra_Misteriosa = Palavra_Misteriosa.length();
for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i){
Letra[i].setVisible(true);
Letra[i].setText("__");
}
}
}
}
// Caso já se saiba a palavra a ser adivinhada
if (event.getSource() == Palavra){
Palavra_Certa = JOptionPane.showInputDialog(Forca1.this, "Qual é a palavra?");
if (Palavra_Certa != null){
Exibir_Messagem=1;
// Caso a palavra digitada estiver correta...
if ((Palavra_Misteriosa.toUpperCase()).equals(Palavra_Certa.toUpperCase())){
// ... será atualizado o campo de exibição (palavra certa irá ser mostrada na tela)
for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
Letra[i].setText("" + Palavra_Misteriosa.toUpperCase().charAt(i));
Vencir();
} else Perdir();
Habilitando_Desabilitando_Componentes(false);
}
}
}
public void itemStateChanged(ItemEvent event){
if(event.getStateChange() == ItemEvent.SELECTED){
// Exibindo a última letra selecionada
Text_Letra.setText("" + Opcao.getSelectedItem());
Letras_Encontradas = 0;
// Verificando se a letra selecionada é existente na palavra misteriosa
for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i){
if (Text_Letra.getText().charAt(0) == Palavra_Misteriosa.toUpperCase().charAt(i)){
Letra[i].setText("" + Text_Letra.getText().charAt(0));
Letras_Encontradas++;
}
}
Campos_Nao_Preenchidos = 0;
for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
if (Letra[i].getText() != "__") Campos_Nao_Preenchidos++;
if ((Campos_Nao_Preenchidos == Tamanho_da_Palavra_Misteriosa) && (Exibir_Messagem==0)){
Habilitando_Desabilitando_Componentes(false);
Exibir_Messagem = 1;
Vencir();
} else{
/* Caso a letra selecionada pelo Jogador não faça parte da
palavra misteriosa será contabilizado erro*/
if ((Letras_Encontradas == 0) && (Exibir_Messagem==0)){
Numeros_de_Erros++; // Incrementando variável
// Desenhando animação
Panel_da_Animacao.setErro(Numeros_de_Erros);
// Atualizando o número de erros
Barra_de_Status.setText(" Numero de Letra(s) errada(s): " + Numeros_de_Erros);
if (Numeros_de_Erros == 7){
Habilitando_Desabilitando_Componentes(false);
Perdir();
}
}
}
}
}
public void Habilitando_Desabilitando_Componentes(boolean parametro){
/* Quando parâmetro for verdadeiro os componetes abaixo
estaram ativados, ao contrário desativados*/
Opcao.setEnabled(parametro);
Text_Letra.setEnabled(parametro);
Palavra.setEnabled(parametro);
}
public void Vencir(){
JOptionPane.showMessageDialog(Forca1.this, "Parabéns!!!");
Atualizar();
}
public void Perdir(){
JOptionPane.showMessageDialog(Forca1.this, "Você falhou! \n Tente Novamete!");
Atualizar();
}
public void Atualizar(){
Panel_da_Animacao.setErro(7);
Text_Letra.setText("");
Opcao.setSelectedIndex(0);
Barra_de_Status.setText(" Numero de Letra(s) errada(s): 0");
}
}
class Enforcado extends JPanel{
private int Erros;
void setErro(int Numeros_de_Erros) {
Erros = Numeros_de_Erros;
}
public void paintComponent(Graphics g){
super.paintComponents(g);
if (Erros == 1){
g.fillOval(5,5,205,205);
repaint();
}
if (Erros == 2){
g.fillOval(5,5,205,205);
g.setColor(Color.WHITE);
g.fillOval(55,65,30,30);
repaint();
}
if (Erros == 3){
g.setColor(Color.BLACK);
g.fillOval(5,5,205,205);
g.setColor(Color.WHITE);
g.fillOval(55,65,30,30);
g.fillOval(135,65,30,30);
repaint();
}
if (Erros == 4){
g.setColor(Color.BLACK);
g.fillOval(5,5,205,205);
g.setColor(Color.WHITE);
g.fillOval(55,65,30,30);
g.fillOval(135,65,30,30);
g.fillOval(50,110,120,60);
repaint();
}
if (Erros == 5){
g.setColor(Color.BLACK);
g.fillOval(5,5,205,205);
g.setColor(Color.WHITE);
g.fillRect(45,65,30,8);
g.fillOval(55,65,30,30);
g.fillOval(135,65,30,30);
g.fillOval(50,110,120,60);
repaint();
}
if (Erros == 6){
g.setColor(Color.BLACK);
// Desenhando a cabeça
g.fillOval(5,5,205,205);
g.setColor(Color.WHITE);
// Desenhando a primeira sobrancelha
g.fillRect(45,65,30,8);
// Desenhando o primeiro olho
g.fillOval(55,65,30,30);
// Desenhando a segunda sobrancelha
g.fillRect(125,65,30,8);
// Desenhando o segundo olho
g.fillOval(135,65,30,30);
// Desenhando a boca
g.fillOval(50,110,120,60);
repaint();
}
// Limpa o Panel
if (Erros == 7){
g.clearRect(0,0,250,250);
repaint();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// Propriedades da Janela
Forca1 Propriedades = new Forca1();
Propriedades.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Propriedades.setSize(800,520);
Propriedades.setVisible(true);
Propriedades.setResizable(false);
Propriedades.setLocationRelativeTo(null);
// TODO Auto-generated method stub
}
}2º Chat: nele eu consigo estabelecer comunicação entre dois computadores:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.String;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class chat1{
public static void main(String[] args)
{
String hostt = null;
int porrt;
String portt = null;
String a;
Socket socket = new Socket();
a = JOptionPane.showInputDialog(null,"Iniciar Como Cliente?");
if (a.equals("sim"))
{
hostt = JOptionPane.showInputDialog(null,"Insira o host");
portt = JOptionPane.showInputDialog(null,"Insira a porta");
porrt = Integer.parseInt(portt);
startClient(hostt,porrt);
//non-static method startClient(int) cannot be referenced from a static context
}
else
{
portt = JOptionPane.showInputDialog(null,"Insira a porta");
porrt = Integer.parseInt(portt);
startServer(porrt);
//
//non-static method startServer(int) cannot be referenced from a static context
//
}
}
private static void startClient(String host, int port)
{
try
{
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port));
chat(socket);
}
catch (UnknownHostException e)
{
System.out.println("Host desconhecido");
System.out.println("Host: " + host);
System.out.println("Porta: " + port);
System.exit(2);
}
catch (IOException e)
{
e.printStackTrace();
System.exit(1);
}
}
private static void startServer(int porta)
{
try
{
ServerSocket socket = new ServerSocket(porta);
System.out.println("Aguardando conexao...");
Socket s = socket.accept();
chat(s);
} catch (IOException e)
{
System.out.println("Problemas na comunicação: ");
e.printStackTrace();
System.exit(1);
}
}
private static void chat(Socket s) throws IOException
{
System.out.println("Conectado com " + s.getRemoteSocketAddress());
listen(s.getInputStream());
talk(s.getOutputStream());
}
/**
* @param outputStream
*/
private static void talk(OutputStream outputStream) throws IOException
{
DataOutputStream output = new DataOutputStream(outputStream);
String line = "";
while (!line.equals("EXIT"))
{
Scanner scan = new Scanner(System.in);
System.out.print(": ");
line = scan.nextLine();
output.writeInt(line.length());
for (char ch : line.toCharArray())
output.writeChar(ch);
output.flush();
}
}
/**
* @param inputStream
*/
private static void listen(final InputStream inputStream)
{
new Thread(new Runnable() {
DataInputStream ds = new DataInputStream(inputStream);
public void run()
{
try
{
while (true)
{
int size = ds.readInt();
int cont = 0;
char[] chars = new char[size];
while (cont < size)
{
chars[cont] = ds.readChar();
cont = cont + 1;
}
String str = new String(chars);
if (str.equals("EXIT"))
{
System.out.println("Conversa terminada.");
System.exit(0);
}
System.out.println(str);
}
} catch (IOException e)
{
}
}
}).start();
}
}
Eu tenho uma dúvida como colocar o jogo para rodar neste chat?
Carlos Leonel
Curtir tópico
+ 0Posts
29/04/2014
Eduardo Pessoa
Gostei + 0
30/04/2014
Carlos Leonel
Gostei + 0
30/04/2014
Eduardo Pessoa
Gostei + 0
30/04/2014
Carlos Proença
seguinte .... n entendi bem sua duvida... se o chat ja funciona... vc pode usar a mesma ideia para fazer seu jogo em rede....
tipo um jogo em cada maquina e as palavras e chances sao passadas de um jogo pro outro... via socket...
creio que é só voce adaptar para conseguir...
qualquer coisa grita ai
att.
Gostei + 0
01/05/2014
Carlos Leonel
Obrigado, por ter postado. Mas a minha dúvida é usar este chat para o jogo. Eu já vi sim jogo da forca via socket mas não quero copiar o código de ninguém para usá-lo. Como ainda sou iniciante dá pra fazer isto neste jogo aí? E qual seria o código para isso?
Gostei + 0
02/05/2014
Carlos Proença
tipo.. da sim...
mas vamos te deixar isso de desafio.. hehe
por exemplo... voce consegue ver onde vc define as palavras que serao usadas no jogo?? voce ja testou ele neh? se essa palavra n foce pega de um JOptionPane e viesse de um socket igual tem no chat? e se vc enviasse todas as letras para o jogador B que o jogador A digita para ver se ele ta acertando?
agora sobre o chat.... n seria legal se tivesse um JTextArea onde as strings que vem da conversa do chat focem mostradas na tela?
o codigo em si.. ja esta pronto.. é só voce usar a imaginação rsrs
qualquer duvida só falar
att.
Gostei + 0
01/06/2014
Gustavo Medeiros
Forca1.java:13: warning: [unchecked] unchecked call to JComboBox(E[]) as a membe
private JComboBox Opcao = new JComboBox(Lista);
^
where E is a type-variable:
E extends Object declared in class JComboBox
1 warning
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)