Java 用户是否单击了正确的形状?

Java 用户是否单击了正确的形状?,java,shape,mouselistener,Java,Shape,Mouselistener,我想做一个教育游戏,孩子们会问一个省在什么地方,就像下面的链接。我遇到了一个问题,我不知道如何告诉程序他是否击中了正确的形状。 如果你们能就如何解决这个问题给我一些建议,我将不胜感激 这就是我到目前为止所做的: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.MouseInputAdapter; import java.a

我想做一个教育游戏,孩子们会问一个省在什么地方,就像下面的链接。我遇到了一个问题,我不知道如何告诉程序他是否击中了正确的形状。 如果你们能就如何解决这个问题给我一些建议,我将不胜感激

这就是我到目前为止所做的:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.MouseInputAdapter;
    import java.awt.event.MouseMotionListener;
    import java.awt.event.MouseEvent;


public class CPTprograss2 extends JPanel
{
       static Polygon[] polygons;
       Polygon selected;
       static String province = "";

public CPTprograss2 ()
{
    polygons = new Polygon [13];

    int[] bcx = {95, 78, 108, 26, 11, 16, 41};
    int[] bcy = {267, 204, 141, 87, 161, 208, 241};
    polygons [0] = new Polygon (bcx, bcy, 7);
    int[] abx = {96, 124, 157, 110, 81};
    int[] aby = {258, 277, 160, 142, 196};
    polygons [1] = new Polygon (abx, aby, 5);
    int[] skx = {126, 185, 201, 160};
    int[] sky = {277, 290, 174, 160};
    polygons [2] = new Polygon (skx, sky, 4);
    int[] mnx = {187, 232, 232, 275, 253, 243, 206};
    int[] mny = {291, 294, 258, 215, 195, 180, 175};
    polygons [3] = new Polygon (mnx, mny, 7);
    int[] onx = {233, 265, 287, 310, 343, 337, 329, 355, 391, 363, 348, 341, 321, 299, 280, 235};
    int[] ony = {295, 309, 301, 327, 333, 344, 373, 359, 328, 324, 316, 274, 256, 231, 215, 259};
    polygons [4] = new Polygon (onx, ony, 16);
    int[] qbx = {349, 374, 412, 425, 431, 445, 470, 488, 432, 422, 413, 433, 409, 396, 382, 380, 357, 334, 343, 340, 361, 341, 346, 344, 347};
    int[] qby = {319, 329, 323, 295, 285, 279, 259, 219, 240, 236, 210, 201, 161, 174, 167, 155, 145, 148, 174, 187, 214, 234, 266, 274, 313};
    polygons [5] = new Polygon (qbx, qby, 25);
    int[] nflx = {414, 420, 437, 490, 492, 538, 492, 445};
    int[] nfly = {213, 232, 238, 217, 266, 251, 201, 186};
    polygons [6] = new Polygon (nflx, nfly, 8);
    int[] peix = {461, 474, 475, 464};
    int[] peiy = {290, 287, 292, 293};
    polygons [7] = new Polygon (peix, peiy, 4);
    int[] nox = {424, 432, 454, 457, 464, 459, 445, 436, 436, 428};
    int[] noy = {299, 285, 285, 291, 298, 307, 316, 303, 298, 298};
    polygons [8] = new Polygon (nox, noy, 10);
    int[] nbx = {455, 462, 472, 488, 493, 488, 486, 481, 468, 469, 463, 457};
    int[] nby = {325, 328, 312, 297, 287, 282, 290, 296, 300, 308, 312, 320};
    polygons [9] = new Polygon (nbx, nby, 12);
    int[] ykx = {18, 39, 72, 89, 94, 84, 82, 89, 86, 92, 95, 90, 101, 88, 19};
    int[] yky = {73, 97, 119, 129, 121, 113, 90, 73, 61, 51, 40, 34, 19, 8, 71};
    polygons [10] = new Polygon (ykx, yky, 15);
    int[] nwtx = {90, 112, 163, 205, 214, 172, 146, 151, 176, 208, 221, 219, 195, 184, 177, 153, 146, 140, 119, 104, 92, 96, 94, 89, 90, 86, 85, 87, 95, 93};
    int[] nwty = {129, 146, 161, 172, 122, 102, 58, 50, 52, 60, 37, 26, 18, 20, 36, 42, 38, 28, 22, 20, 35, 45, 53, 58, 75, 85, 103, 114, 120, 126};
    polygons [11] = new Polygon (nwtx, nwty, 30);
    int[] nnx = {205, 244, 255, 265, 259, 290, 301, 305, 314, 316, 331, 346, 361, 389, 395, 393, 372, 392, 392, 384, 375, 361, 350, 338, 317, 299, 287, 259, 242, 220, 208, 155, 147, 172, 216, 207};
    int[] nny = {173, 178, 154, 143, 134, 139, 142, 151, 148, 135, 124, 119, 131, 137, 126, 114, 97, 98, 89, 81, 75, 63, 52, 46, 37, 28, 28, 24, 27, 39, 60, 50, 56, 100, 121, 171};
    polygons [12] = new Polygon (nnx, nny, 36);
}


public static void main (String[] args)
{
    int max = 13;
    int drawNum[] = new int [max];

    drawNum [0] = (int) (Math.random () * max) + 0;

    while (drawNum [1] == drawNum [0])
    {
        drawNum [1] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [2] == drawNum [0]) || (drawNum [2] == drawNum [1]))
    {
        drawNum [2] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [3] == drawNum [0]) || (drawNum [3] == drawNum [1]) || (drawNum [3] == drawNum [2]))
    {
        drawNum [3] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [4] == drawNum [0]) ||
            (drawNum [4] == drawNum [1]) ||
            (drawNum [4] == drawNum [2]) ||
            (drawNum [4] == drawNum [3]))
    {
        drawNum [4] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [5] == drawNum [0]) ||
            (drawNum [5] == drawNum [1]) ||
            (drawNum [5] == drawNum [2]) ||
            (drawNum [5] == drawNum [3]) ||
            (drawNum [5] == drawNum [4]))
    {
        drawNum [5] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [6] == drawNum [0]) || (drawNum [6] == drawNum [1]) || (drawNum [6] == drawNum [2]) || (drawNum [6] == drawNum [3]) ||
            drawNum [6] == drawNum [4] || drawNum [6] == drawNum [5])
    {
        drawNum [6] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [7] == drawNum [0]) || (drawNum [7] == drawNum [1]) || (drawNum [7] == drawNum [2]) || (drawNum [7] == drawNum [3]) ||
            drawNum [7] == drawNum [4] || drawNum [7] == drawNum [5] || drawNum [7] == drawNum [6])
    {
        drawNum [7] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [8] == drawNum [0]) || (drawNum [8] == drawNum [1]) || (drawNum [8] == drawNum [2]) || (drawNum [8] == drawNum [3]) ||
            drawNum [8] == drawNum [4] || drawNum [8] == drawNum [5] || drawNum [8] == drawNum [6] || drawNum [8] == drawNum [7])
    {
        drawNum [8] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [9] == drawNum [0]) || (drawNum [9] == drawNum [1]) || (drawNum [9] == drawNum [2]) || (drawNum [9] == drawNum [3]) || drawNum [9] == drawNum [4] ||
            drawNum [9] == drawNum [5] || drawNum [9] == drawNum [6] || drawNum [9] == drawNum [7] || drawNum [9] == drawNum [10])
    {
        drawNum [9] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [10] == drawNum [0]) || (drawNum [10] == drawNum [1]) || (drawNum [10] == drawNum [2]) || (drawNum [10] == drawNum [3]) || drawNum [10] == drawNum [4] ||
            drawNum [10] == drawNum [5] || drawNum [10] == drawNum [6] || drawNum [10] == drawNum [7] || drawNum [10] == drawNum [8] || drawNum [10] == drawNum [9])
    {
        drawNum [10] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [11] == drawNum [0]) || (drawNum [11] == drawNum [1]) || (drawNum [11] == drawNum [2]) || (drawNum [11] == drawNum [3]) || drawNum [11] == drawNum [4] ||
            drawNum [11] == drawNum [5] || drawNum [11] == drawNum [6] || drawNum [11] == drawNum [7] || drawNum [11] == drawNum [8] || drawNum [11] == drawNum [9] || drawNum [11] == drawNum [10])
    {
        drawNum [11] = (int) (Math.random () * max) + 0;
    }

    while ((drawNum [12] == drawNum [0]) || (drawNum [12] == drawNum [1]) || (drawNum [12] == drawNum [2]) || (drawNum [12] == drawNum [3]) || drawNum [12] == drawNum [4] ||
            drawNum [12] == drawNum [5] || drawNum [12] == drawNum [6] || drawNum [12] == drawNum [7] || drawNum [12] == drawNum [8] || drawNum [12] == drawNum [9] || drawNum [12] == drawNum [11] || drawNum [12] == drawNum [11])
    {
        drawNum [12] = (int) (Math.random () * max) + 0;
    }

    String state[] = new String [13];
    state [0] = "British Columbia";
    state [1] = "Alberta";
    state [2] = "Saskatchewan";
    state [3] = "Manitoba";
    state [4] = "Ontario";
    state [5] = "Quebec";
    state [6] = "Newfoundland and Labrador";
    state [7] = "Prince Edward Island";
    state [8] = "New Brunswick";
    state [9] = "Nova Scotia";
    state [10] = "Yukon";
    state [11] = "Northwest Territories";
    state [12] = "Nunavut";


    Selecting coordinates = new Selecting ();
    Selector selector = new Selector (coordinates);
    coordinates.addMouseListener (selector);

    JFrame f = new JFrame ("Name the Province");
    f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);


    for (int v = 0 ; v < 13 ; v++)
    {
        JTextArea txt = new JTextArea (15, 20);
        txt.setText ("Where is " + state [drawNum [v]] + "?");
        //System.out.println(state[drawNum[v]]);
        txt.setEditable (false);

        //txt.setLineWrap (true);
        txt.setBounds (30, 400, 300, 60);
        f.getContentPane ().add (txt);

        if (state [drawNum [v]].equals (state[drawNum[v]]))
        {
            System.out.println ("correct");
        }


    }





    f.getContentPane ().add (coordinates);
    f.setSize (560, 600);
    f.setLocation (100, 100);
    f.setVisible (true);






}


protected void draw (Graphics g)
{
    //super.paintComponent (g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    for (int j = 0 ; j < polygons.length ; j++)
    {
        Color color = Color.blue;
        if (polygons [j] == selected)
            color = Color.red;
        g2.setPaint (color);
        g2.draw (polygons [j]);
    }
}


Selecting selecting;


public void Selector (Selecting s)
{
    selecting = s;
}


public void mousePressed (MouseEvent e)
{
    Point p = e.getPoint ();
    Polygon[] polygons = selecting.polygons;

    for (int j = 0 ; j < polygons.length ; j++)
    {
        if (polygons [0].contains (p))
        {
            //selecting.setSelection (polygons [0]);
            //System.out.println ("British Columbia");
            province = "British Columbia";
            break;
        }
        else if (polygons [1].contains (p))
        {
            //System.out.println ("Alberta");
            province = "Alberta";
            break;
        }
        else if (polygons [2].contains (p))
        {
            //System.out.println ("Saskatchewan");
            province = "Saskatchewan";
            break;
        }
        else if (polygons [3].contains (p))
        {
            //System.out.println ("Manitoba");
            province = "Manitoba";
            break;
        }
        else if (polygons [4].contains (p))
        {
            //System.out.println ("Ontario");
            province = "Ontario";
            break;
        }
        else if (polygons [5].contains (p))
        {
            //System.out.println ("Quebec");
            province = "Quebec";
            break;
        }
        else if (polygons [6].contains (p))
        {
            //System.out.println ("Newfoundland and Labrador");
            province = "Newfoundland and Labrador";
            break;
        }
        else if (polygons [7].contains (p))
        {
            //System.out.println ("Prince Edward Island");
            province = "Prince Edward Island";
            break;
        }
        else if (polygons [8].contains (p))
        {
            //System.out.println ("New Brunswick");
            province = "New Brunswick";
            break;
        }
        else if (polygons [9].contains (p))
        {
            //System.out.println ("Nova Scotia");
            province = "Nova Scotia";
            break;
        }
        else if (polygons [10].contains (p))
        {
            //System.out.println ("Yukon");
            province = "Yukon";
            break;
        }
        else if (polygons [11].contains (p))
        {
            //System.out.println ("Northwest Territories");
            province = "Northwest Territories";
            break;
        }
        else if (polygons [12].contains (p))
        {
            //System.out.println ("Nunavut");
            province = "Nunavut";
            break;
        }
        else
        {

        }
    }
}


public void mouseReleased (MouseEvent e)
{

}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.event.MouseInputAdapter;
导入java.awt.event.MouseMotionListener;
导入java.awt.event.MouseEvent;
公共类CPTprograss2扩展了JPanel
{
静态多边形[]多边形;
多边形选择;
静态字符串“=”;
公共CPTprograss2()
{
多边形=新多边形[13];
int[]bcx={95,78,108,26,11,16,41};
int[]bcy={267,204,141,87,161,208,241};
多边形[0]=新多边形(bcx,bcy,7);
int[]abx={96124157110,81};
int[]aby={258277160142196};
多边形[1]=新多边形(abx,aby,5);
int[]skx={126185201160};
int[]天空={277290174160};
多边形[2]=新多边形(skx,天空,4);
int[]mnx={187,232,232,275,253,243,206};
int[]mny={291、294、258、215、195、180、175};
多边形[3]=新多边形(mnx,mny,7);
int[]onx={23326528731032032935539136338348341321325235};
int[]ony={2953093013273344353593248324316 274256231215259};
多边形[4]=新多边形(onx,ony,16);
int[]qbx={349、374、412、425、431、445、470、488、432、422、413、433、409、396、382、380、357、334、343、340、361、341、346、344、347};
int[]qby={319、329、323、295、285、279、259、219、240、236、210、201、161、174、167、155、145、148、174、187、214、234、266、274、313};
多边形[5]=新多边形(qbx,qby,25);
int[]nflx={414,420,437,490,492,538,492,445};
int[]nfly={213,232,238,217,266,251,201,186};
多边形[6]=新多边形(nflx,nfly,8);
int[]peix={461474475464};
int[]peiy={29028729293};
多边形[7]=新多边形(peix,peiy,4);
int[]nox={42442245457464459459445436436428};
int[]noy={299285285291983071316303298298};
多边形[8]=新多边形(nox,noy,10);
int[]nbx={455462472488493488486481469468468468469463457};
int[]nby={325,328,312,297,282,290,296,300,308,312,320};
多边形[9]=新多边形(nbx,nby,12);
int[]ykx={18,39,72,89,94,84,82,89,86,92,95,90,101,88,19};
int[]yky={73,97,119,129,121,113,90,73,61,51,40,34,19,8,71};
多边形[10]=新多边形(ykx,yky,15);
int[]nwtx={90112163205214172 146 151 176208 221219195184177153146 140 119 104 92 96 94 89 90 86 85 87 95 93};
int[]nwty={129、146、161、172、122、102、58、50、52、60、37、26、18、20、36、42、38、28、22、20、35、45、53、58、75、85、103、114、120、126};
多边形[11]=新多边形(nwtx,nwty,30);
int[]nnx={205、244、255、265、259、290、301、305、314、316、331、346、361、389、395、393、372、392、384、375、361、350、338、317、299、287、259、242、220、208、155、147、172、216、207};
int[]nny={173、178、154、143、134、139、142、151、148、135、124、119、131、137、126、114、97、98、89、81、75、63、52、46、37、28、28、24、27、39、60、50、56、100、121、171};
多边形[12]=新多边形(nnx,nny,36);
}
公共静态void main(字符串[]args)
{
int max=13;
int drawNum[]=新的int[max];
drawNum[0]=(int)(Math.random()*max)+0;
while(drawNum[1]==drawNum[0])
{
drawNum[1]=(int)(Math.random()*max)+0;
}
而((drawNum[2]==drawNum[0])| |(drawNum[2]==drawNum[1]))
{
drawNum[2]=(int)(Math.random()*max)+0;
}
而((drawNum[3]==drawNum[0])| |(drawNum[3]==drawNum[1])| |(drawNum[3]==drawNum[2]))
{
drawNum[3]=(int)(Math.random()*max)+0;
}
而((drawNum[4]==drawNum[0])||
(drawNum[4]==drawNum[1])||
(drawNum[4]==drawNum[2])||
(drawNum[4]==drawNum[3]))
{
drawNum[4]=(int)(Math.random()*max)+0;
}
而((drawNum[5]==drawNum[0])||
(drawNum[5]==drawNum[1])||
(drawNum[5]==drawNum[2])||
(drawNum[5]==drawNum[3])||
(drawNum[5]==drawNum[4]))
{
drawNum[5]=(int)(Math.random()*max)+0;
}
而((drawNum[6]==drawNum[0])| |(drawNum[6]==drawNum[1])| |(drawNum[6]==drawNum[2])| |(drawNum[6]==drawNum[3])||
drawNum[6]==drawNum[4]| | drawNum[6]==drawNum[5])
{
drawNum[6]=(int)(Math.random()*max)+0;
}
而((drawNum[7]==drawNum[0])| |(drawNum[7]==drawNum[1])| |(drawNum[7]==drawNum[2])| |(drawNum[7]==drawNum[3])||
drawNum[7]==drawNum[4]| | drawNum[7]==drawNum[5]| | drawNum[7]==drawNum[6])
{
drawNum[7]=(int)(Math.random()*max)+0;
}
而((drawNum[8]==drawNum[0])| |(drawNum[8]==drawNum[1])| |(drawNum[8]==drawNum[2])| |(drawNum[8]==drawNum[3])||
drawNum[8]==drawNum[4]| | drawNum[8]==drawNum[5]| | drawNum[8]==drawNum[6]| | drawNum[8]==drawNum[7])
{
drawNum[8]=(int)(Math.random()*max)+0;
}
而((drawNum[9]==drawNum[0])| |(drawNum[9]==drawNum[1])| |(drawNum[9]==drawNum[2])| |(drawNum[9]==drawNum[3])| drawNum[9]==drawNum[4]||
drawNum[9]==drawNum[5]| | drawNum[9]==drawNum[6]| | drawNum[9]==drawNum[7]| | drawNum[9]==drawNum[10])
{
drawNum[9]=(int)(Math.random()*max)+0
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.BLUE);
            for(Polygon poly : polygons) {
                g.drawPolygon(poly);
            }
        }
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);

            for (int i = 0; i < polygons.length; i++) {
                if (polygons[i].contains(me.getPoint())) {
                    System.out.println("Clicked polygon " + i);
                    break;
                }
            }

        }