Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Piccolo aiuto progetto..inserire nomi giocatori nel frame

    ciao a tutti sto realizzando un progetto che consiste nell'implementazione del gioco del tris..il progetto l'ho finito solo che non riesco a far visualizzare il mome del giocatore cui spetta il turno all'interno del frame; il nome viene chiesto all'inizio della partita ma dopo nn capisco come farlo visualizzare nel frame..vi posto il codice:

    codice:
    import java.awt.Canvas;     
    import java.awt.Color;     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.Random;
    import javax.swing.JOptionPane;
    import javax.swing.JFrame;
    
    
    public class Tris extends JFrame
    {
    	
    	private static class GameBoard extends Canvas 
    	{
    		private static final int VUOTO = 0;
    		private static final int GIOCATOREX = 1;
    		private static final int GIOCATOREO = 2;
    		private int[][] Grigliagioco = new int[3][3]; // Griglia del gioco
    		private boolean TurnoX; // Valore booleano che stabilisce se è il turno di X o meno
    		private Random random; // generatore random che definisce quale giocatore inizia la partita
    		private boolean gameRunning; // Definisce se il gioco è in progresso
    		private int Risultato; // Risultato
    		/**
    		 * Catturiamo gli eventi del mouse
    		 */
    		private class GameListener implements MouseListener   //eventi di movimento del mouse  
    		{
    			public void mousePressed(MouseEvent e){}  //chiamato quando un pulsante del mouse è stato premuto su un componente
    			public void mouseClicked(MouseEvent e)  //chiamato quando un pulsante del mouse è stato premuto e rilasciato in rapida successione su un componente
    			{
    				// Controlla la posizione al clic del mouse
    				int xPos = e.getPoint().x;
    				int yPos = e.getPoint().y;
    				// Controlla la grigla del gioco
    				if(xPos > 50 && yPos > 50 && xPos < 50+50*3 && yPos < 50+50*3)
    				{
    					// Controlla se il gioco è stato avviato 
    					if(gameRunning == false)
    					{
    						// Nuovo Gioco
    						newGame();
    						gameRunning = true;
    						repaint();
    						return;
    					}
    					// Controlla un posto vuoto
    					if(Grigliagioco[xPos/50-1][yPos/50-1] != VUOTO)
    						return; 
    					// Mette X oppure O per il turno corrente poi si alterna
    					if(TurnoX)
    					{
    						Grigliagioco[xPos/50-1][yPos/50-1] = GIOCATOREX;
    						TurnoX = false;
    					}
    					else
    					{
    						Grigliagioco[xPos/50-1][yPos/50-1] = GIOCATOREO;
    						TurnoX = true;
    					}
    					// Controllo del giocatore vincente
    					Risultato = gameOver();
    					if(Risultato != 0)
    					{
    						// Il gioco è finito
    						gameRunning = false;
    					}
    					// Ridisegna la griglia
    					repaint();
    				}
    			}
    			public void mouseReleased(MouseEvent e){} //chiamato quando un pulsante del mouse è stato rilasciato da un componente
    			public void mouseEntered(MouseEvent e){}  //chiamato quando il mouse entra in un componente
    			public void mouseExited(MouseEvent e){}   //chiamato quando il mouse esce da un componente
    		}
    		/**
    		 * Crea una nuova griglia del gioco
    		 */
    		public GameBoard()
    		{
    			// Imposta la dimensione e il colore di background
    			setPreferredSize(new Dimension(256,256));
    			setBackground(Color.WHITE);
    			// Aggiungi eventi del mouse
    			addMouseListener(new GameListener());
    			// Crea un generatore random
    			random = new Random();
    			// Nuovo gioco
    			newGame();
    			// Controllo stato del gioco
    			gameRunning = true;
    		}
    		/**
    		 * Cancella la griglia del gioco
    		 * Imposta generatore casuale per il prossimo giocatore
    		 */
    		public void newGame()
    		{
    			// Griglia gioco
    			for(int y = 0;y < 3;y++)
    				for(int x = 0;x < 3;x++)
    					Grigliagioco[x][y] = VUOTO;
    			// Selezione giocatore
    			if(random.nextInt(2) < 3)
    				TurnoX = true;
    			else
    				TurnoX = false;
    		}
    		/**
    		 * Controlla per vedere se il gioco è terminato.
    		 * 
    		 * @return Se il gioco è terminato o meno. 0 = Non è finito, 1 = X ha vinto, 2 = O ha vinto, 3 = parità_
    		 */
    		int gameOver()
    		{
    			// Verifica
    			for(int x = 0;x < 3;x++) // Righe
    				if(Grigliagioco[x][0] == Grigliagioco[x][1] && Grigliagioco[x][1] == Grigliagioco[x][2])
    					return Grigliagioco[x][0];
    			for(int y = 0;y < 3;y++) // Colonne
    				if(Grigliagioco[0][y] == Grigliagioco[1][y] && Grigliagioco[1][y] == Grigliagioco[2][y])
    					return Grigliagioco[0][y];
    			// Diagonale
    			if(Grigliagioco[0][0] == Grigliagioco[1][1] && Grigliagioco[1][1] == Grigliagioco[2][2])
    				return Grigliagioco[0][0];
    			if(Grigliagioco[2][0] == Grigliagioco[1][1] && Grigliagioco[0][2] == Grigliagioco[1][1])
    				return Grigliagioco[2][0];
    			// Controlla la parità_
    			for(int y = 0;y < 3;y++)
    				for(int x = 0;x < 3;x++)
    					if(Grigliagioco[x][y] == 0)
    						return 0; // IL gioco non è in parità_ perchè ci sono spazi vuoti
    			// Il gioco è in parità 
    			return 3;
    		}
    
    
    		/**
    		 * Disegniamo il gioco
    		 */
    		public void paint(Graphics g)
    		{
    			
    			// Disegniamo le linee
    			g.setColor(Color.BLACK);
    			for(int y = 1;y < 3;y++)
    				g.drawLine(50,y*50+50,50+50*3,y*50+50);
    			for(int x = 1;x < 3;x++)
    				g.drawLine(x*50+50,50,x*50+50,50+50*3);
    			// Disegniamo il giocatore X e il giocatore Y 
    			for(int y = 0;y < 3;y++)
    			{
    				for(int x = 0;x < 3;x++)
    				{
    					if(Grigliagioco[x][y] == GIOCATOREX)
    					{
    						g.setColor(Color.BLUE);
    						g.drawLine(50+x*50,50+y*50,50+x*50+50,50+y*50+50);
    						g.drawLine(50+50+x*50,50+y*50,50+x*50,50+y*50+50);
    					}
    					if(Grigliagioco[x][y] == GIOCATOREO)
    					{
    						g.setColor(Color.RED);
    						g.drawOval(50+x*50,50+y*50,50,50);
    					}
    				}
    			}
    			// Controlla i turni
    			
    	                
    			
    			g.setColor(Color.RED);
    			if(gameRunning)
    			{
    				// Turno dei giocatori
    				if(TurnoX)
    					g.drawString("Tocca al giocatore X",10,20);
    				else
    					g.drawString("Tocca al giocatore O",10,20);
    			}
    			else
    			{
    				// Messaggio fine partita
    				if(Risultato == GIOCATOREX)
    					g.drawString("Il giocatore X ha vinto!",10,20);
    				if(Risultato == GIOCATOREO)
    					g.drawString("Il giocatore O ha vinto!",10,20);
    				if(Risultato == 3)
    					g.drawString("Parità_!",10,20);
    				
    				
    			}
    		}
    	}
    		
    	public static void main(String[] args)
    	
    	{
    		// Crea una nuova finestra per il gioco del tris
    		Tris ticTacToe = new Tris();
    		ticTacToe.setTitle("Gioco del Tris");
    		String nomeGiocatoreX = JOptionPane.showInputDialog("Inserisci il nome del giocatore X.");
    		String nomeGiocatoreO = JOptionPane.showInputDialog("Inserisci il nome del giocatore 0");
    		ticTacToe.setPreferredSize(new Dimension(256,256));
    		ticTacToe.setBackground(Color.WHITE);
    		ticTacToe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		// Aggiungi la griglia del gioco
    		GameBoard gameBoard = new GameBoard();
    		ticTacToe.add(gameBoard);
    		// Visualizza il frame nella dimensione impostata
    		ticTacToe.pack();
    		ticTacToe.setVisible(true);
    	}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Alcune considerazioni:

    1) E' necessario leggere il regolamento prima di postare. Il regolamento è tra i link in evidenza su ciascun forum

    2) Java ha un forum dedicato, dove sposterò questa discussione

    3) Quando si posta del codice, questo va fatto all'interno degli appositi tag CODE previsti dal forum (vedi regolamento, punto 6)

    4) Il titolo della discussione deve dare un'idea del contenuto della discussione stessa. "Piccolo aiuto progetto" può essere applicato al 99% delle discussioni presenti nel forum


    Correggo ove possibile e sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    chiedo scusa...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.