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
E para que ela tenha efeito, é preciso chamá-la no método onCreate
Vamos criar um método para verificar a letra escolhida está certa
E agora, para funcionar mesmo, basta adicionar o seguinte código ao método onClick
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.
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.
Show de bola seu trabalho, to aprendendo bastante seguindo os seus posts ! !
ResponderExcluirMuito obrigado!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirVc poderia botar o nome de cada arquivo ou local dentro do código que tem que por cada bloco de códigos ( descrição de onde botar o que ) antes de cada imagem ia me ajudar mt a identificar onde fica
ResponderExcluir