Witam piszę prosty translator morsa na androida. Dziś rano napisałem kod i działał lecz teraz kiedy do niego wróciłem funkcja wykonuje się losową ilość razy oraz mam błędy typu za mała tablica za dużo znaków. Problem jest prosty dla osoby patrzącej na kod jako "obcy" więc proszę o korektę ew sugestie.
KOD uproszczony
var znak:String;
var i:int;
var kropkad : AudioClip;
var kreskad : AudioClip;
function kropka(){
audio.PlayOneShot(kropkad);
}
function kreska(){
audio.PlayOneShot(kreskad);
}
function ponownie(){
koduj_znak(znak);
}
function koduj_znak(znak:String)
{
if ((znak[i]=='a') || (znak[i]=='A')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='b') || (znak[i]=='B')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='c') || (znak[i]=='C')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='d') || (znak[i]=='D')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kropka(); yield WaitForSeconds (0.8); }
if ((znak[i]=='e') || (znak[i]=='E')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='f') || (znak[i]=='F')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='g') || (znak[i]=='G')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='h') || (znak[i]=='H')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='i') || (znak[i]=='I')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='j') || (znak[i]=='J')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='k') || (znak[i]=='K')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='l') || (znak[i]=='L')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='m') || (znak[i]=='M')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='n') || (znak[i]=='N')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='o') || (znak[i]=='O')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='p') || (znak[i]=='P')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kropka(); yield WaitForSeconds (0.8);}
if ((znak[i]=='q') || (znak[i]=='Q')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='r') || (znak[i]=='R')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='s') || (znak[i]=='S')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.8); }
if ((znak[i]=='t') || (znak[i]=='T')) {Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='u') || (znak[i]=='U')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='v') || (znak[i]=='V')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='w') || (znak[i]=='W')) {Debug.Log(znak[i]);i++; kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.8); }
if ((znak[i]=='x') || (znak[i]=='X')) { Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kropka();yield WaitForSeconds (0.2);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='y') || (znak[i]=='Y')) { Debug.Log(znak[i]);i++; kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kreska();yield WaitForSeconds (0.4);kreska(); yield WaitForSeconds (0.8);}
if ((znak[i]=='z') || (znak[i]=='Z')) {Debug.Log(znak[i]); i++; kreska();yield WaitForSeconds (0.4);kreska();yield WaitForSeconds (0.4);kropka();yield WaitForSeconds (0.2);kropka(); yield WaitForSeconds (0.8);}
if(i!=znak.Length){ponownie();}
}
function OnGUI(){
znak = GUI.TextField (Rect (0, 0, Screen.width, Screen.height/6), znak, 1024);
var buttonx:int = Screen.height/6;
var buttony: int=Screen.width/6;
if (GUI.RepeatButton(Rect((Screen.width-buttony)/2,(Screen.height-buttonx)/2,buttony,buttonx),"")){
i=0;
koduj_znak(znak);
}
}
i teraz mały opis działania w wpisuje sobie np sms :
słyszę dokładnie to co w debug log
6 x s (nałożone na siebie)
1 x m (poprawne)
1 x s (poprawne)
5x info o tablicy typu "IndexOutOfRangeException: Array index is out of range" do lini 49
1x "IndexOutOfRangeException: Array index is out of range" do 43
Niby mam error o za małej tablicy ale zmiana rozmiaru nie pomaga.