Programovanie makier v LibreOffice: Dvojrozmerné polia (1)

LibreOffice Jednorozmerné polia sme už viac krát využili počas seriálu. V tomto diele sa viac zameriame na dvojrozmerné polia.   

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

Zadáme tip Zadáme tip

Kocka bola hodená Kocka bola hodená

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 2
 

Komentáře

user avatar Mik
Odpovědět
Programovanie makier v LibreOffice: Dvojrozmerné polia (1)
11. 10. 2017, 18:19:04
Ten hod kočky je geniální. Je to kocka, alebo mačka?
user avatar Lukáš Jelínek
Odpovědět
Re:Programovanie makier v LibreOffice: Dvojrozmerné polia (1)
11. 10. 2017, 21:37:00
Díky za upozornění, opravil jsem. Kočkou se samozřejmě nehází, kočky netýráme ;-)

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz