Eventuell könntest Du die "Clipping Rectangles" der frei liegenden Karten in eine Liste packen und dann bei jedem Klick nur die Liste durchsuchen. Sobald eine Karte verschwindet, muß sie natürlich auch aus der Liste entfernt werden. Dadurch solltest Du immer nur ein paar Listenpositionen durchsuchen müssen.
Alternativ könntest Du einen zweidimensionalen Array als "Lookup-Table" benutzen. Der braucht ja nicht die Dimensionen der Bildschirmaufllösung zu haben, sondern bloß Auflösung durch 10 oder so (abhängig von Größe und Position der Karten). Beim Start wird der Puffer mit ungültigen Werten vorbelegt (z.B. "-1")- Bei "Aktivierung" einer Karte (also wenn sie anwählbar sein soll), schreibst Du an die entsprechenden Positionen des Puffers die Nummer der Karte. Bei "Deaktivierung" der Karte löscht Du die Nummern wieder. Je nach Auflösung des Lookup-Puffers dauert das Aktivieren/Deaktivieren dann halt etwas länger, dafür geht die Überprüfung, ob eine Karte angeklickt wurde, extrem schnell: aus der Position des Mausklicks berechnest Du die Puffer-Position (z.B. x/10, y/10), dann liest Du den Wert des Puffers: ist er -1, wurde keine aktive Karte angeklickt, ansonsten hast Du sofort die Nummer der Karte.
Wenn Du die Auflösung des Buffers möglichst klein wählen kannst, könnte dieser Ansatz recht performant sein. Speziell die Latenz beim Klicken ist hier sowieso optimal.
Nebenbei: habe mal ein bißchen gespielt (ohne die Regeln recht zu kennen), aber ich vermute mal, das ist so 'ne Art Solitaire? Jedenfalls scheint es mir so, nach ein ppar Runden die oben angewählten Karten erst entfernt werden, wenn man unten auf den Stapel klickt. Gegen Ende ist das eigentlich immer so. Kann es sein, daß Dein Suchalgorithmus dann gar nicht mehr funktioniert oder etwas anderes im Eimer ist?
Wenn z.B. unten eine 8 liegt, kann man oben die 7, 6 , 5 nacheinander klicken, aber keine der Karten verschwindet. Erst wenn man sich eine neue Karte geben läßt, werden die Karten dann auf einmal entfernt.
Es scheint auch (noch) keine Erkennung zu geben, ob man gewonnen hat, oder?