Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Jogos (Games)

Como criar um Jogo da Velha em Java - Jogo completo com código fonte comentado - Versão console

Quantidade de visualizações: 5934 vezes
Faça o download do código-fonte Jogo da Velha em Java

Sobre o Jogo da Velha em Java

O Jogo da Velha, também conhecido como Tic-Tac-Toe, é um dos joguinhos mais fáceis de se programar em Java. Além disso, ele possibilita uma boa oportunidade de se entender matrizes, a estrutura switch, os laços for e while, assim como a estrutura básica presente em praticamente todos os games.

O Jogo da Velha em Java Console

Neste código fonte eu demonstro como o Jogo da Velha pode ser criado em Java usando o modo console, ou seja, em formato texto. Penso que o entendimento da lógica é mais fácil em modo console. Uma vez que você tenha aprendido todos os passos envolvidos, você poderá reproduzí-lo em modo gráfico sem muitas dificuldades.

A versão do jogo apresentado nesta dica é um jogador humano, ou seja, você, contra o computador. Não coloquei inteligência artificial nem aprendizado de máquina nos movimentos do computador. Usei apenas jogadas sorteadas. Fica como desafio você implementar jogadas inteligentes por parte do computador como forma de deixar o jogo ainda mais interessante. Por enquanto o objetivo é só o aprendizado mesmo.

Antes de continuarmos, veja uma imagem demonstrando o jogo:



Me mostra um pouco do código

Para mostrar a simplicidade do código, veja o método que registra a jogada do jogador humano:

// este método registra a jogada do jogador humano
private static void jogadaHumano(char[][] tabuleiro) {
  int jogada; // para registrar a jogada do jogador humano
	
  // repete até que a jogada seja válida
  while (true) {
    // lê a jogada do humano
    System.out.print("\nSua jogada (1 a 9): ");
    jogada = Integer.parseInt(entrada.nextLine());
    // este movimento é válido?
    if (movimentoValido(tabuleiro, jogada)){
      break;
    } 
    else{ // não é válido
      System.out.println("O número " + jogada + " não é um movimento válido.");
    }  
  }
 
  // vamos registrar esse movimento 
  registrarMovimento(tabuleiro, jogada, 'X');
}
Como posso obter este código fonte?

Os links para você baixar todas as versões deste projeto estão abaixo:

1) JOGOVELHAJC - Jogo da Velha em Java Console - NetBeans IDE - Faça o Download.

Não se esqueça: Uma boa forma de estudar o código é fazendo pequenas alterações e rodando para ver os resultados. Outra opção é começar um projeto Java do zero e ir adicionando trechos do código fonte para melhor entendimento de suas partes.

Link para compartilhar na Internet ou com seus amigos:

Java ::: Fundamentos da Linguagem ::: Tipos de Dados

Como usar null em Java

Quantidade de visualizações: 31488 vezes
O tipo de dados null é um tipo (ou valor) especial que indica que uma referência não está apontando para nenhum objeto, ou seja, aponta para uma posição de memória nula. Este tipo pode ser atribuído (ou testado) apenas a referências. Seu uso não é permitido com primitivos.

Veja um trecho de código no qual definimos que uma variável do tipo String aponta para um objeto nulo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Estudos{
  public static void main(String args[]){
    String nome = null;  
......


Este código compila normalmente. Porém, ao tentarmos executá-lo, temos uma exceção de tempo de execução NullPointerException:

Exception in thread "main" 
java.lang.NullPointerException
  at Estudos.main(Estudos.java:5)


Isso aconteceu porque estamos tentando executar um método de um objeto que não existe.

Uma técnica muito valiosa é testar se uma referência não está apontando para um objeto nulo. Veja como isso é feito:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Estudos{
  public static void main(String args[]){
    String nome = null;  

    if(nome != null)
      System.out.println(nome.length());    
......


Tenha em mente que, quando uma referência recebe o valor null, o objeto para o qual ela apontava fica imediatamente disponível para o coletor de lixo (Garbagge Colector), ou seja, a memória ocupada pelo objeto pode ser liberada a qualquer momento.

Veja agora o que acontece quando tentamos atribuir o valor null a um primitivo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Estudos{
  public static void main(String args[]){
    int valor = null;     
......


Eis a mensagem de erro de compilação:

Estudos.java:3: incompatible types
found   : <nulltype>
required: int
 int valor = null;
             ^
1 error



Java ::: Pacote java.lang ::: String

Como retornar os caracteres de uma string como um vetor de char usando o método getChars() da classe String do Java

Quantidade de visualizações: 8095 vezes
O método getChars() da classe String pode ser usado quando queremos retornar todos ou parte dos caracteres de uma string como uma matriz de char. Veja sua assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public void getChars(int srcBegin, int srcEnd,
......


O parâmetro srcBegin indica o índice do primeiro caractere a ser copiado. O parâmetro srcEnd indica o índice APÓS o último caractere a ser copiado. O parâmetro dst é uma matriz de char para a qual os caracteres serão copiados e dstBegin indica o offset (ponto inicial) da matriz a ser preenchida.

Veja um trecho de código no qual copiamos os 5 primeiros caracteres de uma string para uma matriz de char chamada letras:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Main {
  public static void main(String[] args) {
    // vamos declarar e inicializar uma string
    String frase = "Cuiabá é muito quente";

    // declara uma matriz de 5 chars
    char letras[] = new char[5];

    // vamos copiar os 5 primeiros caracteres da frase anterior
......


Ao executarmos este código teremos o seguinte resultado:

C u i a b

O método getChars() pode atirar uma exceção do tipo IndexOutOfBoundsException se valores inválidos forem fornecidos aos seus parâmetros.


Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear

Como calcular a transposta de uma matriz em Java - Java para Geometria Analítica e Álgebra Linear

Quantidade de visualizações: 2922 vezes
A matriz transposta de uma matriz A é a matriz AT. Tal matriz é obtida quando copiamos os elementos da matriz A para uma outra matriz (ou para ela mesma) e trocamos de posição as linhas e colunas. Dessa forma, a primeira linha da matriz A se transforma na primeira coluna da matriz transposta, a segunda linha da matriz A se transforma na segunda coluna da matriz transposta e assim por diante.

Em termos de notação, podemos dizer, de forma algébrica, que:

ATji = Aij

Onde i representa as linhas e j representa as colunas, tanto na matriz original quanto na matriz transposta.

É importante estar atento à quantidade de linhas e colunas na matriz original e na matriz transposta equivalente. Assim, se a matriz original for 3x2, a matriz transposta será 2x3.

Antes de vermos o código Java, dê uma olhada na seguinte matriz de duas linhas e três colunas:

\[A = \left[\begin{matrix} 3 & 5 & 7 \\ 1 & 2 & 9 \end{matrix}\right] \]

Sua matriz transposta correspondente é:

\[A^T = \left[\begin{matrix} 3 & 1 \\ 5 & 2 \\ 7 & 9 \end{matrix}\right] \]

E agora veja o código Java que declara uma matriz 2x3 e gera a matriz transposta 3x2:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package arquivodecodigos;

public class Estudos{
  public static void main(String args[]){
    // vamos declarar e construir uma matrix
    // 2x3 (duas linhas e três colunas
    int matriz[][] = {{3, 5, 7}, {1, 2, 9}};
    
    // vamos exibir os valores da matriz
    System.out.println("Elementos da matriz:");
    for(int i = 0; i < matriz.length; i++){
      for(int j = 0; j < matriz[0].length; j++){
        System.out.printf("%5d  ", matriz[i][j]);
      }
      System.out.println();
    }
    
    // como temos uma matriz 2x3, a transposta deverá ser
    // 3x2, ou seja, três linhas e duas colunas
    int linhas = matriz.length; // linhas da matriz original
......


Ao executar este código Java nós teremos o seguinte resultado:

Elementos da matriz:
    3      5      7  
    1      2      9  
Elementos da matriz transposta:
    3      1  
    5      2  
    7      9  



Java ::: Pacote java.lang ::: String

Como verificar se uma string Java contém uma determinada sequencia de caracteres (ou substring) usando o método contains()

Quantidade de visualizações: 11443 vezes
Em algumas situações precisamos verificar se uma sequencia de caracteres ou substring está contida em uma string. Para isso podemos usar o método contains() da classe String. Veja sua assinatura:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public boolean contains(CharSequence s)
......


Note que o método recebe um argumento do tipo CharSequence, que é uma interface implementada pelas classes CharBuffer, Segment, String, StringBuffer e StringBuilder. O método retorna true se a sequencia de caracteres for encontrada e false em caso contrário.

Veja um trecho de código no qual usamos este método para verificar se uma palavra está contida em uma frase:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Main {
  public static void main(String[] args) {
    // vamos declarar uma string
    String frase = "Gosto muito de Java e PHP";
    
    // vamos verificar se a string contém a palavra "Java"
    if(frase.contains("Java")){
......


Este método pode atirar uma exceção do tipo NullPointerException se o argumento fornecido for null.


Java ::: Dicas & Truques ::: Programação Orientada a Objetos

Como criar herança em Java usando extends - Programação orientada a objetos em Java

Quantidade de visualizações: 28896 vezes
Quando estamos projetando as classes que farão parte de um sistema, é aconselhável ter em mente um conceito muito importante da programação orientada a objetos: a herança.

O que um aluno, um professor e um funcionário possuem em comum? Todos eles são pessoas e, portanto, compartilham alguns dados comuns. Todos têm nome, idade, endereço, etc. E, o que diferencia um aluno de uma outra pessoa qualquer? Um aluno possui uma matrícula; Um funcionário possui um código de funcionário, data de admissão, salário, etc; Um professor possui um código de professor e informações relacionadas à sua formação.

É aqui que a herança se torna uma ferramenta de grande utilidade. Podemos criar uma classe Pessoa, que possui todos os atributos e métodos comuns a todas as pessoas e herdar estes atributos e métodos em classes mais específicas, ou seja, a herança parte do geral para o mais específico. Comece criando uma classe Pessoa (Pessoa.java) como mostrado no código a seguir:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Pessoa{ 
  public String nome;    
......


Esta classe possui os atributos nome e idade. Estes atributos são comuns a todas as pessoas. Veja agora como podemos criar uma classe Aluno que herda estes atributos da classe Pessoa e inclui seu próprio atributo, a saber, seu número de matrícula. Eis o código:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Aluno extends Pessoa{ 
......


Observe que, em Java, a palavra-chave usada para indicar herança é extends. A classe Aluno agora possui três atributos: nome, idade e matricula. Veja um aplicativo demonstrando este relacionamento:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

public class Estudos{ 
  public static void main(String args[]){ 
    // cria um objeto da classe Aluno
    Aluno aluno = new Aluno();
 
    aluno.nome = "Osmar J. Silva";
    aluno.idade = 36;
    aluno.matricula = "AC33-65";
......


Ao executar este código nós teremos o seguinte resultado:

Nome: Osmar J. Silva
Idade: 36
Matrícula: AC33-65

A herança nos fornece um grande benefício. Ao concentrarmos características comuns em uma classe e derivar as classes mais específicas a partir desta, nós estamos preparados para a adição de novas funcionalidades ao sistema. Se mais adiante uma nova propriedade comum tiver que ser adicionada, não precisaremos efetuar alterações em todas as classes. Basta alterar a superclasse e pronto. As classes derivadas serão automaticamente atualizadas.

Esta dica foi testada no Java 8.


Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

Quem Somos

Osmar J. Silva
Programador Freelancer
WhatsApp +55 (062) 98553-6711

Goiânia-GO
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Civil pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 20 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
José de Angelis
Programador Freelancer
WhatsApp +55 (062) 98243-1195

Goiânia-GO
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais


© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 42 usuários muito felizes estudando em nosso site.