Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

playerVfox

Trabalhando no jogo Batalha Naval

Mensagens Recomendadas

playerVfox

Oi pessoal tudo bem? Estou fazendo um jogo de batalha naval mas agora fiquei engatado no projecto:

Gostaria, a partir de um arrasto de uma label(barco) para um tabuleiro(gerado com ciclo "for" feito em botões), quero que a imagem dos botões mude consoante o sítio onde eu deixar a label para assim formar um barco com a imagem nos botões. Estou utilizando as funções de “mouse” (“mousePressed”, “mouseDragged”, “mouseReleased”). Não sei como fazer isso, mas talvez tenha a ver com as coordenadas onde

deixamos a label, ou a posição onde o rato deixou a label.

Têm alguma forma de fazer isso? Se tiverem alguma dúvida no problema

posso anexar o projecto.

Cumprimentos para todos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

A forma como fazes isso depende um pouco dos componentes que usas. Não sei se usar botões é mais simples ou mais complicado que usar, por exemplo, JTable. Sem saber bem como tens o código é complicado dar sugestões mas dá uma vista de olhos ao tutorial de drag'n drop da Sun, http://java.sun.com/docs/books/tutorial/uiswing/dnd/index.html e a este blog que tem exemplos de uso "melhorado", http://www.jroller.com/gfx/page/Archives

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
playerVfox

Boas pessoal, tudo bem?

Ainda no mesmo projecto, estou tentando fazer a parte jogador contra

cpu, mas não consigo distribuir os barcos do cpu pela matriz lógica

sem que os barcos fiquem uns em cima dos outros. Podem-me indicar que

fazer com este código para que os barcos fiquem espalhados

aleatoriamente sem estarem uns por cima dos outros?

import java.util.Random;

public class MatrizCpu {
     public static int[ ][ ] matrizJogador2 = new int[10][10];

    public static void main(String args[ ]) {
        posicaoNavios();
        imprimeTabuleiro();
    }

public static void posicaoNavios() {
        int minas = 2;
        int submarino = 3;
        int fragata = 6;
        int batalha = 4;
        int avioes = 5;
        Random rnd = new Random();
        int x, y;

        do {
            x = rnd.nextInt(9);
            y = rnd.nextInt(9);
        } while (matrizJogador2[y] != 0);
        //Caça-Minas
        if (((x + 1) <= 9) && (minas == 2)) { //Posicionar o navio
Minas no tabuleiro cpu
            matrizJogador2[y] = minas;
            matrizJogador2[x + 1][y] = minas;
            minas = 0;                     //O navio Minas fica
bloqueado, nao volta a ser posicionado
        } else {
            minas = 2;
            posicaoNavios();
        }
        //Submarino
        if (((x + 2) <= 9) && (submarino == 3)) { //Posicionar o navio
Minas no tabuleiro cpu
            matrizJogador2[y] = submarino;
            matrizJogador2[x + 1][y] = submarino;
            matrizJogador2[x + 2][y] = submarino;
            submarino = 0;                     //O navio Minas fica
bloqueado, nao volta a ser posicionado
        } else {
            submarino = 3;
            posicaoNavios();
        }
        /*//fragata
        if (((x + 2) <= 9) && (fragata == 6)) { //Posicionar o navio
Minas no tabuleiro cpu
            matrizJogador2[y] = fragata;
            matrizJogador2[x + 1][y] = fragata;
            matrizJogador2[x + 2][y] = fragata;
            fragata = 0;                     //O navio Minas fica
bloqueado, nao volta a ser posicionado
        } else {
            submarino = 3;
            posicaoNavios();
        }
        //navio de batalha
        if (((x + 3) <= 9) && (batalha == 4)) { //Posicionar o navio
Avioes no tabuleiro cpu
            matrizJogador2[y] = batalha;
            matrizJogador2[x + 1][y] = batalha;
            matrizJogador2[x + 2][y] = batalha;
            matrizJogador2[x + 3][y] = batalha;

            batalha = 0;                     //O navio Avioes fica
bloqueado, nao volta a ser posicionado
        } else {
            batalha = 4;
            posicaoNavios();
        }
        //Porta-Aviões
        if (((x + 4) <= 9) && (avioes == 5)) { //Posicionar o navio
Avioes no tabuleiro cpu
            matrizJogador2[y] = avioes;
            matrizJogador2[x + 1][y] = avioes;
            matrizJogador2[x + 2][y] = avioes;
            matrizJogador2[x + 3][y] = avioes;
            matrizJogador2[x + 4][y] = avioes;
            avioes = 0;                     //O navio Avioes fica
bloqueado, nao volta a ser posicionado
        } else {
            avioes = 5;
            posicaoNavios();
        }*/
    }

public static void imprimeTabuleiro() { //aparecer tabela na linha de
comandos
        System.out.println("    0   1   2   3   4   5   6   7   8
9"); //numero da coluna
        System.out.println("
_______________________________________");
        for (int l = 0; l <= 9; l++) {//preenche as linhas com
elementos de 0 a 9
            System.out.print(l + " ");   //numero da linhas do lado do
tabuleiro
            for (int c = 0; c <= 9; c++) {//preenche as colunas com
elementos de 0 a 9//
                System.out.print("| " + matrizJogador2[c][l] + " ");
            }
            System.out.println("|");
            System.out.println("_______________________________________");
        }
    }

} 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pontus

Boas. Dei uma vista de olhos rápida, e penso que o que está a falhar é uma verificação antes de colocares as peças no tabuleiro, ou seja, antes de colocares um navio, tens de verificar se o espaço já esta preenchido e com o que

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
overload

Viva,

playerVfox, tou com o mesmo problema mas para um programa (Sopa de letras) em que tenho de colocar palavras predefinidas, aleatoriamente no tabuleiro nas 8 direcções dos pontos cardeais. O problema é que não tou a ver como verifico se as posições do array estão vazias e se a palavra me vai caber dentro do tabuleiro.

Se pudesses enviar-me essa parte do código, agradecia.

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.