Jogo de dados (General)

9 respostas
J

Bom dia… Estou desenvolvendo um jogo de general :smiley:

preciso de ajuda, no código abaixo tem a condição para ser general, preciso fazer as condições para quadra, fula e sequencia,
eu gostaria de ver se alguém saberia me ajudar com a saequenci… obrigado

private boolean isGeneral() {
boolean fezGeneral = false;
int i = 0;
while (!fezGeneral && i < 6) {
fezGeneral = valorDosDados[i++] == 5;
}
return fezGeneral;
}
public String getResultado() {
String r="";
if (isGeneral()) {
r="General";
}
return r;
}

9 Respostas

K

não entendi a sua dúvida, o que seria exatamente um jogo general?

ps: não esquecer o [/code] dps do código :wink:

J

um jogo de general é um jogo de dados, tem 5 dados… ai vc joga os cinco e tem umas combinações lah…

5 dados iguais = general
4 dados iguais = quadra
3 iguais e 2 iguais = fula (ex: 5 5 5 2 2)
sequencia = 1, 2, 3, 4, 5 ou 2,3,4,5,6

a parte do código que ta ai é o do 5 dados iguais ou seja pra quem fez general…

obs: general é o nome do jogo e de umna jogada do jogo tamem kkk

K

hum…entendi agora…
bom, no caso da quadra vc poderia utilizar um contador para verificar se tem 4 dados iguais
a fula vai ser um pouco mais complicado, ainda não consegui pensar em nada
e a sequencia, vc poderia ordenar os nºs em ordem crescente e dps verificar se o próx = o anterior +1

Lavieri
JaVa_MaChInE:
um jogo de general é um jogo de dados, tem 5 dados.. ai vc joga os cinco e tem umas combinações lah...

5 dados iguais = general
4 dados iguais = quadra
3 iguais e 2 iguais = fula (ex: 5 5 5 2 2)
sequencia = 1, 2, 3, 4, 5 ou 2,3,4,5,6

a parte do código que ta ai é o do 5 dados iguais ou seja pra quem fez general...

obs: general é o nome do jogo e de umna jogada do jogo tamem kkk

que tal assim ??

public class Dado implements Comparable<Dado> {
    private static final Random roleta = new Random();  
    private int value = 0;
    private int faces = 6;
      
    public Dado() {  
        lancar();  
    }
    
    public Dado(int faces) {
        this.faces = faces;
        lancar();
    }
      
    public int lancar() {  
        return value = 1 + roleta.nextInt(faces);  
    }  
  
    public boolean equals(Object o) {  
        if (o instanceof Dado)   
           return equals((Dado)o);  
        return false;  
    }  
      
    public boolean equals(Dado dado) {  
        return (value == dado.value) ? true : false;  
    }  
  
    public int getValue() {
        return value;  
    }

    public int compareTo(Dado o) {
        return this.value - o.value;
    }
}

ai vc faz uma classe para o jogo do general

public class JogoGeneral {
    List<Dado> dados = new ArrayList<Dado>(5);  
      
    public JogoGeneral() {  
        for (int i = 0; i < 5; i++)  
            dados.add(new Dado(6));
        Collections.sort(dados);
    }
}

eu faria um Enum agora para verificar os jogo... perai q ja posto um enum

J

Vlw…

o codigo que eu postei é se a pessoa fizer o general… está certo? ( mas eu postei ai só a parte da jogada general, eu fiz uma classe dado tamem…) para a quadra poderia ser parecido??

Lavieri

o uma forma de fazer é assim... ve como ficou a classe general

Classe DADO
import java.util.Random;

public class Dado implements Comparable<Dado> {

    public static final Dado UM = new Dado(6,1);
    public static final Dado DOIS = new Dado(6,2);
    public static final Dado TRES = new Dado(6,3);
    public static final Dado QUATRO = new Dado(6,4);
    public static final Dado CINCO = new Dado(6,5);
    public static final Dado SEIS = new Dado(6,6);

    private static final Random roleta = new Random();
    private int value = 0;
    private int faces = 6;


    public Dado() {
        lancar();
    }

    public Dado(int faces, int value) {
        this.faces = faces;
        this.value = value;
    }

    public Dado(int faces) {
        this.faces = faces;
        lancar();
    }

    public int lancar() {
        return value = 1 + roleta.nextInt(faces);
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash = hash + this.value * this.faces;
        return hash;
    }

    public boolean equals(Object o) {
        if (o instanceof Dado)
           return equals((Dado)o);
        return false;
    }

    public boolean equals(Dado dado) {
        return (value == dado.getValue()) ? true : false;
    }

    public int getValue() {
        return value;
    }

    public int compareTo(Dado o) {
        return this.value - o.value;
    }

    public String toString() {
        return String.valueOf(value);
    }
}
Classe JogoGeneral
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class JogoGeneral {
    List<Dado> dados = new ArrayList<Dado>(5);

    public JogoGeneral() {
        for (int i = 0; i < 5; i++)
            dados.add(new Dado(6));
        Collections.sort(dados);
    }

    public List<Dado> getDados() {
        return dados;
    }

    public ResultadoJogoGeneral getResultado() {
        return ResultadoJogoGeneral.getResult(this);
    }

    public String toString() {
        return Arrays.toString(dados.toArray());
    }
}
Enum ResultadoJogoGeneral [size=18][color=red]Obs.: Se não souber como funciona o Enum direito, da um toque que eu te explico[/color][/size]
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public enum ResultadoJogoGeneral {
    /**
     * Todos os 5 dados iguals por exemplo [3,3,3,3,3]  
     */
    GENERAL("General") {
        public boolean teste(JogoGeneral jogo) {
            Set<Dado> resultados = new HashSet<Dado>();
            resultados.addAll(jogo.getDados());
            return resultados.size() == 1;

            //Set só aceita 1 objeto de cada tipo, sendo assim quando vc joga todos os dados em um Set
            //se o Set só contem um valor, é pq todos os dados são iguais.
        }
    },
    /**
     * Quando 4 dos 5 dados são iguais, por exemplo [1,5,5,5,5]  
     */
    QUADRA("Quadra") {
        public boolean teste(JogoGeneral jogo) {
            Set<Dado> resultados = new HashSet<Dado>();
            resultados.addAll(jogo.getDados());
            if (resultados.size() != 2)
                return false;
            Dado primeiro = (Dado)resultados.toArray()[0];
            int contagem = Collections.frequency(jogo.getDados(), primeiro);
            return contagem == 4 || contagem == 1;

            //Seguindo o mesmo raciocinio do General, em um Set dos dados
            //Quando há quadra, devem existir 2 dados no set
            //e devem haver 4 dados de um tipo e 1 do outro, ou seja, o primeiro dado
            //deve conter 4 ou 1 nos jogos.
        }
    },
    /**
     * Quando há 2 e 3 dados iguais, por exemplo [4,4,4,5,5]
     */
    FULA("Fula") {
        public boolean teste(JogoGeneral jogo) {
            Set<Dado> resultados = new HashSet<Dado>();
            resultados.addAll(jogo.getDados());
            if (resultados.size() != 2)
                return false;
            int contagem = Collections.frequency(jogo.getDados(), (Dado)resultados.toArray()[0]);
            return contagem == 2 || contagem == 3;

            //Seguindo o mesmo raciocinio do General, em um Set dos dados
            //Quando há fula, devem existir 2 dados no set
            //e devem haver 3 dados de um tipo e 2 do outro, ou seja, o primeiro dado
            //deve conter 3 ou 2 nos jogos.
        }
    },
    /**
     * Quando há uma sequencia, por exemplo [2,3,4,5,6]
     */
    SEQUENCIA("Sequencia") {
        public boolean teste(JogoGeneral jogo) {
            Set<Dado> resultados = new HashSet<Dado>();
            resultados.addAll(jogo.getDados());
            if (resultados.size() != 5)
                return false;

            return !(resultados.contains(Dado.UM) && resultados.contains(Dado.SEIS));

            //Seguindo o mesmo raciocinio do General, em um Set dos dados
            //Quando há sequencia, devem existir 5 dados no set, pois todos são diferentes
            //e os 5 dados devem ser uma sequencia, para tal, 
            //quando há 1, o 6 não pode existir, ou seja [1,2,3,4,5]
            //e quando há 6, o 1 não pode existir, ou seja [2,3,4,5,6]
            //sendo assim quando resultado não contiver 1 e 6 ao mesmo tempo
        }
    },
    NENHUM("Nenhum") {
        public boolean teste(JogoGeneral jogo) {
            return (getResult(jogo) == NENHUM) ? true : false;
        }
    };

    public static ResultadoJogoGeneral getResult(JogoGeneral jogo) {

        for (int i = 0; i < 4; i++)
            if (values()[i].teste(jogo))
                return values()[i];
        return values()[4];
    }

    private final String nome;
    private ResultadoJogoGeneral(String nome) {
        this.nome = nome;
    }
    abstract public boolean teste(JogoGeneral jogo);
    public String toString() {
        return nome;
    }
}

.........

Uma pequena rotina de 10 jogos
public static void main(String[] args) {
        JogoGeneral jogo;
        for (int i = 0; i < 10; i++) {
            jogo = new JogoGeneral();
            System.out.print("Jogo = " + jogo);
            System.out.println(" , resultado = " +jogo.getResultado());
        }
    }
S

Ola colegas,

Desenvolvi a um tempo atras esse jogo. Caso ainda queira te mando as classes de regra.

Abraço,
Sandro

W

Voce possui este código em algum lugar?

S

Claro, mando sim. Como faz tempo que nao mexo com ele, vou dar uma procurada.

O Projeto esta no google tambem

http://code.google.com/p/jeneral-game/source/browse/#svn%2Ftrunk%2FJeneral

Criado 11 de março de 2009
Ultima resposta 24 de mar. de 2011
Respostas 9
Participantes 5