MausFiguren erkennen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

FWeinb

ehemals "ich"

Betreff: MausFiguren erkennen

BeitragDo, Mai 03, 2007 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich wolte mal nein Mauszeiger erkennungsprogramm machen ich habe hier nen Code der auch so weit geht aber ich weiß nicht wie ich das am besten abfragen soll nur Links Rechts hoch und runter reicht mir nicht ich will auch obenRechts usw das ist bei mir auch so weit drin nur scheint es nicht richtieg zu funktionieren weiß einer Worann das Liegt ??

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()


Type Maus
Field X,Y
End Type

Dim R$(1000)


While Not KeyHit(1)
 Cls
 
  X=MouseX()
  Y=MouseY()
 
  If X<>Xa And Y<>Ya And MouseDown(1) Then
    p.Maus=New Maus
    p\X=X
    p\Y=Y
  EndIf

  For p.Maus=Each Maus
   p1.Maus=Before P
    If p1.Maus<>Null Then 
     Line p\x,p\y,p1\x,p1\y
    EndIf   
  Next
 
  f.Maus=Last Maus
  If f.Maus<>Null Then
  nf.Maus=Before f.Maus   
   If nf.Maus<>Null Then 
    If f\y-nf\y<0 Then ;Oben
     If Richtung=3 Then
       Richtung=2
      Else
       Richtung=1
     EndIf
    EndIf
    If f\x-nf\x>0 Then ;Rechts
      If Richtung=5 Then
       Richtung=4
      Else
       Richtung=3
     EndIf
    EndIf
    If f\y-nf\y>0 Then ;Unten
      If Richtung=7 Then
       Richtung=6
      Else
       Richtung=5
     EndIf
    EndIf 
    If f\x-nf\x<0 Then ;Links
      If Richtung=1 Then
       Richtung=8
      Else
       Richtung=7
     EndIf
    EndIf 
   EndIf
  EndIf
   Select Richtung
     Case 1
      Text 10,10,"Oben"
      R$(i)="Oben"
     Case 2
      R$(i)="ObenRechts"
     Case 3
      Text 10,10,"Rechts"
      R$(i)="Rechts"
     Case 4
      R$(i)="RectsUnten"
     Case 5
      Text 10,10,"Unten"
      R$(i)="Unten"
     Case 6
      R$(i)="UntenLinks"
     Case 7
      Text 10,10,"Links"
      R$(i)="Links"
     Case 8
      R$(i)="LinksOben"
     End Select
  x=xa
  y=ya
 i=i+1
 Flip
Wend
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

Krümel

BeitragDo, Mai 03, 2007 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Ansatz sieht so aus:
(Ich werte den Winkel zwischen der aktuellen und letzten Mausposition aus)
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

mxo=MouseX()
myo=MouseY()

While Not KeyHit(1)
   mx=MouseX()
   my=MouseY()
   dx=(mxo-mx)
   dy=(myo-my)   
   d=Sqr(dx*dx+dy*dy)
   If d>10
      Line mxo,myo,mx,my
      mxo=mx
      myo=my
   
      w=Abs(ATan2(dx,dy)+180)/45
      Select w
         Case 0,8 AppTitle "Runter "
         Case 1 AppTitle "schräg Runter / Rechts "
         Case 2 AppTitle "Rechts "
         Case 3 AppTitle "schräg Hoch / Rechts "
         Case 4 AppTitle "Hoch "
         Case 5 AppTitle "schräg Hoch / Links "
         Case 6 AppTitle "Links "
         Case 7 AppTitle "schräg Runter / Links "
         Default AppTitle ""
      End Select
   EndIf
   
   Flip
Wend
 

FWeinb

ehemals "ich"

BeitragDo, Mai 03, 2007 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Super danke aber ich habe mal noch nen Bischen weiter gesucht und dan Habe ich im BMax Forum genau das gefunden was ich gesucht habe jetzt geht das super ^^

Ich werde den Code gleich mal hier Posten.

[Edit]
So das ist er ist zum Zahlen erkennen ganz gut aber noch nix Besonderes ^^

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Global tmp_x
Global tmp_y
Global Geste$
Global tolerance=30
Global Rz

Type Maus
Field X,Y
End Type


While Not KeyHit(1)
 Cls
 
  X=MouseX()
  Y=MouseY()
 
  If X<>Xa And Y<>Ya And MouseDown(1) Then
    p.Maus=New Maus
    p\X=X
    p\Y=Y
  EndIf

  For p.Maus=Each Maus
    p1.Maus=Before p.Maus
     If p1<>Null Then
      Line p\x,p\y,p1\x,p1\y
     EndIf
       If MouseDown(1)
         If Not mouse_press
            tmp_x = MouseX()
            tmp_y = MouseY()
            mouse_press = True
         EndIf
         AddPoint(tmp_x,tmp_y,MouseX(),MouseY())
         ElseIf mouse_press
         Erkennung()
         Del()
         mouse_press = False
        EndIf
  Next

Text 10,10,Rz
Text 10,40,Geste$
 
 Flip
Wend


Function AddPoint(x1,y1,x2,y2)
xdif= x1-x2
ydif= y1-y2
     
     
      If Abs(xdif)<tolerance/2 And Abs(ydif)<tolerance/2
         Return
      EndIf
   
      If Abs(xdif)>Abs(ydif)
         If xdif<0
            Gest$=Gest$+"R"
         Else
            Gest$=Gest$+"L"
         EndIf
      Else
         If ydif<0
            Gest$=Gest$+"D"
         Else
            Gest$=Gest$+"U"
         EndIf
      EndIf
     
      tmp_x = MouseX()
      tmp_y = MouseY()
      If Right(Geste$,1)<>Gest$ Then
         Geste$=Geste$+Gest$
      EndIf

End Function

Function Del()
    If Not Geste$ Then Return
      Geste = ""
      For p.Maus=Each Maus
       Delete p.Maus
      Next
End Function

Function Erkennung()
Select Geste$
Case "LDRUL":Rz="0"
Case "URD":Rz="0"
Case "RUD":Rz="1"
Case "UD":Rz="1"
Case "URDLDR":Rz="2"
Case "URDR":Rz="2"
Case "RDLRDL":Rz="3"
Case "LUD":Rz="4"
Case "LURD":Rz="4"
Case "LRURD":Rz="4"
Case "LDRDL":Rz="5"
Case "LDRULD":Rz="6"
Case "RDLR":Rz="7"
Case "RD":Rz="7"
Case "LDRDLU":Rz="8"
Case "LDRDLUL":Rz="8"
Case "LDRUDL":Rz="9"
End Select
End Function
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

skey-z

BeitragDo, Mai 03, 2007 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ist schon ne ganz gute erkennung, aber die abfrage solltest du noch mal überarbeiten, den keiner wird eine 4 zb. so zeichnen

|-----|
-------| |
-------| |

LRURD

DRUD oder einfach DRD wären besser geeignet, bei anderen Zahlen gibt es auch noch probleme
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

FWeinb

ehemals "ich"

BeitragFr, Mai 04, 2007 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich wieß ich bin grade am Überlegen ob ich nicht do die Methode mit den 8 RIchugnen nehmen ist bischen genauer denke ich aber muss mal sehen

[Edit]
Ich habe jetzt mal nen Kleines SPiel angefangen also wie auf dem DS mit dem DR da ich weiß nicht wie das heist man bekommt ne aufgabe und muss das ergebins hinschreiben ^^

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Global tmp_x
Global tmp_y
Global Geste$
Global tolerance=30
Global Rz$
Global erg
Global zei 
Global z,z1

SeedRnd MilliSecs()

Type Maus
Field X,Y
End Type

 Aufgabe()
Dat=WriteFile("1.txt")
While Not KeyHit(1)
 Cls
  If Abs(erg)=Rz Then
   Aufgabe()
   Rz=""
  Else
  Select zei
    Case 1
     erg=z+z1
    Text 400,300,z+"+"+z1,1,1
   Case 2
    erg=z-z1
    Text 400,300,z+"-"+z1,1,1
   Case 3
    erg=z*z1
    Text 400,300,z+"*"+z1,1,1
   Case 4
    If z1<>0 Then
      erg=z/z1
    Else
     erg=0
    EndIf
Text 400,300,z+"/"+z1,1,1
End Select
  EndIf
  X=MouseX()
  Y=MouseY()
 
  If X<>Xa And Y<>Ya And MouseDown(1) Then
    p.Maus=New Maus
    p\X=X
    p\Y=Y
  EndIf

For p.Maus=Each Maus
    p1.Maus=Before p.Maus
     If p1<>Null Then
      Line p\x,p\y,p1\x,p1\y
     EndIf
       If MouseDown(1)
         If Not mouse_press
            tmp_x = MouseX()
            tmp_y = MouseY()
            mouse_press = True
         EndIf
         AddPoint(tmp_x,tmp_y,MouseX(),MouseY())
         ElseIf mouse_press
         Erkennung()
         Del()
         mouse_press = False
        EndIf
  Next
If KeyHit(59) Then
Rz=""
EndIf
Text 10,10,Rz
Text 10,40,Geste$
 Flip
Wend
Function AddPoint(x1,y1,x2,y2)
xdif= x1-x2
ydif= y1-y2
       
      If Abs(xdif)<tolerance/2 And Abs(ydif)<tolerance/2
         Return
      EndIf
   
      If Abs(xdif)>Abs(ydif)
         If xdif<0
            Gest$=Gest$+"R"
         Else
            Gest$=Gest$+"L"
         EndIf
      Else
         If ydif<0
            Gest$=Gest$+"D"
         Else
            Gest$=Gest$+"U"
         EndIf
      EndIf
     
      tmp_x = MouseX()
      tmp_y = MouseY()
      If Right(Geste$,1)<>Gest$ Then
         Geste$=Geste$+Gest$
      EndIf

End Function

Function Del()
    If Not Geste$ Then Return
      Geste = ""
      For p.Maus=Each Maus
       Delete p.Maus
      Next
End Function

Function Erkennung()
Select Geste$
Case "LDRUL":Rz=Rz+"0"
Case "RUD":Rz=Rz+"1"
Case "UD":Rz=Rz+"1"
Case "URDLDR":Rz=Rz+"2"
Case "URDR":Rz=Rz+"2"
Case "RDR":Rz=Rz+"2"
Case "RDLRDL":Rz=Rz+"3"
Case "RDRDL":Rz=Rz+"3"
Case "URDLRDLU":Rz=Rz+"3"
Case "RDL":Rz=Rz+"3"
Case "URDLDL":Rz=Rz+"3"
Case "RDLRDLU":Rz=Rz+"3"
Case "RDRDL":Rz=Rz+"3"
Case "URDL":Rz=Rz+"3"
Case "LUD":Rz=Rz+"4"
Case "UDR":Rz=Rz+"4"
Case "LDR":Rz=Rz+"4"
Case "DR":Rz=Rz+"4"
Case "LURD":Rz=Rz+"4"
Case "LRURD":Rz=Rz+"4"
Case "LDRDL":Rz=Rz+"5"
Case "LDRULD":Rz=Rz+"6"
Case "DRULD":Rz=Rz+"6"
Case "RDLR":Rz=Rz+"7"
Case "RD":Rz=Rz+"7"
Case "LDRDLU":Rz=Rz+"8"
Case "LDRDLUL":Rz=Rz+"8"
Case "LDRUDL":Rz=Rz+"9"
End Select
End Function

Function Aufgabe()
z=Rnd(0,10)
z1=Rnd(0,10)
zei=Rnd(1,4)

End Function
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group