Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 13:26   #1
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
Восклицание DiceWars(Не могу построить территорию для ходов)

Пишу игрушку 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 вне форума Ответить с цитированием
Старый 27.12.2010, 15:50   #2
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Почему то смещается вниз(
Цитата:
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 вне форума Ответить с цитированием
Старый 27.12.2010, 17:17   #3
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Подправил, выделение работает, теперь думаю как в каждый квадрат вписать значение кубика.
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 вне форума Ответить с цитированием
Старый 27.12.2010, 19:06   #4
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Уже сделал, пытаюсь сделать логику игры
PastoriXx вне форума Ответить с цитированием
Старый 28.12.2010, 08:53   #5
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Как сделать выделение второго квадрата, после первого?
PastoriXx вне форума Ответить с цитированием
Старый 29.12.2010, 11:25   #6
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
Восклицание

Игрушку сделал, теперь надо разбить её по классам.
Не знаю как сделать перерисовку из класса SimpleBot. Помогите!!!

Не разбитая на классы:
Код:
public class DiceMain extends JApplet implements MouseListener, ActionListener {
	static int [][] pole = new int[14][14];// Массив принадлежности территории, тому или другому игроку.
	static String[][] polez = new String[14][14];// Массив с кол-м кубиков.
	int k1, k2, k3;
	int x, y , x1, y1;
	
	Random r = new Random();
	static Graphics2D g, gg;
	static Graphics gr;
	MouseEvent me;
	int player1, player2;//у игрока2 pole =1.
	
	JButton buthod, butend;
	JPanel panel;
	public void init() 
	{
		setLayout(new BorderLayout());
		setSize(400, 500);
		setMinimumSize(new Dimension (400,500));
		  
		buthod = new JButton("Начать заново");
		butend = new JButton("Закончить ход");		
		panel = new JPanel();
		panel.setBorder(new TitledBorder("Действия"));
		panel.add(buthod);
		panel.add(butend);
		//panel.setPreferredSize(new Dimension(300,100));
		add(panel,BorderLayout.SOUTH);
		
		for(int i=0; i<14;i++)
			for(int j=0; j<14;j++)
			{
				polez[i][j] = String.valueOf(r.nextInt(4)+1);
				pole[i][j] = r.nextInt(2);
			}
		addMouseListener(this);
		buthod.addActionListener(this);
		butend.addActionListener(this);
		

		
		
	}
	public void paint(Graphics gr) {
			g = (Graphics2D)gr;
			gg = (Graphics2D)gr;
			super.paint(gr);
			//super.paint(gg);
			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)//игрок2
					{						
						g.setColor(Color.MAGENTA);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
					if(pole[l][m]==0)//игрок1
					{						
						g.setColor(Color.GREEN);
						g.fill(new Rectangle2D.Float(24+i, 24+j, 24, 24));
					}
					String f = polez[l][m];
					g.setColor(Color.BLACK);
					gr.drawString(f,i+31,j+39);
				}
			if(x!=0)
				for(int i=1; i<15;i++)
					if(x<=25*(i+1) && x>=25*(i))			
						for(int j=1; j<15;j++)
							if(y<=25*(j+1) && y>=25*(j))
							if(pole[i-1][j-1]!=1)
							{
								gg.setColor(Color.DARK_GRAY);							
								gg.fill(new Rectangle2D.Float(25*i-1, 25*j-1, 24, 24));
								System.out.println(x+" "+y +" ");
								k1 = 25*i-1;
								k2 = 25*j-1;
								String f = polez[i-1][j-1];
								gg.setColor(Color.WHITE);
								gr.drawString(f,25*(i-1)+30,25*(j-1)+38);
								
								pole[i-1][j-1]=2;
								x=0;
							}

			if(x1!=0)
				if(x1>(k1+12-37) && x1<(k1+12+37) && y1>(k2+12-37) && y1<(k2+12+37))
				for(int i=1; i<15;i++)
					if(x1<=25*(i+1) && x1>=25*i)			
						for(int j=1; j<15;j++)
							if(y1<=25*(j+1) && y1>=25*j)
							if(pole[i-1][j-1]!=0)
							{
								gg.setColor(Color.BLUE);							
								gg.fill(new Rectangle2D.Float(25*i-1, 25*j-1, 24, 24));
								System.out.println(x1+" "+y1 +" ");
								
								String f = polez[i-1][j-1];
								gg.setColor(Color.WHITE);
								gr.drawString(f,25*(i-1)+30,25*(j-1)+38);
								
								pole[i-1][j-1]=3;
								x1=0;
								for(int i1=0; i1<14;i1++)
									for(int j1=0; j1<14;j1++)
										if(pole[i1][j1]==2)
										{
											player1 = Integer.parseInt(polez[i1][j1]);//*(r.nextInt(5)+1);
											for(int l=0; l<14;l++)
												for(int m=0; m<14;m++)
													if(pole[l][m]==3)
													{
														player2 = Integer.parseInt(polez[l][m]);//*(r.nextInt(5)+1);
														if(player1>player2)
														{
															pole[i1][j1] = 0;
															pole[l][m] = 0;
															polez[l][m] = String.valueOf((Integer.parseInt(polez[i1][j1])-1));
															polez[i1][j1] = String.valueOf(1);
															repaint();
															System.out.println(polez[l][m]+"player1 больше");
														}
														else
														{
															pole[i1][j1] = 0;
															pole[l][m] = 1;
															polez[i1][j1] = String.valueOf(1);
															repaint();
															System.out.println(pole[i1][j1]+ "bot больше");
														}
													}
										}
							}
		}
PastoriXx вне форума Ответить с цитированием
Старый 29.12.2010, 11:26   #7
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Код:
	public void paintComponents(Graphics g) {super.paintComponents(g);}
		
	public void actionPerformed(ActionEvent ae) 
		{
			if (ae.getSource()== buthod){}

			if (ae.getSource()== butend)//Бот+добавление очков
			{
				for(int i=0; i<14;i++)
					for(int j=0; j<14;j++)
						if(pole[i][j]==0)
						{	
							if(Integer.parseInt(polez[i][j])!=4)
								polez[i][j]=String.valueOf(Integer.parseInt(polez[i][j])+1);
						}
							
				for(int i=0; i<14;i++)
					for(int j=0; j<14;j++)
						if(pole[i][j]==1)
						{
							if(i!=0)
							{
								if(pole[i-1][j]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j]))
									{
										pole[i-1][j]=1;
										polez[i][j]=polez[i-1][j];
										repaint();
									}
								if(j!=0)
								if(pole[i-1][j-1]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j-1]))
									{
										pole[i-1][j-1]=1;
										polez[i][j]=polez[i-1][j-1];
										repaint();
									}
								if(j!=13)
								if(pole[i-1][j+1]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j+1]))
									{
										pole[i-1][j+1]=1;
										polez[i][j]=polez[i-1][j+1];
										repaint();
									}
							}
							if(i!=13)
							{
								if(pole[i+1][j]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j]))
									{
										pole[i+1][j]=1;
										polez[i][j]=polez[i+1][j];
										repaint();
									}
								if(j!=13)
								if(pole[i+1][j+1]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j+1]))
									{
										pole[i+1][j+1]=1;
										polez[i][j]=polez[i+1][j+1];
										repaint();
									}
							}
							if(j!=13)
							if(pole[i][j+1]==0)
								if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i][j+1]))
								{
									pole[i][j+1]=1;
									polez[i][j]=polez[i][j+1];
									repaint();
								}
							if(j!=0)
							{
								if(i!=13)
								if(pole[i+1][j-1]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j-1]))
									{
										pole[i+1][j-1]=1;
										polez[i][j]=polez[i+1][j-1];
										repaint();
									}
								if(pole[i][j-1]==0)
									if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i][j-1]))
									{
										pole[i][j-1]=1;
										polez[i][j]=polez[i][j-1];
										repaint();
									}
							}
	
								if(Integer.parseInt(polez[i][j])!=4)
									polez[i][j]=String.valueOf(Integer.parseInt(polez[i][j])+1);
						}
			}	
		}
		
		
		
	public void mouseClicked(MouseEvent me) 
	{
		if(me.getButton()==MouseEvent.BUTTON1)
		{
			x = me.getX();
			y = me.getY();
			if(x>=24 && y>=24)			
				repaint();	
		}
		if(me.getButton()==MouseEvent.BUTTON3)
		{
			x1 = me.getX();
			y1 = me.getY();
			if(x1>=24 && y1>=24)			
				repaint();
		}
	}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
}
PastoriXx вне форума Ответить с цитированием
Старый 29.12.2010, 11:27   #8
PastoriXx
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 40
По умолчанию

Класс SimpleBot :
Код:
package DW;

public class SimpleBot extends DiceMain
{

public static void main(String[] args) {
	
	for(int i=0; i<14;i++)
		for(int j=0; j<14;j++)
			if(pole[i][j]==1)
			{
				if(i!=0)
				{
					if(pole[i-1][j]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j]))
						{
							pole[i-1][j]=1;
							polez[i][j]=polez[i-1][j];
							paint(gr);
						}
					if(j!=0)
					if(pole[i-1][j-1]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j-1]))
						{
							pole[i-1][j-1]=1;
							polez[i][j]=polez[i-1][j-1];
							repaint();
						}
					if(j!=13)
					if(pole[i-1][j+1]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i-1][j+1]))
						{
							pole[i-1][j+1]=1;
							polez[i][j]=polez[i-1][j+1];
							repaint();
						}
				}
				if(i!=13)
				{
					if(pole[i+1][j]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j]))
						{
							pole[i+1][j]=1;
							polez[i][j]=polez[i+1][j];
							repaint();
						}
					if(j!=13)
					if(pole[i+1][j+1]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j+1]))
						{
							pole[i+1][j+1]=1;
							polez[i][j]=polez[i+1][j+1];
							repaint();
						}
				}
				if(j!=13)
				if(pole[i][j+1]==0)
					if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i][j+1]))
					{
						pole[i][j+1]=1;
						polez[i][j]=polez[i][j+1];
						repaint();
					}
				if(j!=0)
				{
					if(i!=13)
					if(pole[i+1][j-1]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i+1][j-1]))
						{
							pole[i+1][j-1]=1;
							polez[i][j]=polez[i+1][j-1];
							repaint();
						}
					if(pole[i][j-1]==0)
						if(Integer.parseInt(polez[i][j])>Integer.parseInt(polez[i][j-1]))
						{
							pole[i][j-1]=1;
							polez[i][j]=polez[i][j-1];
							repaint();
						}
				}

					if(Integer.parseInt(polez[i][j])!=4)
						polez[i][j]=String.valueOf(Integer.parseInt(polez[i][j])+1);
			}
}
}
PastoriXx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить класс для работы со списком Васильева Зинаида Помощь студентам 4 30.10.2010 21:10
Delphi.TCHART.Не могу построить диаграмму Mazyrik Помощь студентам 0 23.05.2010 22:01
Написать программу, которая за меньшее число ходов отгадывает загаданное число gomz007 Помощь студентам 16 08.11.2009 12:57
Как правильно построить цикл для выборки? Tanuska___:) БД в Delphi 1 12.01.2009 14:50
Как лучше построить код для Radiobutton Inbox Общие вопросы Delphi 4 29.01.2007 20:38