DiceWars(Не могу построить территорию для ходов)

Модератор: Absurd

Ответить
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

27 дек 2010, 13:29

Пишу игрушку DiceWars, в качестве курсовика. Столкнулся с такой проблемой, не знаю как определить нажатие мышью по определенному квадрату. Когда нажимаеш на квадрат, его цвет должен поменятся(чтобы было понятно с какой ячейки ты начинаеш ход). Помогите!!!

Код: Выделить всё

package DW;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JApplet;
import javax.swing.JPanel;

public class Main extends JApplet {

	public void init() 
	{
		   setLayout(new BorderLayout());
		   setSize(400, 400);
		   setMinimumSize(new Dimension (400,400));
		   
		   addMouseListener(mouseListener);
		   
	}
		public void paint(Graphics gr) {
			Graphics2D g = (Graphics2D)gr;

			super.paint(g);
			//g.setColor(color1);
			for(int i=0;i<350;i=i+25)
				for(int j=0;j<350;j=j+25)
				{
					g.draw(new Rectangle2D.Float(25+i, 25+j, 25, 25));
				}
		}
		@Override
		public void paintComponents(Graphics g) {super.paintComponents(g);}
		
		//}
	Color color1 = Color.DARK_GRAY, color2 = Color.YELLOW;

	
}
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

27 дек 2010, 15:52

Почему то смещается вниз(

Код: Выделить всё

package DW;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.util.Random;

import javax.swing.JApplet;

public class DiceMain extends JApplet implements MouseListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Color color1 = Color.DARK_GRAY, color2 = Color.YELLOW;
	int [][] pole = new int[14][14];
	int k1, k2;
	int x, y;
	Random r = new Random();
	Graphics2D g;
	MouseEvent me;
	
	public void init() 
	{
		setLayout(new BorderLayout());
		setSize(400, 400);
		setMinimumSize(new Dimension (400,400));
		   
		for(int i=0; i<14;i++)
			for(int j=0; j<14;j++)
			{
				pole[i][j]=r.nextInt(2);
				if(pole[i][j]==1)
					k2++;
				else k1++;
				//if(k2>=24)
				//break;
				System.out.println(pole[i][j]);
			}
		addMouseListener(this);
	}
		public void paint(Graphics gr) {
			Graphics2D g = (Graphics2D)gr;

			super.paint(g);

			for(int l=0; l<14;l++)
				for(int m=0; m<14;m++)
				{
					int i = l*25;
					int j = m*25;
					if(pole[l][m]==1)
					{						
						g.setColor(Color.MAGENTA);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
					else
					{						
						g.setColor(Color.GREEN);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
				}
			//if() чтоб рисовал только после клика мышью
			for(int i=0; i<14;i++)
				if(x<=25*i && x>=25*(i-1))			
					for(int j=0; j<14;j++)
						if(y<=25*j && y>=25*(j-1))
						{
							g.setColor(Color.DARK_GRAY);							
							g.fill(new Rectangle2D.Float(24+25*i, 24+25*j, 24, 24));
							System.out.println(x+" "+y);
						}
		}
		@Override
		public void paintComponents(Graphics g) {super.paintComponents(g);}

	public void mouseClicked(MouseEvent me) 
	{
		x = me.getX();
		y = me.getY();
		for(int i=0; i<14;i++)
				if(x<=25*i && x>=25*(i-1))			
					for(int j=0; j<14;j++)
						if(y<=25*j && y>=25*(j-1))
						{
							repaint();
						}
		System.out.println(x+" "+y);
	}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
	
}
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

27 дек 2010, 17:18

Подправил, выделение работает, теперь думаю как в каждый квадрат вписать значение кубика.
package DW;

Код: Выделить всё

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.util.Random;

import javax.swing.JApplet;

public class DiceMain extends JApplet implements MouseListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Color color1 = Color.DARK_GRAY, color2 = Color.YELLOW;
	int [][] pole = new int[14][14];// Массив принадлежности территории, тому или другому игроку.
	int [][] polez = new int[14][14];// Массив с кол-м кубиков.
	int k1, k2;
	int x, y;
	Random r = new Random();
	Graphics2D g;
	MouseEvent me;
	
	public void init() 
	{
		setLayout(new BorderLayout());
		setSize(400, 400);
		setMinimumSize(new Dimension (400,400));
		   
		for(int i=0; i<14;i++)
			for(int j=0; j<14;j++)
			{
				polez[i][j] = r.nextInt(24);
				pole[i][j] = r.nextInt(2);
				if(pole[i][j]==1)
					k2++;
				else k1++;
				//if(k2>=24)
				//break;
				System.out.println(pole[i][j]);
			}
		addMouseListener(this);
	}
		public void paint(Graphics gr) {
			Graphics2D g = (Graphics2D)gr;

			super.paint(g);

			for(int l=0; l<14;l++)
				for(int m=0; m<14;m++)
				{
					int i = l*25;
					int j = m*25;
					
					//g.setStroke(polez[i][j]);
					
					if(pole[l][m]==1)
					{						
						g.setColor(Color.MAGENTA);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
					else
					{						
						g.setColor(Color.GREEN);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
				}
			//if(me.getSource()!=null) 
			for(int i=1; i<=15;i++)
				if(x<=25*i && x>=25*(i-1))			
					for(int j=1; j<=15;j++)
						if(y<=25*j && y>=25*(j-1))
						{
							g.setColor(Color.DARK_GRAY);							
							g.fill(new Rectangle2D.Float(25*(i-1)-1, 25*(j-1)-1, 24, 24));
							System.out.println(x+" "+y);
						}
			g.setColor(Color.getHSBColor(10, 20, 255));							
			g.fill(new Rectangle2D.Float(0,0,24,24));
		}
		@Override
		public void paintComponents(Graphics g) {super.paintComponents(g);}
		
		
		
		
		
	public void mouseClicked(MouseEvent me) 
	{
		x = me.getX();
		y = me.getY();
		if(x>=24 && y>=24)			
			repaint();		

	}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
	
}
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

27 дек 2010, 19:06

Уже сделал, пытаюсь сделать логику игры
PastoriXx
Сообщения: 23
Зарегистрирован: 07 май 2010, 14:11

28 дек 2010, 08:54

Как сделать выделение второго квадрата, после первого?
Ответить