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
Jednorozmerné polia sme už viac krát využili počas seriálu. V tomto diele sa viac zameriame na dvojrozmerné polia.












