Dvojrozmerné polia
Ako som sa tak pozeral na príklady z dávnejšieho článku, napadlo ma, ako ich vylepšiť. Totižto my sme riešili hod kocky a pohyb hráča klasickým výpisom cez MsgBox. Žiadna iterácia, dynamika ani algoritmus, ktorý by intuitívne „hýbal“ panáčikom alebo hádzal kockou. My sme len „oklamali“ užívateľa tým, že sa niečo deje v programe rozvetvenými podmienkami.
Skúsme sa ale teraz zamyslieť, nepozdáva sa vám kocka ako nejaké dvojrozmerné pole o hranách 3x3? A je vôbec možné implementovať logiku hodu kocky s pomocou dvojrozmerných polí? Pokúsime sa o to! A v ďalšom diele skúsime podobnú metodiku i pri simulácii pohybu hráča.
Čo sa týka dvojrozmerných polí, tak pre zopakovanie deklarujeme takto napr:
Dim pole(1 To 3, 1 To 5)
Takto deklarované pole nie je dvojrozmerné v pamätí počítača, ide o klam. V skutočností sú to dve deklarované jednorozmerné polia. Ale, pre nás ľudí je lepšie si to predstavovať ako dvojrozmernú kocku alebo obdĺžnik.
Hod kockou
Dvojrozmerné pole nebude pri hode kocky veľkostí 3x3, ale 3x5. Je to kvôli tomu, aby sme tu kocku napasovali pekne do šablóny, ktorú sme si vytvorili v zmienenom článku.
1. program: Hod kockou
Sub hodKocky REM začiatok procedúry Dim vstup As String REM deklarácie premenných Dim tip As Integer Dim hod As Integer Dim kocka As String Dim pole(1 To 3, 1 To 5) Dim oznamVitaz As String vstup = InputBox("Ideme si hodiť kockou! Skús tipnuť, aké číslo dostaneme pri hode kockou? Tipujte štandardne od 1 do 6") If IsNull(vstup) Then MsgBox "Nič si nezadal!" Exit Sub End If If Len(Trim(vstup)) = 0 Then MsgBox "Nič si nezadal!" Exit Sub End If If Int(Trim(vstup)) <= 0 OR Int(Trim(vstup)) >= 7 Then MsgBox "Zadal si mimo intervál hodu kocky!" Exit Sub End If tip = Int(vstup) hod = Int((6-1+1)*Rnd+1) REM hadžeme imaginárnou kockou If hod = 1 Then For i = 1 To 3 For j = 1 To 5 If (i = 2 AND j = 3) Then REM tu sa skryva jadro toho, čo bude dvojrozmerne pole obsahovať1 pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = 2 Then For i = 1 To 3 For j = 1 To 5 If (i = 1 AND j = 2) OR (i = 3 AND j = 4) Then pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = 3 Then For i = 1 To 3 For j = 1 To 5 If (i = 1 AND j = 2) OR (i = 2 AND j = 3) OR (i = 3 AND j = 4) Then pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = 4 Then For i = 1 To 3 For j = 1 To 5 If (i = 1 AND j = 2) OR (i = 1 AND j = 4) OR (i = 3 AND j = 2) OR (i = 3 AND j = 4) Then pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = 5 Then For i = 1 To 3 For j = 1 To 5 If (i = 1 AND j = 2) OR (i = 1 AND j = 4) OR (i = 2 AND j = 3) OR (i = 3 AND j = 2) OR (i = 3 AND j = 4) Then pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = 6 Then For i = 1 To 3 For j = 1 To 5 If (i = 1 AND j = 2) OR (i = 1 AND j = 3) OR (i = 1 AND j = 4) OR (i = 3 AND j = 2) OR (i = 3 AND j = 3) OR (i = 3 AND j = 4) Then pole(i,j) = "*" Else pole(i,j) = " " End If Next Next End If If hod = tip Then oznamVitaz = "Uhadol si, blahoželám" Else oznamVitaz = "Neuhadol si, smola" End If kocka = "-----" & Chr(10) & pole(1,1) & pole(1,2) & pole(1,3) & pole(1,4) & pole(1,5) & Chr(10) & pole(2,1) & pole(2,2) & pole(2,3) & pole(2,4) & pole(2,5) & Chr(10) & pole(3,1) & pole(3,2) & pole(3,3) & pole(3,4) & pole(3,5) & Chr(10) & "-----" MsgBox "Hadžem kockou" & Chr(10) & Chr(10) & kocka & Chr(10) & Chr(10) & oznamVitaz End Sub REM koniec procedúry