Autor Beitrag
mick
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Do 20.01.05 14:45 
hi.

folgendes:
habe ein schachprogramm geschrieben. per mausklick waehlt man das grafische spielbrettfeld aus, von dem gezogen werden soll und per zweitem mausklick waehlt man das zugfeld aus, wo also hingezogen werden soll. nebenbei: in der statusbar wird auch immer das aktuelle spielbrettfeld, ueber dem sich der mauszeiger befindet, angezeigt (z.b. "Feld e4").

bei mir klappt alles einwandfrei (winxp, 1024*768, 32 bit farbtiefe), auf einem w2k- und w98se-system auch. nun habe ich folgendes tester-feedback bekommen:

Doch bereits beim ersten Spielzug stosse ich auf (technische) Probleme: Ich kann keine meiner schwarzen Figuren korrekt auswählen, d.h. sobald ich einen Bauern auswähle wird nicht dieser sondern der jeweils rechte Nachbar gezogen, z.B. statt E7 wird F7 bewegt. Die "falsche" Positionierung der Maus kann ich auch an der Angabe der Statusbar entnehmen: z.B wird bei A3 einmal A1 und dann A2 in der Statusbar angezeigt, statt D6 E6. Das bedeutet, bei den weissen Figuren scheint die Verschiebung vertikal und bei den schwarzen Figuren horizontal zu sein. Die Bildschirmauflösung habe ich entsprechend den Angaben in der Hilfe (Systemvoraussetzungen) vorgenommen. Die Springer kann ich gar nicht ziehen. Das Laden und Speichern von Spielzügen klappt (bisher) völlig ohne Probleme. Vielleicht können Sie diese Probleme analysieren und beheben, indem Sie das Programm auf anderen PC testen.
Daher konnte ich nur etwas umständlich meinen ersten Zug tätigen.



hat jmd. von euch erfahrungen oder eine idee, woran das liegen koennte? klar, habe jetzt keinen code hier abgedruckt (lese die mauskoordinaten ueber mausdown (x,y,) aus), aber vielleicht steckt hinter diesem fehler ja ein bekanntes problem, das mir jmd. erklaeren kann...

dank + ciao,
mijozi.
mick Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Do 20.01.05 23:58 
nachtrag: sein bildlicher fehler-"bericht". das grafische spielbrett stimmt, aber die erkennung der spielbrettfelder ist bei ihm zu klein: normalerweise sollte das rote gitter buendig sein mit den spielfeldern des spielfeld-images.

ciao,
mijozi.



user defined image
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 21.01.05 00:22 
Dazu solltest Du wohl ein bisschen Code von Deiner MouseOver-Prozedur zeigen, denn das Raten wird hier sehr schwierig ... Glaskugel ist in der Reinung :(
mick Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Sa 29.01.05 13:39 
hi uwe,

ok, hast wohl recht. komme nur im moment nicht dazu das vernuenftig zu beschreiben. hab dann eben erstmal pech gehabt. danke vorerst jedenfalls,

ciao,
mijozi.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Sa 29.01.05 14:36 
mick hat folgendes geschrieben:
ok, hast wohl recht. komme nur im moment nicht dazu das vernuenftig zu beschreiben. hab dann eben erstmal pech gehabt. danke vorerst jedenfalls

Du brauchst da nicht viel beschreiben, ein wenig Code und eine kleine Erklärung würden für den Anfang erstmal reichen.
mick Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Sa 29.01.05 15:47 
finde leider nichts, das aus dem code interessant waere.

habe ein grosses image fuer spielfeld. darauf 64 kleine spielfeld-images (fuer jedes feld) und auf denen drauf liegt wieder ein einzelnes grosses transparentes image (so gross wie spielfeldimage "ganz unten"), ueber das ich die mauskoordinaten abfrage (mousedown) (frag nicht warum ich das so mache, dauert zu lange zu erklaeren). diese werden dann umgerechnet in die interne darstellung meines spielfeldes (ein lineares array). ich mache dann bereichsabfragen: wenn mauskoordinaten zw. z.b. 500 und 570 auf x-achse und 400 und 470 auf y-achse, dann ist es das interne spielfeld array[6] oder so, das dann z.b. fuer feld b4 steht.
wie im bild von meinem kollegen zu sehen, scheinen seine kleines feldimages aber nochmals kleiner als sie sein sollten, keine ahnung. dadurch werden die mauskoordinaten dann auch falsch umgerechnet. wenn er z.b. auf das spielfeld ganz unten rechts klickt, dann passiert nichts, weil der wert entweder nicht richtig erkannt wird oder gar nicht, weiss nicht. ganz komisch das ganze. auf allen anderen bisher getesteten systemen klappt das. er verwendet wie ich winxp.

du siehst, komischer fehler. zu kompliziert, vernuenftig zu erklaeren, daher hatte ich bis auf deinen erneuten beitrag auch aufgegeben, es weiter zu versuchen. haette aber sein koennen, dass jmd. im forum so etwas bekannt vorkommt. auf einen solchen spontanen "'ach ja'-reflex" hatte ich gehofft. ;-)

ciao,
mijozi.
Martin2005
Hält's aus hier
Beiträge: 13

Windows NT 4, Windows 2000, Windows XP, Windows 2003 Server, Windows NT 4 Server, Kanotix
D6 Prof
BeitragVerfasst: So 30.01.05 13:54 
8)

Ich weiss leider nicht, über welche Schnittstelle du deine Grafik darstellst.
Obwohl das auch egal ist du solltest das eigentlich ganz einfach umschreiben können.

Ich würde gar kein Muster definieren, lass doch einfach die Position ausrechnen.
Der Folgende Code wäre zum Beispiel eine praktikable Lösung.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
var ReiheX,ReiheY:byte; 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var teilerX,teilerY:integer;
    RandLinks,RandRechts :integer;
    RandOben,RandUnten   :integer;
begin
  RandLinks:=10; //PIXEL linker Rand
  RandRechts:=10; //PIXEL rechter Rand
  RandOben:=10; //PIXEL
  RandUnten:=10; //PIXEL

  teilerX:=(Image.Width-RandLinks-RandRechts) div 8;
  teilerY:=(Image.Height-RandLinks-RandRechts) div 8;

  if (X>RandLinks) and (X<Image.Height-RandRechts) and
     (Y>RandOben)  and (Y<Image.Height-RandUnten) then begin
    ReiheX:=(X-RandLinks) div teilerX+1;
    ReiheY:=(Y-RandOben) div teilerY+1;
  end else begin
    ReiheX:=0;
    ReiheY:=0;
  end;
end;


Gruss

Martin

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
mick Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: So 27.02.05 21:40 
erstmal danke!

ciao,
mijozi.