Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Bekomme Fehlermeldung, finde den Fehler nicht :(



  • Please log in to reply
7 replies to this topic
Spoons
  • Members
  • 13 posts
  • Last active: Dec 19 2014 12:55 PM
  • Joined: 12 Dec 2014

Mein Code:

Octave := 2

Input, SingleKey, L1	
CopiedKey := 0

MatchList1 := "q,w,e,r,t,z,u,i"
MatchList2 := "a,s,d,f,g,h,j,k"
MatchList3 := "y,x,c,v,b,n,m,`,"

q::1
w::2
e::3
r::4
t::5
z::6
u::7
i::8


a::1
s::2
d::3
f::4
g::5
h::6
j::7
k::8

y::1
x::2
c::3
v::4
b::5
n::6
m::7
; `,::8   Akzeptiert er nicht. Wie schreibt man `,::8 richtig?

Loop
{

	if SingleKey in MatchList1 
	{
		CopiedKey = SingleKey
		if (Octave = 1) 
			{
			Send %CopiedKey%
			Octave = 1
			Return
			}
		else if (Octave = 2) 
			{
			Send 9
			Send %CopiedKey%
			Octave = 1
			Return
			}
		else if (Octave = 3) 
			{
			Send 9
			Send 9
			Send %CopiedKey%
			Octave = 1
			Return
			}
	
	}

	if SingleKey in Matchlist2 
	{
		CopiedKey = SingleKey
		if (Octave = 1) 
			{
			Send 0
			Send %CopiedKey%
			Octave = 2
			Return
			}
		else if (Octave = 2) 
			{
			Send %CopiedKey%
			Octave = 2
			Return
			}
		else if (Octave = 3) 
			{
			Send 9
			Send %CopiedKey%
			Octave = 2
			Return
			}
	}
	
	if SingleKey in Matchlist3 
	{
		CopiedKey = SingleKey
		if (Octave = 1)
			{
			Send 0
			Send 0
			Send %CopiedKey%
			Octave = 3
			Return
			}
		else if (Octave = 2) 
			{
			Send 0
			Send %CopiedKey%
			Octave = 3
			Return
			}
		else if (Octave = 3) 
			{
			Send %CopiedKey%
			Octave = 3
			Return
			}
	
	}
	
	
	if SingleKey = F1
	{		
		break
	}
}
ExitApp
Return

Sinn des Codes: Er dient für ein Spiel in dem man Instrumente spielen kann. Da die Fähigkeitenleiste auf nur 10 begrenzt ist habe ich mir gedacht, ich schreibe ein Script welches sich die Oktave merkt und dann automatisch die durch die 9. und 10. Fähigkeit switcht. D.h. Ich kann damit meine Tastatur wie ein Klavier spielen.

 

/edit:

Hätte jetzt noch 3 Probleme. Da ich ja die Tastatur als Piano benutzen möchte, muss ich die Tasten Q-I, A-K und Y-, mit der Zahl 1-8 belegen.

Erstes Problem: Wenn ich nun eine der Tasten drücke erhalte ich auch die Ausgabe 1-8, jedoch gibt er mit nicht die 9 und 0 aus, die zum Wechseln der Oktave benötigt werden, wenn ich beispielsweise Q und dann C drücke. (Ausgabe müsste dann sein: 91 003)

Zweites Problem: Wenn ich F1 drücke schließt sich das Script nicht.

Drittes Problem: Wie kann ich denn die Komma-Taste zuweisen? `,::8 nimmt er nicht an.

 

:/ Ich bitte um Hilfe!

 

MfG



GEV
  • Members
  • 1364 posts
  • Last active:
  • Joined: 23 Oct 2013
Octave := 2

Processing := true
Input, SingleKey			
CopiedKey := 0

MatchList1 := "q,w,e,r,t,z,u,i"
MatchList2 := "a,s,d,f,g,h,j,k"
MatchList3 := "y,x,c,v,b,n,m,`,"

While (Process = true)
{
	if SingleKey in MatchList1 
	{
		CopiedKey = SingleKey

		if (Octave = 1) {
			Send %CopiedKey%
			Octave = 1
			Return
			}
		else if (Octave = 2) {
			Send 9
			Send %CopiedKey%
			Octave = 1
			Return
			}
		else if  (Octave = 3) {
			Send 9
			Send 9
			Send %CopiedKey%
			Octave = 1
			Return
			}
	}
	else
	if SingleKey in Matchlist2 
	{
		CopiedKey = SingleKey
		if (Octave = 1) {
			Send 0
			Send %CopiedKey%
			Octave = 2
			Return
			}
		else if (Octave = 2) {
			Send %CopiedKey%
			Octave = 2
			Return
			}
		else if  (Octave = 3) {
			Send 9
			Send %CopiedKey%
			Octave = 2
			Return
			}
	}
	else
	if SingleKey in Matchlist3 
	{
		CopiedKey = SingleKey
		if (Octave = 1) {
			Send 0
			Send 0
			Send %CopiedKey%
			Octave = 3
			Return
			}
		else if (Octave = 2) {
			Send 0
			Send %CopiedKey%
			Octave = 3
			Return
			}
		else if  (Octave = 3) {
			Send %CopiedKey%
			Octave = 3
			Return
			}
	}
	else
	if (Input = F1) 
	{		
		Processing := false
	}
}
ExitApp	
Return

??



briter
  • Members
  • 148 posts
  • Last active: Jan 31 2018 05:41 PM
  • Joined: 13 Nov 2014

da fehlt ein "if" hinter dem "else"



Spoons
  • Members
  • 13 posts
  • Last active: Dec 19 2014 12:55 PM
  • Joined: 12 Dec 2014

Habe jetzt auch noch ein paar kleine Fehler gefunden, die Error Message bleibt jedoch gleich. Den Sinn des Codes habe ich oben nochmal für euch reingeschrieben. Hatte ich leider auf die Schnelle vergessen. ^^



hd0202
  • Members
  • 709 posts
  • Last active: Feb 14 2016 08:05 PM
  • Joined: 13 Aug 2006

Die öffnende Klammer darf nur bei einem IF mit Expression auf derselben Zeile stehen.

if SingleKey in MatchList1

ist aber keine Expression. Deshalb 3 Zeilen korrigieren.

 

Hubert



Spoons
  • Members
  • 13 posts
  • Last active: Dec 19 2014 12:55 PM
  • Joined: 12 Dec 2014

Vielen Dank Hubert, jetzt bekomme ich keine Fehlermeldung mehr.

Hätte jetzt noch 3 Probleme. Da ich ja die Tastatur als Piano benutzen möchte, muss ich die Tasten Q-I, A-K und Y-, mit der Zahl 1-8 belegen.

Erstes Problem: Wenn ich nun eine der Tasten drücke erhalte ich auch die Ausgabe 1-8, jedoch gibt er mit nicht die 9 und 0 aus, die zum Wechseln der Octave benötigt werden, wenn ich beispielsweise Q und dann C drücke. (Ausgabe müsste dann sein: 91 003)

Zweites Problem: Wenn ich F1 drücke schließt sich das Script nicht.

Drittes Problem: Wie kann ich denn die Komma-Taste zuweisen? `,::8 nimmt er nicht an.

 

PS: Das Script habe ich im Headpost aktualsiert



hd0202
  • Members
  • 709 posts
  • Last active: Feb 14 2016 08:05 PM
  • Joined: 13 Aug 2006
✓  Best Answer

Dein Hauptproblem liegt in der frühen Umsetzung der Buchstaben in Ziffern, so kann natürlich kein Match mehr mit den Matchlisten Erfolg habengrin.png
Hier deshalb meine Version (an vielen Stellen geändert):

Octave := 2

MatchList1 := "q,w,e,r,t,z,u,i"
MatchList2 := "a,s,d,f,g,h,j,k"
MatchList3 := "y,x,c,v,b,n,m,_"
tab := {}
loop, 3
{
  ind := a_index
  loop, parse, matchlist%ind%, `,
  {
    tab[a_loopfield] := a_index
  }
}

Loop
{
Input, SingleKey, L1,{F1}
CopiedKey := 0


	if SingleKey in %MatchList1%
	{
		CopiedKey := tab[SingleKey]
		if (Octave = 1) 
			{
			Send %CopiedKey%
			Octave = 1
			continue
			}
		else if (Octave = 2) 
			{
			Send 9
			Send %CopiedKey%
			Octave = 1
			continue
			}
		else if (Octave = 3) 
			{
			Send 9
			Send 9
			Send %CopiedKey%
			Octave = 1
			continue
			}
	
	}

	if SingleKey in %Matchlist2%
	{
		CopiedKey := tab[SingleKey]
		if (Octave = 1) 
			{
			Send 0
			Send %CopiedKey%
			Octave = 2
			continue
			}
		else if (Octave = 2) 
			{
			Send %CopiedKey%
			Octave = 2
			continue
			}
		else if (Octave = 3) 
			{
			Send 9
			Send %CopiedKey%
			Octave = 2
			continue
			}
	}
	
	if SingleKey in %Matchlist3%
	{
		CopiedKey := tab[SingleKey]
		if (Octave = 1)
			{
			Send 0
			Send 0
			Send %CopiedKey%
			Octave = 3
			continue
			}
		else if (Octave = 2) 
			{
			Send 0
			Send %CopiedKey%
			Octave = 3
			continue
			}
		else if (Octave = 3) 
			{
			Send %CopiedKey%
			Octave = 3
			continue
			}
	
	}
	
	
	if errorlevel = Endkey:F1
	{		
;		break
		exitapp
	}
}
ExitApp
Return

,::_
; ,::8   ; Akzeptiert er nicht. Wie schreibt man `,::8 richtig

Achtung: setzt  AHK Version 1.1.... voraus, notfalls von ahkscript.org downloaden
 
Viel Erfolg und gutes Lernen
 
Hubert



Spoons
  • Members
  • 13 posts
  • Last active: Dec 19 2014 12:55 PM
  • Joined: 12 Dec 2014

Vielen Dank Hubert, jetzt funktioniert alles!

Was ich aber noch bemerkt habe, dass das Script noch ein wenig zu langsam arbeitet. Gibt es dort Möglichkeiten den Loop schneller durchlaufen zu lassen oder das Programm in irgendeiner Hinsicht zu optimieren? /edit: Hab dafür mal ein Extra Thread aufgemacht: Link