• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ribamar

Jogo do Galo em Java

60 mensagens neste tópico

Boas pessoal.

Para o projecto final da cadeira de Programação II tenho de implementar o Jogo do Galo.

Enunciado:

Implementar o Jogo do Galo com interface gráfica. O jogador deve identificar-se e caso já tenha jogado alguma vez o jogo deve ser indicado o número de jogos efectuados e o número de vezes que ganhou (caso existam níveis, o número de vezes que ganhou em cada nível).

Valoriza-se:

- As facilidades da interface com o utilizador.

- A existência de vários níveis de jogadas do computador.

- A existência de um nível em que o computador não perca.

A minha dúvida neste momento é como hei-de fazer com que o início do programa seja um menu para escolher "Novo Jogo", "Recordes", etc. Depois de seleccionada a opção "Novo Jogo" o programa muda de "estado" e vai para o menu onde se joga. A minha dúvida é como se implementam dois "estados" do programa e como se muda de um para o outro...  :hmm:

Toda a ajuda é bem vinda.

Cumps []  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, a tua aplicação é para fazer utilizando uma framework grafica (AWT ou SWING)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como diz no enunciado, claro que é

Implementar o Jogo do Galo com interface gráfica.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como diz no enunciado, claro que é

Implementar o Jogo do Galo com interface gráfica.

Cumps

isso é muito bago!!!  :P

bem eu implementei recentemente o jogo do galo em C++ / Opengl ( ve aqui )

Conselhos:

1º Defenir variaveis: ( podem ter que ser vectores... depende!! ou estruturas!!! )

  jogador A

  jogador B

  jogos[MAX] -para guardar nivel de cada jogo, para saber quantas vezes jogou akele jogo... ( usa ponteiros )

  tipo de jogo - pc x jog ou jog x jog ...

  nivel de jogo

  numero de jogadas

  numero de victorias

  numero de empates

  numero de derrotas

 

  (...)

2º Criar uma matriz 3x3 para guardar a jogada de cada jogador

  - iniciar a matriz

  - mudar a matriz consoante a jogada do jogador em causa

e consoante o valor da matriz vais visualizar o galo no ecra!!!

3º ..... Toca a trabalhar que tens muito para fazer, para obteres uma coisa fantastica, no meu jogo tenho + de 100h de trabalho  ( :-[  ) e ainda quero melhorar umas cenas!!! mas ja entreguei para avaliação...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O jogo é so User vs PC...

O que me faz confusão é como tenho 1 menu onde estão opções ("Novo Jogo", etc) e depois vou po menu do jogo, e depois se volta para o menu principal de novo...

Ponteiros... qué isso?

O que dei que posso usar são Arrays, vectores, estruturas de dados (linked lists, grafos), awt e swing, excepções, IO (ficheiros de texto e binários) e claro, conceito de classes e heranças que caracterizam a linguagem java.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu percebo pouco de java...ja estudei umas coisas...mas não me lembro mto bem disso pq nao pratico....

é assim:

declaras a variavel mostrar ( ou outro nome...)

se mostrar = 0

  desenhas menu de entrada

se mostar =1

  desenhas jogo nivel 1

se mostrar = 2

  desenhas jogo nivel 1

...

se mostrar=-1

  desenhas menu de saida e fechas o programa

No menu de entrada:

tens 1 texto de opçoes, para o utilizador escolher...e tens que ter algo k leia a escolha do jogador....

e por ai fora....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relacao aos estados a tofas esteve quase la', isto e', se for importante a componete de programacao orientada a objectos convem nao fazeres isso com um switch ou if, nao e' muito POO, mas se quiseres ver jogos com interface grafica e menus e com estados podes dar uma vista de olhos 'a minha pagina pessoal em www.student.estg.ipleiria.pt/~ei10635, vai 'a seccao de downloads e na parte de trabalhos estao la' jogos feitos em java. Saliento o J2Gether, o Fury of the Furries e o Puzzle de 8, este e' o ultimo link.

Se precisares de mais ajuda nao hesites...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Pelo que percebi da última aula prática, o que tenho de usar é o java.awt.CardLayout, para modificar o layout da minha aplicação. Agora não faço a mínima como se usa isto, esta classe não é leccionada na cadeira, apenas tomei conhecimento dela porque coloquei a dúvida à Eng. como se podia alterar o layout da aplicação... por isso se açguém fizer ideia de como se usa diga algo sff.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas!

Supondo que a classe onde estás a implementar a interface descende de um qualquer 'Component', tipo 'Frame' ou 'JFrame' para alterares o layout basta teres uma linha de código no método que inicia a parte gráfica que diga:

setLayout(new CardLayout());

e voilá, tens o layout mudado para CardLayout!

Agora se não pretenderes usar as definições por defeito do layot, por exemplo, espaço entre os componetes, etc..., só tens de usar os métodos 'set' que a classe CardLayout te disponibiliza.

Agora um aviso de amigo, como um dos meus profs de programação me disse uma vez, "Todos nós temos de ler o Java Tutorial alguma vez nas nossas vidas!", eu digo-te que mais vale cedo que tarde!

Vai ao site da sun, http://java.sun.com e procura lá o java tutorial, podes sacar o zip de 14mb e ficas com isso no disco tem lá exemplos simples mas que ajudam muito, outra coisa que tb deves ter, não sei qual o ide que estás a usar, mas se estás a programar tens o sdk instalado e isso trás o código fonte do java e o javadoc, lê esse javadoc, tem muita informação, e se tiveres curiosidade vê o código, tem muito coisa interessante.

Espero ter ajudado, se não MSN ou PM ou Gtalk! Até....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas isso do Tic Tac Toe é implementado usando a classe Applet, eu vou ter de usar Swing e AWT. E espero fazer algo muito mais cativante em termos gráficos.

Knitter, eu uso Eclipse 3.2, mas não percebi isso do javadoc...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas isso do Tic Tac Toe é implementado usando a classe Applet, eu vou ter de usar Swing e AWT. E espero fazer algo muito mais cativante em termos gráficos.

Knitter, eu uso Eclipse 3.2, mas não percebi isso do javadoc...

acho que fazes bem e tens miuito trabalho pela frente...isso do javadoc é fixe...mas eu não sei quase nada... :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ribamar quando dizes que não percebeste é porque não sabes o que são JavaDocs, ou não percebeste o que eu quis dizer?

Bem vou assumir que não me expliquei bem. O código java está comentado, todas as classes da framework de java possuiem no seu código comentários que explicam como é que determinada classe funciona.

Estás a usar o eclipse em windows ou em linux?, dependendo do sistema podes ou não ter o eclipse bem configurado, mas se estiveres em windows provavelmente já está configurado....

Ora no eclipse:

Nas propriedades do pojecto existe uma secção chamada "Java Build Path" nessa secção se fores ao separador "Libraries" encontras o o JRE incluído no teu projecto, se vires os jars que fazem parte do JRE encontras um que se chama rt.jar, nesse podes configurar o source do JRE e o Javadoc do JRE. Onde é que isto te ajuda?, bem, quando estiveres a programar e com a tecla "ctrl" pressionada carregares com o o rato em cima de uma classe da api do java saltas para o código, se colocares o cursor de edição numa classe da api do java e utilizares a combinação "shift+F2", se não me engano, saltas para o javadoc dessa classe e podes ver ai como toda a classe funciona.

Espero ter-me explicado e ter ajudado. Se por acaso não souberes o que são javadocs básicamente são comentários formatados de uma maneira especifica de forma a poderem ser apresentados, por exemplo, em html, isto não é uma defenição muito correcta, mas serve para explicar.

Fiquem ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando vou às propriedades > java build path > libraries, o rt.jar tem dois sub-campos: "Source attachment" que se encontra vazio, e o Java Doc Location que tem 1 link para a api no site da sun (http://java.sun.com/j2se/1.5.0/docs/api/). Ora suponho que devo colocar um caminho qualquer no "Source Attachment", mas qual? E como funciona isto afinal? Onde posso ver documentação sobre isso?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relação à documentação sobre isto não te posso ajudar, é algo que uso há bastante tempo e não me lembro onde aprendi, podes claro, tentar ajuda do eclipse ou uma pesquisa do google, desculpa mas de momento não te posso ajudar mais que isso.

Em relação ao source... o source do java já se encontra no teu pc... está a usar linux ou windows, se estás a usar windows isso já devia estar configurado, bem, seja como for o source do java é um zip que se encontra na raiz da pasta do jdk, isto é, no meu caso, C:\Program Files\Java\jdk1.5.0_06. Basta editares o campo source attachment e escolheres o zip. Não te preocupes por ser zip, até porque o eclipse gosta mais de zips e de jars do que de pastas :cheesygrin:.

Se quiseres ter sempre a informação da api do java podes sacar a api no site que indiquei antes, a documentação da api não vem na instalação do jdk, e depois editas o campo Java Doc Location para usar, em vez da web, o ficheiro que sacaste.

Depois disso configurado o que passas a ter é que, como disse antes, se por exemplo, usares o atalho "shift + F2", com o cursor de edição em cima da class CardLayout o eclipse abre-te um browser com a documentação dessa classe.

Nota: se estiveres sempre ligado à web não precisas sacar a documentação da api do java, podes deixar o link.

P.S.: Se precisares de alguma ajuda, PM, MSN ou GTalk!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora agora que eu peguei nisto a sério, fiz o seguinte:

Vou ter uma classe Game abstracta, da qual derivam por herança as classes Easy, Medium e Hard.

Tenho depois a classe Player, pois a classe Game contém objectos do tipo Player.

Agora para fazer o método play() na classe Game não estou a perceber como é que joga o pc e depois o jogador e vice-versa... e como fazer para começar primeiro ou o pc ou o jogador, e quando quem ganha começa primeiro... agradecia algum feedback.

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente o PC é também um jogador, a diferença é que implementa os métodos de uma forma muito particular, isto é, se tens uma classe Player, então podes ter duas subclasses, um AI e outra Human, por exemplo. Depois o controlador de jogo poderá dar a indicação aos jogadores de que é a sua vez, cabe ao jogador saber como jogar.

Nota que esta solução é dada um pouco às escuras, não sei que classes tens, nem como pretendes implementar o teu jogo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Ontem dediquei-me a sério a este projecto, mas surgiram-me algumas dificuldades. Tive a ideia de usar um GridLayout no Container 3x3, ao qual adicionava os 9 labels ou buttons, com espaço vertical e horizontal 3 entre eles, ficando assim feito o tabuleiro do jogo, pois definia o background color a preto. A minha ideia é usar o ImageIcon para alterar os icones das labels ou buttons conforme este são premidos, mas tento adicionar um icon a 1 button ou label e não consigo! faço: JLabel label = new JLabel(new ImageIcon("icon.gif")) ou então Jlabel label = new JLabel(); ImageIcon icon = new ImageIcon("icon.gif") ; label.add(icon);  e também tento com butões e não consigo de maneira nenhuma!

Alguém me podia ajudar sff? Deixo aqui o link do codigo pa sacarem e verem como isto está implementado.

P.S.: o projecto está implementado usando package, se usarem linha comandos não se esqueçam de estar uma directoria atrás. Eu uso o Eclipse 3.2 como SDK.

link:

http://u2fly.com.sapo.pt/jogo_galo.rar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Forget it, ja descobri o problem. Como estava a usar packages tinha de ter a imagem numa pasta atrás ou entao especificar o package  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ribamar  podes colocar também um executável do jogo?  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ribamar  podes colocar também um executável do jogo?  :P

Executável?  Era só criares um .bat...

mas saca o arquivo agora que ja actualizei com o .bat e j a funcar td... quase td :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho de experimetar esse jogo :P

Já agora

Eu uso o Eclipse 3.2 como SDK.
, não tu tens o Eclipse 3.2 como IDE.

E por que é que estás  a usar labels e em vez de tables garanto-te que é mais fácil usar a classe JTable do que usar labels e buttons, e já agora o GridBag Layout tb é melhor :P

Como estava a usar packages tinha de ter a imagem numa pasta atrás ou entao especificar o package

Humm... não percebi onde está o prob... tenho de ir ver o teu código...

até...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tive a ver o teu código e... humm... não está mal mas... não está bem!

E ainda não percebi o que queres dizer com estava a usar packages, em java usas sempre packages, nem que seja o default.

public static final int WIDTH = 300;

para que serve uma variável estática, final e pública com a largura? É pública porquê?

if...
if...
if...else..

humm... tantas condições :P, falta ai algum POO.

Não está mal, mas como disse se tivesses usado um JTable talvez tivesse sido mais fácil, mas continua que quero ver desenvolvimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olha fiz isto para me entreter drante uns minutos

import java.awt.event.*;
import java.awt.*;
import java.applet.Applet;
class CBoard extends Component {
private static final long serialVersionUID = -5835724911465467678L;
int vBoard[][];
boolean isP1;
boolean isOver;
CBoard()
{
	this.boot();
}
public void boot()
{
	this.isOver = false;
	this.isP1 = true;
	this.vBoard = new int[3][3];
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++)
			this.vBoard[i][j] = 0;
	this.repaint();
}
public void paint(Graphics g)
{
	int x = (int)(this.getWidth() / 3.0),
		y = (int)(this.getHeight() / 3.0);

	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++)
		{
			switch (this.vBoard[i][j]){
			case 1: g.setColor(new Color(255,128,64));
				break;
			case 2: g.setColor(new Color(64, 128, 255));
				break;
			default:
				g.setColor(new Color(0,0,0));
				break;
			}
			g.fillRoundRect(x * i + 5, y * j + 5, x - 10, y - 10, 15, 15);
		}
}
public int doCheck()
{
	//1- p1 ganhou
	//2- p2 ganhou
	//0- jogo a decorrer
	//3- over
	Point mouse = this.getMousePosition();
	Rectangle area = new Rectangle();
	int x = (int)(this.getWidth() / 3.0),
		y = (int)(this.getHeight() / 3.0);

	if (this.isOver)
		return 3;
	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++)
		{		
			area.setBounds(x * i + 5, y * j + 5, x - 10, y - 10);
			if (area.contains(mouse) && this.vBoard[i][j] == 0)
			{
				if (this.isP1)
					this.vBoard[i][j] = 1;
				else 
					this.vBoard[i][j] = 2;
				this.isP1 = !this.isP1;
			}
		}
	this.repaint();
	//check is someone win
	int check = 1;
	//horizontal
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			check *= this.vBoard[i][j];
		}
		if (check == 1)
		{
			this.isOver = true;
			return 1;
		}
		else if (check == 8)
		{
			this.isOver = true;
			return 2;
		}
		check = 1;
	}
	//vertical
	check = 1;
	for (int j = 0; j < 3; j++)
	{
		for (int i = 0; i < 3; i++)
		{
			check *= this.vBoard[i][j];
		}
		if (check == 1)
		{
			this.isOver = true;
			return 1;
		}
		else if (check == 8)
		{
			this.isOver = true;
			return 2;
		}
		check = 1;
	}
	//diagonais
	check = 1;
	for (int j = 0; j < 3; j++)
		check *= this.vBoard[j][j];
	if (check == 1)
	{
		this.isOver = true;
		return 1;
	}
	else if (check == 8)
	{
		this.isOver = true;
		return 2;
	}
	check = 1;
	for (int j = 0; j < 3; j++)
		check *= this.vBoard[j][2 - j];
	if (check == 1)
	{
		this.isOver = true;
		return 1;
	}
	else if (check == 8)
	{
		this.isOver = true;
		return 2;
	}
	if (this.isP1)
		return 4;
	else 
		return 5;
}
}

public class CMain extends Applet implements ActionListener, MouseListener {
private static final long serialVersionUID = -8610726912655735387L;
CBoard board;
TextField bottom;
Button bReboot;
public void init() {
	this.setLayout(new BorderLayout());
	this.setSize(300,150);

	this.board = new CBoard();
	this.add(this.board, BorderLayout.CENTER);
	this.board.addMouseListener(this);

	this.bottom = new TextField();
	this.bottom.setText("Turno do jogador 1");
	this.add(this.bottom, BorderLayout.SOUTH);
	this.bReboot = new Button("Recomeçar");
	this.add(this.bReboot, BorderLayout.NORTH);
	this.bReboot.addMouseListener(this);

	this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
}
public void mouseClicked(MouseEvent arg0) 
{
	String temp = "";
	if (arg0.getSource() == this.board)
	{
		switch (this.board.doCheck())
		{
		case 1: temp = "Jogador 1 Ganhou"; break;
		case 2: temp = "Jogador 2 Ganhou"; break;
		case 3: temp = "Jogo Acabou! Clique em recomeçar"; break;
		case 4: temp = "Turno do jogador 1"; break;
		case 5: temp = "Turno do jogador 2"; break;
		default:
			break;
		}
		this.bottom.setText(temp);
	}
	if (arg0.getSource() == this.bReboot)
	{
		this.board.boot();
		this.bottom.setText("Turno do jogador 1");
	}
}
public void mousePressed(MouseEvent arg0) {
	// TODO Auto-generated method stub

}
public void mouseReleased(MouseEvent arg0) {
	// TODO Auto-generated method stub		
}
public void mouseEntered(MouseEvent arg0) {
	// TODO Auto-generated method stub		
}
public void mouseExited(MouseEvent arg0) {
	// TODO Auto-generated method stub		
}
}

espero que te ajude :P

0

Partilhar esta mensagem


Link 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