Páginas

segunda-feira, 27 de janeiro de 2014

Codecademy: Apaixone-se por códigos

Acho que já posso me considerar um apaixonado por códigos, e isso graças à um simples projeto americano que ensina de forma gratuita e aberta à qualquer um que tenha vontade de aprender. Estou falando do Codecademy. O site começou com programadores experientes com o desejo de ensinar, criando um método interativo onde qualquer um poderia passar e absorver conhecimentos sobre programação. Os próprios desenvolvedores do site já deixam "apostilas" prontas em algumas linguagens, para os iniciantes terem uma noção básica da linguagem desejada. O projeto funciona também como um fórum de discussões e um quadro-negro para HTML, CSS, JavaScript, JQuery, Python e outras linguagens que o site dá suporte.
Interface de aprendizado do Codecademy.com
Esse quadro-negro se dá através de passos que devem ser seguidos, uma espécie de tutorial. Para passar para o próximo passo você deve escrever da maneira certa o código ou um erro irá aparecer. Se estiver com muita dificuldade você pode ver a dica do autor.
O mais impressionante desse método de ensino é a interatividade, pois o usuário pode criar seu tutorial do mesmo modo que o próprio site oferece. Ganhar badges também foi uma ótima ideia por parte dos desenvolvedores, isso faz com que o usuário queira completar mais rápido e em mais quantidade os tutoriais.
Se você ainda não tem nenhuma noção de programação, Codecademy é o lugar certo, comece aprendendo à fazer seu próprio site sem usar nenhum software específico, apenas escrevendo, ganhando assim total conhecimento do método.

domingo, 26 de janeiro de 2014

Jogo: Campo Minado

Hoje irei postar um código-fonte de Campo Minado em texto. Esse código não é meu, eu aprendi ele no site Java Progressivo. Este site é muito recomendado para quem está querendo começar a aprender Java. O Campo Minado é feito utilizando 3 classes: CampoMinado, Jogo e Tabuleiro.

CampoMinada.java:


package campominado;

public class CampoMinado {

    public static void main(String[] args) {
        Jogo jogo = new Jogo();
    }
    
}

Jogo.java:


package campominado;

public class Jogo {
    private Tabuleiro board;
    boolean terminar = false;
    boolean ganhou = false;
    int[] jogada;
    int rodada=0;
    
    public Jogo(){
        board = new Tabuleiro();
        Jogar(board);
        jogada = new int[2];
    }
    
    public void Jogar(Tabuleiro board){
        do{
            rodada++;
            System.out.println("Rodada "+rodada);
            board.exibe();
            terminar = board.setPosicao();
            
            if(!terminar){
                board.abrirVizinhas();
                terminar = board.ganhou();
            }
            
        }while(!terminar);
        
        if(!board.ganhou()){
            System.out.println("Havia uma mina ! Você perdeu!");
            board.exibeMinas();
        } else {
            System.out.println("Parabéns, você deixou os 8 campos de minas livres em "+rodada+" rodadas");
            board.exibeMinas();
        }
    }
}

Tabuleiro.java:


package campominado;
import java.util.Random;
import java.util.Scanner;

public class Tabuleiro {
    private int[][] minas;
    private char[][] tabuleiro;
    private int linha, coluna;
    Random random = new Random();
    Scanner entrada = new Scanner(System.in);
    
    public Tabuleiro(){
        minas = new int[10][10];
        tabuleiro = new char[10][10];
        iniciaMinas(); // coloca 0 em todas as posições do tabuleiro de minas
        sorteiaMinas(); //coloca, aleatoriamente, 10 minas no tabuleiro de minas
        preencheDicas();//preenche o tabuleiro de minas com o número de minas vizinhas
        iniciaTabuleiro();//inicia o tabuleiro de exibição com _
        
    }
    
    public boolean ganhou(){
        int count=0;
        for(int line = 1 ; line < 9 ; line++)
            for(int column = 1 ; column < 9 ; column++)
                if(tabuleiro[line][column]=='_')
                    count++;
        if(count == 10)
            return true;
        else
            return false;                
    }
    
    public void abrirVizinhas(){
        for(int i=-1 ; i<2 ; i++)
            for(int j=-1 ; j<2 ; j++)
                if( (minas[linha+i][coluna+j] != -1) && (linha != 0 && linha != 9 && coluna != 0 && coluna != 9) ){
                    tabuleiro[linha+i][coluna+j]=Character.forDigit(minas[linha+i][coluna+j], 10);
                }
    }
    
    public int getPosicao(int linha, int coluna){
        return minas[linha][coluna];
    }
    
    public boolean setPosicao(){
            
            do{
                System.out.print("\nLinha: "); 
                linha = entrada.nextInt();
                System.out.print("Coluna: "); 
                coluna = entrada.nextInt();
                
                if( (tabuleiro[linha][coluna] != '_') && ((linha < 9 && linha > 0) && (coluna < 9 && coluna > 0)))
                    System.out.println("Esse campo já está sendo exibido");
                
                if( linha < 1 || linha > 8 || coluna < 1 || coluna > 8)
                    System.out.println("Escolha números de 1 até 8");
                
            }while((linha < 1 && linha > 8) && (coluna < 1 && coluna > 8) || (tabuleiro[linha][coluna] != '_') );
            
            if(getPosicao(linha, coluna)== -1)
                return true;
            else
                return false;
            
    }
    
    public void exibe(){
        System.out.println("\n     Linhas");
        for(int linha = 8 ; linha > 0 ; linha--){
            System.out.print("       "+linha + " ");
            
            for(int coluna = 1 ; coluna < 9 ; coluna++){
                    System.out.print("   "+ tabuleiro[linha][coluna]);
            }
                
            System.out.println();
        }
            
        System.out.println("\n            1   2   3   4   5   6   7   8");
        System.out.println("                      Colunas");
        
    }
    
    public void preencheDicas(){
        for(int line=1 ; line < 9 ; line++)
            for(int column=1 ; column < 9 ; column++){
                
                    for(int i=-1 ; i<=1 ; i++)
                        for(int j=-1 ; j<=1 ; j++)
                            if(minas[line][column] != -1)
                                if(minas[line+i][column+j] == -1)
                                    minas[line][column]++;
                
            }
            
    }
    
    public void exibeMinas(){
        for(int i=1 ; i < 9; i++)
            for(int j=1 ; j < 9 ; j++)
                if(minas[i][j] == -1)
                    tabuleiro[i][j]='*';
        
        exibe();
    }
    
    public void iniciaTabuleiro(){
        for(int i=1 ; i<minas.length ; i++)
            for(int j=1 ; j<minas.length ; j++)
                tabuleiro[i][j]= '_';
    }
    
    public void iniciaMinas(){
        for(int i=0 ; i<minas.length ; i++)
            for(int j=0 ; j<minas.length ; j++)
                minas[i][j]=0;
    }
    
    public void sorteiaMinas(){
        boolean sorteado;
        int linha, coluna;
        for(int i=0 ; i<10 ; i++){
            
            do{
                linha = random.nextInt(8) + 1;
                coluna = random.nextInt(8) + 1;
                
                if(minas[linha][coluna] == -1)
                    sorteado=true;
                else
                    sorteado = false;
            }while(sorteado);
            
            minas[linha][coluna] = -1;
        }
    }
}

Lembrando que você pode utilizar esse código com o NetBeans ou outra IDE, como o Eclipse. Acesse o site Java Progressivo que disponibilizou esse código para mim. No site há um artigo comentado sobre esse código.

terça-feira, 21 de janeiro de 2014

App: Caixa Eletrônico

O código que irei postar hoje é um aplicativo que simula um caixa eletrônico. Primeiramente ele pede seu nome e o valor inicial de depósito. Em seguida o sistema cria um número de conta para você, esse número tem até 4 digitos. Logo em seguida, com a conta criada, é exibido um menu com quatro opções: extrato, saque, deposito e sair. No extrato são exibidas todas as informações da conta, no saque pode ser efetuada uma retirada de um valor e no deposito é feito o inserimento de um valor. O código apresenta algumas falhas, como depositar ou sacar valores negativos, digitar letras ao invés de números, entre outros pequenos problemas. Esses "bugs" não foram corrigidos pois o programa foi desenvolvido exatamente para que outras pessoas pudessem achar esses erros.

O código está dividido em duas classes. A classe principal 'Caixaeletronico.java' e a classe em que estão as informações da conta 'Conta.java'. Crie essas duas classes para por os códigos a seguir:

Código da classe: Caixaeletronico.java


import java.util.Scanner;
import java.util.Random;

public class Caixa {
    
    
    public static void main(String[] args){
        // Declarando as variáveis, Scanner e Random
        String nome;
        double inicial;
        Scanner entrada = new Scanner(System.in);
        Random numero = new Random();
        int conta = 1 + numero.nextInt(9999);
    
        //Obtendo os dados iniciais do Cliente
        System.out.println("Cadastrando novo cliente.");
        System.out.print("Ente com seu nome: ");
        nome = entrada.nextLine();
        
        System.out.print("Entre com o valor inicial depositado na conta: ");
        inicial = entrada.nextDouble();
        
        //Criando a conta de um cliente
        Conta minhaConta = new Conta(nome, conta, inicial);
        minhaConta.iniciar();
    }
    
    
}

Código da classe: Conta.java




package caixaeletronico;
import java.util.Scanner;

public class Conta {
   private String nome;
   private int conta;
   private int saques;
   private double saldo;
   Scanner entrada = new Scanner(System.in);
   
   public Conta(String nome, int conta, double saldo_inicial){
       this.nome=nome;
       this.conta=conta;
       saldo=saldo_inicial;
       saques=0;
    }
   
   public void extrato(){
        System.out.println("\tEXTRATO");
        System.out.println("Nome: " + this.nome);
        System.out.println("Número da conta: " + this.conta);
        System.out.printf("Saldo atual: %.2f\n",this.saldo);
        System.out.println("Saques realizados hoje: " + this.saques + "\n");   
   }
   
   public void sacar(double valor){
       if(saldo >= valor){
           saldo -= valor;
           saques++;
           System.out.println("Sacado: "+ valor);
           System.out.println("Novo saldo: " + saldo + "\n");   
       }else{
           System.out.println("Saldo insuficiente. Faça um depósito. \n");
       }
   }

   public void depositar(double valor){
       saldo += valor;
       System.out.println("Depositado: " + valor);
       System.out.println("Novo saldo: " + saldo);
       
   }
   
   public void iniciar(){
       int opcao;
       
       do{
           exibeMenu();
           opcao = entrada.nextInt();
           escolheOpcao(opcao);
       }while(opcao != 4);
   }
   
    public void exibeMenu(){
        
        System.out.println("\t Escolha a opção desejada");
        System.out.println("1 - Consultar Extrato");
        System.out.println("2 - Sacar");
        System.out.println("3 - Depositar");
        System.out.println("4 - Sair\n");
        System.out.print("Opção: ");
    }
    
    public void escolheOpcao(int opcao){
        double valor;
        
        switch(opcao){
            
                case 1:
                    extrato();
                    break;
                
                case 2:
                    if(saques < 3){
                        System.out.println("Insira o valor do saque: ");
                        valor = entrada.nextDouble();
                        sacar(valor);
                    }else{
                        System.out.println("Limite de saques diários atingidos.");
                    }
                    break;
                
                case 3:
                    System.out.println("Insira o valor do depósito: ");
                    valor = entrada.nextDouble();
                    depositar(valor);
                    break;
                    
                case 4:
                    System.out.println("Sistema encerrado. Obrigado pela preferência.");
                    break;
                    
                default:
                    System.out.println("Opção invalida.");
                    
                    
        }
    }
   
}


Você pode utilizar esse código utilizando o NetBeans ou outra IDE que suporte Java.

Jogo: Acerte o número

Hoje irei disponibilizar um outro código-fonte de outro jogo que fiz usando o NetBeans. Esse jogo consiste em acertar um número sorteado aleatoriamente pelo computador. No meu código utilizei de 1 à 1000, mas sinta-se a vontade para trocar esse limite. Dê, também, sua sugestão de como melhorar esse código ou fazer alterações para torna-lo mais divertido.




package descubraonumero;
import java.util.Random;
import java.util.Scanner;
        
public class Descubraonumero {

    public static void main(String[] args) {
        Random geradorDeAleatorios = new Random();
        Scanner entrada = new Scanner(System.in);
        int sorteado, palpite, tentativas = 0;
        
//gera um número de 1 à 1000
        sorteado = geradorDeAleatorios.nextInt(1000) + 1;
        
        System.out.println("Acerte o número! Chute um número de 1 à 1000.");
        
        do{
//mostra o número de tentativas até agora          
            System.out.println("Palpite: ");
            palpite = entrada.nextInt();
            
//se acertar
            if(palpite == sorteado){
                System.out.println("Você acertou com " + tentativas+" tentativas!");

                break;
//se não acertar
            }else{
                System.out.println("_______________________________________________");
                tentativas++;
            }
            
//sistema para analizar se o palpite é maior ou menos que o número
            if(palpite > sorteado){
                System.out.println("O número sorteado é menor que seu palpite!");
            }else{
                System.out.println("O número sorteado é maior que seu palpite!");
            }
            
        }while(palpite != sorteado);
        
    }
    
}


Você pode utilizar esse código com o NetBeans ou outra IDE de seu gosto.

segunda-feira, 20 de janeiro de 2014

Primeiro Update e Pedra, Papel, Tesoura

Olá, hoje estou começando um blog para mostrar meus projetos e minha curva de aprendizado em programação. Há cerca de 4 meses comecei a aprender Java, HTML e CSS, mas ainda pretendo estudar C++ e outras linguagens. Meus estudos são focados em Jogos e Apps, e alguns deles que uso para estudo irei postar aqui. Hoje irei disponibilizar o código-fonte do meu primeiro jogo (em texto) que fiz em Java. Utilizei o NetBeans para escrever.



package pedrapapeltesoura;

import java.util.Scanner;

public class Pedrapapeltesoura {
    
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int resp, ponto = 0;
        int pcresp;
    
while(true){        
        System.out.println("");
        System.out.println("Pedra (1); Papel (2); Tesoura(3); Fim (0)");
        System.out.println("________________________________");
        System.out.println("Qual você escolhe?");
        resp = entrada.nextInt();
        System.out.println("");
        
        
 //se resposta não for válida
        if(resp > 3 || resp < 0){
            System.out.println("Digite uma resposta válida!");
            continue;
        }       
       

//calcula a resposta do computador        
        Math.random();
        if(Math.random() <= 0.33){
            pcresp = 1;
            System.out.println("O computador escolheu PEDRA");
        }
        else{
            if(Math.random() <= 0.67){
                pcresp = 2;
                System.out.println("O computador escolheu PAPEL");
            }
            else{
                pcresp = 3;
                System.out.println("O computador escolheu TESOURA");
            }
        }

//se pedra
        if(resp == 1){
            if(pcresp == 1){
                System.out.println("Empate.");
            }
            if(pcresp == 2){
                System.out.println("Você perdeu!");
                ponto--;
            }
            if(pcresp == 3){
                System.out.println("Você ganhou!");
                ponto++;
            }
        }
 
 //se papel
        if(resp == 2){
            if(pcresp == 1){
                System.out.println("Você ganhou!");
                ponto++;
            }
            if(pcresp == 2){
                System.out.println("Empate.");
            }
            if(pcresp == 3){
                System.out.println("Você perdeu!");
                ponto--;
            }
        }
 
//se tesoura        
        if(resp == 3){
            if(pcresp == 1){
                System.out.println("Você perdeu!");
                ponto--;
            }
            if(pcresp == 2){
                System.out.println("Você ganhou!");
                ponto++;
            }
            if(pcresp == 3){
                System.out.println("Empate.");
            }
        }        
        
        System.out.println("SUA PONTUAÇÃO: " + ponto);
        
//se quiser terminar        
        if(resp == 0){
            System.out.println("Você terminou o jogo");
            break;
        } 
        System.out.println("________________________________");
        
        }
    }
}


Você pode testar esse código usando o NetBeans ou outra IDE que suporte Java. Em breve postarei outros códigos-fonte, exercícios que eu achar interessantes e sites de ajuda para iniciantes.