Jogo da Forca Tutorial Pong Tutorial SQLite
Mostrando postagens com marcador diversão. Mostrar todas as postagens

Tutorial Forca #6 - Botão Jogador 2

Antes de fazer funcionar o botão do Jogador 2, gostaria de compartilhar com vocês algumas alterações que eu fiz.
Ao fazer alguns testes, notei que o nome do aplicativo estava errado, aí alterei lá no arquivo strings.xml, dentro da pasta values.
Também alterei o local de instalação do aplicativo, adicionando a seguinte linha ao cabeçalho do AndroidManifest
android:installLocation="auto"
E agora, dando continuidade à série, vamos criar a ação que permitirá que o jogo seja jogado em dois.
Como assim? Uma pessoa digita a palavra a ser adivinhada, e a outra tenta adivinhar!
Para isso, vamos alterar o arquivo MainActivity, no método onClick, que ficará assim:
public void onClick(View v) {
    Intent i = new Intent(MainActivity.this, GameActivity.class);
    switch (v.getId()) {
    case R.id.bStart1:
        i.putExtra("tipo", "jogador1");
        startActivity(i);
        break;
    case R.id.bStart2:
        i.putExtra("tipo", "jogador2");
        startActivity(i);
        break;
    case R.id.bSair:
        finish();
    }
}
Bom, agora que passamos a string "tipo" para GameActivity precisamos declarar uma string chamada tipoJogo junto com as outras strings e recuperar o valor passado para a nossa activity adicionando a seguinte linha no nosso método onCreate
tipoJogo = getIntent().getExtras().getString("tipo");
Lembrando que essa linha deve ser colocada antes da chamada do método que inicia o jogo.
Agora vamos até o método iniciarJogo() e vamos modifica-lo.
public void iniciarJogo() {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    if (tipoJogo.equals("jogador1")) {
        palavraSecreta = palavras.sorteio();
        procedimentosInicio();
    } else {
        final EditText input = new EditText(this);
        dialogBuilder.setTitle("Palavra Secreta")
        .setMessage("Digite uma palavra para seu adversário.")
        .setView(input)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                palavraSecreta = input.getText().toString().toUpperCase();
                procedimentosInicio();
            }
        })
        .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                finish();
            }
        })
        .create().show();
    }
}

private void procedimentosInicio() {
    nTentativas = 6;
    tracos = "";
    letra = ' ';
    for (int x = 0; x < palavraSecreta.length(); x++) {
        if (palavraSecreta.charAt(x) == '-') {
            tracos += " - ";
        } else if (palavraSecreta.charAt(x) == ' ') {
            tracos += "   ";
        } else {
            tracos += " _ ";
        }
    }

    habilitarBotoes();
    tvPalavra.setText(tracos);
    forca.setImageResource(R.drawable.forca_6);
} 
Fazendo isso, deve funcionar já.
Caso eu tenha esquecido de mencionar alguma alteração, clique aqui para conferir todas as alterações que eu fiz no projeto. Até o próximo post pessoal!

Tutorial Forca #5 - Fazendo o jogo funcionar

Boa tarde pessoal!
Para começar a fazer o jogo funcionar, vamos implementar o método OnClickListener à nossa activity
public class GameActivity extends Activity implements OnClickListener {
Ao fazer isso, será preciso criar o seguinte método:
public void onClick(View v) {

}
Vamos declarar os objetos que tem no layout.
TextView tvPalavra;
ImageView forca;
Button bA, bB, bC, bD, bE, bF, bG, bH, bI, bJ, bK, bL, bM,
       bN, bO, bP, bQ, bR, bS, bT, bU, bV, bW, bX, bY, bZ;
E vamos criar um método para instancia-los.
private void iniciarObjetos() {
    tvPalavra = (TextView) findViewById(R.id.tvPalavra);
    forca = (ImageView) findViewById(R.id.ivForca);

    bA = (Button) findViewById(R.id.bA);
    bB = (Button) findViewById(R.id.bB);
    bC = (Button) findViewById(R.id.bC);
    bD = (Button) findViewById(R.id.bD);
    bE = (Button) findViewById(R.id.bE);
    bF = (Button) findViewById(R.id.bF);
    bG = (Button) findViewById(R.id.bG);
    bH = (Button) findViewById(R.id.bH);
    bI = (Button) findViewById(R.id.bI);
    bJ = (Button) findViewById(R.id.bJ);
    bK = (Button) findViewById(R.id.bK);
    bL = (Button) findViewById(R.id.bL);
    bM = (Button) findViewById(R.id.bM);
    bN = (Button) findViewById(R.id.bN);
    bO = (Button) findViewById(R.id.bO);
    bP = (Button) findViewById(R.id.bP);
    bQ = (Button) findViewById(R.id.bQ);
    bR = (Button) findViewById(R.id.bR);
    bS = (Button) findViewById(R.id.bS);
    bT = (Button) findViewById(R.id.bT);
    bU = (Button) findViewById(R.id.bU);
    bV = (Button) findViewById(R.id.bV);
    bW = (Button) findViewById(R.id.bW);
    bX = (Button) findViewById(R.id.bX);
    bY = (Button) findViewById(R.id.bY);
    bZ = (Button) findViewById(R.id.bZ);
    bA.setOnClickListener(this);
    bB.setOnClickListener(this);
    bC.setOnClickListener(this);
    bD.setOnClickListener(this);
    bE.setOnClickListener(this);
    bF.setOnClickListener(this);
    bG.setOnClickListener(this);
    bH.setOnClickListener(this);
    bI.setOnClickListener(this);
    bJ.setOnClickListener(this);
    bK.setOnClickListener(this);
    bL.setOnClickListener(this);
    bM.setOnClickListener(this);
    bN.setOnClickListener(this);
    bO.setOnClickListener(this);
    bP.setOnClickListener(this);
    bQ.setOnClickListener(this);
    bR.setOnClickListener(this);
    bS.setOnClickListener(this);
    bT.setOnClickListener(this);
    bU.setOnClickListener(this);
    bV.setOnClickListener(this);
    bW.setOnClickListener(this);
    bX.setOnClickListener(this);
    bY.setOnClickListener(this);
    bZ.setOnClickListener(this);
}
Vamos declarar algumas variáveis que utilizaremos ao longo das próximas funções e instanciar a classe Palavras:
Palavras palavras = new Palavras();

private String palavraSecreta, tracos;
private int nTentativas;
private char letra;
Bom, agora precisamos identificar o click de cada botão no método onClick, e para isso vou criar um método chamado verificarClick(View v) e chamá-lo dentro do método onClick
public class onClick(View v) {
    verificarClick(v);
}

private void verificarClick(View v) {
    switch (v.getId()) {
    case R.id.bA:
        bA.setEnabled(false); letra = 'A'; break;
    case R.id.bB:
        bB.setEnabled(false); letra = 'B'; break;
    case R.id.bC:
        bC.setEnabled(false); letra = 'C'; break;
    case R.id.bD:
        bD.setEnabled(false); letra = 'D'; break;
    case R.id.bE:
        bE.setEnabled(false); letra = 'E'; break;
    case R.id.bF:
        bF.setEnabled(false); letra = 'F'; break;
    case R.id.bG:
        bG.setEnabled(false); letra = 'G'; break;
    case R.id.bH:
        bH.setEnabled(false); letra = 'H'; break;
    case R.id.bI:
        bI.setEnabled(false); letra = 'I'; break;
    case R.id.bJ:
        bJ.setEnabled(false); letra = 'J'; break;
    case R.id.bK:
        bK.setEnabled(false); letra = 'K'; break;
    case R.id.bL:
        bL.setEnabled(false); letra = 'L'; break;
    case R.id.bM:
        bM.setEnabled(false); letra = 'M'; break;
    case R.id.bN:
        bN.setEnabled(false); letra = 'N'; break;
    case R.id.bO:
        bO.setEnabled(false); letra = 'O'; break;
    case R.id.bP:
        bP.setEnabled(false); letra = 'P'; break;
    case R.id.bQ:
        bQ.setEnabled(false); letra = 'Q'; break;
    case R.id.bR:
        bR.setEnabled(false); letra = 'R'; break;
    case R.id.bS:
        bS.setEnabled(false); letra = 'S'; break;
    case R.id.bT:
        bT.setEnabled(false); letra = 'T'; break;
    case R.id.bU:
        bU.setEnabled(false); letra = 'U'; break;
    case R.id.bV:
        bV.setEnabled(false); letra = 'V'; break;
    case R.id.bW:
        bW.setEnabled(false); letra = 'W'; break;
    case R.id.bX:
        bX.setEnabled(false); letra = 'X'; break;
    case R.id.bY:
        bY.setEnabled(false); letra = 'Y'; break;
    case R.id.bZ:
        bZ.setEnabled(false); letra = 'Z'; break;
    }
}
Vamos criar mais dois métodos para auxiliar no funcionamento do jogo
private void habilitarBotoes() {
    bA.setEnabled(true);
    bB.setEnabled(true);
    bC.setEnabled(true);
    bD.setEnabled(true);
    bE.setEnabled(true);
    bF.setEnabled(true);
    bG.setEnabled(true);
    bH.setEnabled(true);
    bI.setEnabled(true);
    bJ.setEnabled(true);
    bK.setEnabled(true);
    bL.setEnabled(true);
    bM.setEnabled(true);
    bN.setEnabled(true);
    bO.setEnabled(true);
    bP.setEnabled(true);
    bQ.setEnabled(true);
    bR.setEnabled(true);
    bS.setEnabled(true);
    bT.setEnabled(true);
    bU.setEnabled(true);
    bV.setEnabled(true);
    bW.setEnabled(true);
    bX.setEnabled(true);
    bY.setEnabled(true);
    bZ.setEnabled(true);
}

private void desabilitarBotoes() {
    bA.setEnabled(false);
    bB.setEnabled(false);
    bC.setEnabled(false);
    bD.setEnabled(false);
    bE.setEnabled(false);
    bF.setEnabled(false);
    bG.setEnabled(false);
    bH.setEnabled(false);
    bI.setEnabled(false);
    bJ.setEnabled(false);
    bK.setEnabled(false);
    bL.setEnabled(false);
    bM.setEnabled(false);
    bN.setEnabled(false);
    bO.setEnabled(false);
    bP.setEnabled(false);
    bQ.setEnabled(false);
    bR.setEnabled(false);
    bS.setEnabled(false);
    bT.setEnabled(false);
    bU.setEnabled(false);
    bV.setEnabled(false);
    bW.setEnabled(false);
    bX.setEnabled(false);
    bY.setEnabled(false);
    bZ.setEnabled(false);
}
Precisamos criar também um método para iniciar o jogo, que também servirá para reiniciá-lo
private void iniciarJogo() {
    palavraSecreta = palavras.sorteio();
    nTentativas = 6;
    tracos = "";
    letra = ' ';
    for (int x = 0; x < palavraSecreta.length(); x++) {
        if (palavraSecreta.charAt(x) == '-') {
            tracos += " - ";
        } else if (palavraSecreta.charAt(x) == ' ') {
            tracos += "   ";
        } else {
            tracos += " _ ";
        }
    }

    habilitarBotoes();
    tvPalavra.setText(tracos);
    forca.setImageResource(R.drawable.forca_6);
}
O que a função acima faz? Ela "lê" a palavra que foi sorteada e substitui cada letra por um " _ " (underline), como forma de esconder a palavra que foi sorteada.
E para que ela tenha efeito, é preciso chamá-la no método onCreate
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    iniciarObjetos();
    iniciarJogo();
}
Calma... Estamos quase no final já...
Vamos criar um método para verificar a letra escolhida está certa
private boolean verificarAcerto() {
    boolean acerto = false;
    for (int x = 0; x < palavraSecreta.length(); x++) {
        char tmp = ' ';
        char vogal = palavraSecreta.charAt(x);
        if (vogal == 'Á') tmp = 'A';
        if (vogal == 'Ã') tmp = 'A';
        if (vogal == 'À') tmp = 'A';
        if (vogal == 'É') tmp = 'E';
        if (vogal == 'Í') tmp = 'I';
        if (vogal == 'Ó') tmp = 'O';
        if (vogal == 'Ô') tmp = 'O';
        if (vogal == 'Õ') tmp = 'O';
        if (vogal == 'Ú') tmp = 'U';
        if (vogal == 'Ç') tmp = 'C';
        if (vogal == letra || tmp == letra) {
            tracos = tracos.substring(0, 3 * x + 1) + vogal + tracos.substring(3 * x + 2);
            acerto = true;
        }
    }
    tvPalavra.setText(tracos);

    return acerto;
}
Antes que você pergunte o motivo de tantos ifs... Eles estão ali, para caso exista alguma palavra com algum caracter especial (acento por exemplo), ele seja substituído pelo seu equivalente não especial (ex.: Á = A)
E agora, para funcionar mesmo, basta adicionar o seguinte código ao método onClick
public void onClick(View v) {
    verificarClick(v);

    boolean acerto = verificarAcerto();

    if (!acerto) {
        nTentativas--;
        switch (nTentativas) {
        case 5:
            forca.setImageResource(R.drawable.forca_5);
            break;
        case 4:
            forca.setImageResource(R.drawable.forca_4);
            break;
        case 3:
            forca.setImageResource(R.drawable.forca_3);
            break;
        case 2:
            forca.setImageResource(R.drawable.forca_2);
            break;
        case 1:
            forca.setImageResource(R.drawable.forca_1);
            break;
        case 0:
            forca.setImageResource(R.drawable.forca_0);
            desabilitarBotoes();
            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(GameActivity.this);
            dialogBuilder.setTitle("Perdeu!")
            .setMessage("Deseja jogar novamente?")
            .setCancelable(false)
            .setPositiveButton("Sim", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface arg0, int arg1) {
                    iniciarJogo();
                }
            })
            .setNegativeButton("Não", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface arg0, int arg1) {
                    finish();
                }
            });
            AlertDialog dialog = dialogBuilder.create();
            dialog.show();
        }
    }

    if (Replace.replaceAll(tracos, " ", "").equalsIgnoreCase(palavraSecreta)) {
        desabilitarBotoes();
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setTitle("Parabéns!")
        .setMessage("Deseja jogar novamente?")
        .setCancelable(false)
        .setPositiveButton("Sim", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                iniciarJogo();
            }
        })
        .setNegativeButton("Não", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                finish();
            }
        });
        dialogBuilder.create().show();
    }
}
Por enquanto é isso... o jogo está funcionando.
Nos próximos post o que vamos fazer é ir aprimorando esse jogo, ir melhorando ele.
Caso alguém tenha alguma sugestão, é só postar aí!

Ah, para ver as alterações deste post você pode clicar aqui.

Tutorial Forca #4 - Classes auxiliares

Boa tarde pessoal!!

Voltando de um final de semana com dia das mães, vamos recomeçar devagar...
Hoje vamos criar duas classes que vão auxiliar nosso app. Para isso, vamos criar um pacote utils, para deixar essas classes separadas das nossas activitys.
Dentro desse pacote, vamos criar a classe Palavras que, por enquanto, vai conter as palavras que serão sorteadas no jogo.
package br.com.blogspot.androidandrekunde.forcalite.utils;

import java.util.Random;

public class Palavras {

    private String[] palavras = new String[] {"AVIÃO", "AERONAVE", "AUTOMÓVEL",
            "MOTOCICLETA", "BICICLETA", "IATE", "NAVIO", "TERRA", "MERCÚRIO",
            "PLUTÃO", "MARTE", "JUPTER", "NETUNO", "ELEFANTE", "ESCORPIÃO",
            "RINOCERONTE", "DINOSSAURO", "REFRIGERADOR", "ÁFRICA", "BRASIL",
            "TELEVISOR", "POLTRONA", "SECADORA", "ESCORREDOR", "LIQUIDIFICADOR",
            "EUROPA", "AMSTERDÃ", "ESTADOS UNIDOS", "GRÉCIA", "ARGENTINA",
            "VENEZUELA", "BOTAFOGO", "SÃO PAULO", "FLAMENGO", "PALMEIRAS",
            "FLUMINENSE", "AMOR", "INTELECTUAL", "SÁBIO", "CULTURA", "SABEDORIA",
            "TUCANO", "BEIJA-FLOR", "ZEBRA", "CRUZEIRO", "COMPUTADOR", "FACULDADE",
            "PIPOCA", "MACARRÃO", "FEIJOADA", "SABÃO EM PÓ", "LAVANDERIA",
            "COZINHA", "CHURRASCO", "PARANAENSE", "MINEIRO", "SANTISTA", "GAÚCHO",
            "CATARINENSE", "AFRICANO", "BRASILEIRO", "AMERICANO", "CARTEIRO",
            "LIXEIRO", "PROGRAMADOR", "LUMINÁRIA", "LUTADOR", "COZINHEIRO",
            "VENDEDOR", "FLORICULTURA", "JAPÃO", "ARÁBIA SAUDITA", "EQUADOR",
            "MÉXICO", "PORTUGUAL", "ALEMANHA", "PROFESSOR", "CHAVEIRO", "FAMÍLIA",
            "DOCUMENTÁRIO", "DOCUMENTOS", "FAMILIARES", "LANCHONETE"};

    public Palavras() {
    }

    public String sorteio() {
        String palavraSorteada = palavras[(int)(random()*palavras.length)];

        return palavraSorteada;
    }

    public static double random() {
        Random r = new Random();

        return r.nextDouble();
    }
}

Vamos criar também uma classe chamada Replace, que será responsável por verificar se a palavra está completa e certa.
package br.com.blogspot.androidandrekunde.forca.utils;

public class Replace {

    public static String replaceAll(String source, String pattern, String replacement) {
        if (source == null)
            return "";

        StringBuffer sb = new StringBuffer();

        int idx = 0;

        String palavra = source;

        while ((idx = palavra.indexOf(pattern, idx)) != -1) {

            sb.append(palavra.substring(0, idx));
            sb.append(replacement);
            sb.append(palavra.substring(idx + pattern.length()));

            palavra = sb.toString();
            sb.delete(0, sb.length());

            idx += replacement.length();
        }

        return palavra;
    }
}
Bom, por hoje seria só isso... Amanhã pretendo começar a fazer funcionar toda essa lógica.
Espero que estejam gostando da série e até amanhã.
Ah... e para quem quiser baixar as alterações do projeto, clique aqui.

Tutorial Forca #3 - Tela inicial e ação dos botões

Bom pessoal, dando continuidade ao tutorial, vamos fazer agora a tela inicial e a ligação entre as telas, para vocês já irem vendo o app funcionar.
Primeiro vamos alterar a tela inicial (activity_main.xml), deixando-a conforme segue abaixo:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <Button
        android:id="@+id/bSair"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp"
        android:layout_marginLeft="85dp"
        android:layout_marginRight="85dp"
        android:text="Sair" />
    <Button
        android:id="@+id/bStart2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/bSair"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:text="2 Jogadores" />
    <Button
        android:id="@+id/bStart1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/bStart2"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:text="1 Jogador" />
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/bStart1"
        android:layout_margin="30dp"
        android:src="@drawable/forca_0" />
    <ImageView
        android:id="@+id/ivConfig"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="20dp"
        android:layout_marginBottom="20dp"
        android:src="@drawable/config" />
</RelativeLayout>

Já fiz a adição de algumas imagens a mais que serão utilizadas mais para frente. Elas podem ser baixadas aqui e colocadas todas naquela pasta res/drawable criada no post anterior.
A tela deve ficar mais ou menos assim:


Vamos alterar a nossa activity principal agora (MainActivity) retirando o trecho que cria o menu, que não será necessário para nós e adicionando as ações dos botões que criamos, deixando o arquivo assim:

package br.com.blogspot.androidandrekunde.forcalite;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bStart1 = (Button) findViewById(R.id.bStart1);
        Button bStart2 = (Button) findViewById(R.id.bStart2);
        Button bSair   = (Button) findViewById(R.id.bSair);
        bStart1.setOnClickListener(this);
        bStart2.setOnClickListener(this);
        bSair.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bStart1:
            Intent i = new Intent(MainActivity.this, GameActivity.class);
            startActivity(i);
            break;
        case R.id.bStart2:
            // Vamos apenas "mapear" este click por enquanto
            Toast.makeText(getApplicationContext(), "2 Jogadores", Toast.LENGTH_SHORT).show();
            break;
        case R.id.bSair:
            finish();
        }
    }
}
Logo no começo da Activity, eu implementei o método OnClickListener, pois acho que fica um pouco mais fácil de lidar com as ações dos botões.
Com a ação do botão para iniciar o jogo implementada, precisamos criar a classe GameActivity que é onde o jogo rodará.
Vou apenas criar a classe nesta etapa, e na próxima vou implementar as ações dela. Ela vai ficar mais ou menos assim:
package br.com.blogspot.androidandrekunde.forcalite;

import android.app.Activity;
import android.os.Bundle;

public class GameActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
    }
}
Depois disso, basta apenas declará-la no AndroidManifest e é para estar mostrando as duas telas já.
<activity android:name=".GameActivity" />
Para quem quiser baixar o projeto todo, acesse aqui.
 Até a próxima pessoal!!
Ah... se tiverem alguma dúvida/sugestão é só postar aí! Valeu!

Tutorial Forca #2 - Tela do jogo

Boa tarde pessoal!

Para dar continuidade neste tutorial, vamos fazer hoje a tela do jogo. Vamos pular a tela de abertura e vamos direto criar a tela principal do jogo.
Vamos criar um arquivo na pasta res/layout chamado activity_game.xml, com o seguinte conteúdo:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/ivForca"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:src="@drawable/forca_6" />
    <LinearLayout
        android:id="@+id/lBotoes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_alignParentBottom="true" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <Button
                style="@style/letras"
                android:id="@+id/bA"
                android:text="A" />
            <Button
                style="@style/letras"
                android:id="@+id/bB"
                android:text="B" />
            <Button
                style="@style/letras"
                android:id="@+id/bC"
                android:text="C" />
            <Button
                style="@style/letras"
                android:id="@+id/bD"
                android:text="D" />
            <Button
                style="@style/letras"
                android:id="@+id/bE"
                android:text="E" />
            <Button
                style="@style/letras"
                android:id="@+id/bF"
                android:text="F" />
            <Button
                style="@style/letras"
                android:id="@+id/bG"
                android:text="G" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <Button
                style="@style/letras"
                android:id="@+id/bH"
                android:text="H" />
            <Button
                style="@style/letras"
                android:id="@+id/bI"
                android:text="I" />
            <Button
                style="@style/letras"
                android:id="@+id/bJ"
                android:text="J" />
            <Button
                style="@style/letras"
                android:id="@+id/bK"
                android:text="K" />
            <Button
                style="@style/letras"
                android:id="@+id/bL"
                android:text="L" />
            <Button
                style="@style/letras"
                android:id="@+id/bM"
                android:text="M" />
            <Button
                style="@style/letras"
                android:id="@+id/bN"
                android:text="N" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <Button
                style="@style/letras"
                android:id="@+id/bO"
                android:text="O" />
            <Button
                style="@style/letras"
                android:id="@+id/bP"
                android:text="P" />
            <Button
                style="@style/letras"
                android:id="@+id/bQ"
                android:text="Q" />
            <Button
                style="@style/letras"
                android:id="@+id/bR"
                android:text="R" />
            <Button
                style="@style/letras"
                android:id="@+id/bS"
                android:text="S" />
            <Button
                style="@style/letras"
                android:id="@+id/bT"
                android:text="T" />
            <Button
                style="@style/letras"
                android:id="@+id/bU"
                android:text="U" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <Button
                style="@style/letras"
                android:id="@+id/bV"
                android:text="V" />
            <Button
                style="@style/letras"
                android:id="@+id/bW"
                android:text="W" />
            <Button
                style="@style/letras"
                android:id="@+id/bX"
                android:text="X" />
            <Button
                style="@style/letras"
                android:id="@+id/bY"
                android:text="Y" />
            <Button
                style="@style/letras"
                android:id="@+id/bZ"
                android:text="Z" />
        </LinearLayout>
    </LinearLayout>
    <TextView
        android:id="@+id/tvPalavra"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/ivForca"
        android:layout_above="@id/lBotoes"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="PALAVRA SECRETA" />
</RelativeLayout>

Como vocês puderam ver na criação dos botões, ao invés de sempre colocar o tamanho eu transferi essas informações para o arquivo styles.xml, adicionando o seguinte cógido:
<style name="letras" >
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">1</item>
</style>

Bom... layout do game feito. Falta apenas a imagem que eu utilizei.
Para esta imagem, eu criei uma outra pasta, chamada drawable. Deixei para lidar com as diferenças de tela mais pra frente.
É uma imagem bem simples, mas para começar está valendo. (imagem)

Veja aqui as alterações de hoje no projeto.
E para quem quiser fazer o download do projeto todo até agora, aqui.

Tutorial Forca #1 - Criação do projeto android

Bom dia pessoal!

Para começar, o começo, vamos criar o projeto:

File > New > Other > Android Application Project
Preencha os campos da forma que quiser, ou copie como está aí.
Depois, Next, Next, Finish.





Bom, como estou com a vida um pouco corrida, por enquanto é só (infelizmente).
Mas espero poder postar a continuação o quanto antes.
Para baixar o projeto, acesse no bitbucket.
Copyright © 2013 Aprendendo Android and Blogger Themes.