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

  • Автор темы pastorixx
  • Дата начала
P

pastorixx

Пишу игрушку 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;


}
 
P

pastorixx

Почему то смещается вниз(
Код:
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) {}

}
 
P

pastorixx

Подправил, выделение работает, теперь думаю как в каждый квадрат вписать значение кубика.
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) {}

}
 
P

pastorixx

Уже сделал, пытаюсь сделать логику игры
 
P

pastorixx

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

pastorixx

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

Не разбитая на классы:
Код:
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.ActionListener;
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;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Spring;
import javax.swing.border.TitledBorder;

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

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 больше");
}
}
}
}
}

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) {}
}

Класс 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);
}
}
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!