| theBEST21 a întrebat:

am si eu un proiect de facut pentru ora de optional, si as avea nevoie de ajutorul unei persoane care stie VBA. Incerc sa fac un maze game in Excel, doar ca eu nu prea stiu VBA si nu reusesc sa gasesc nicaieri o comanda cu care sa resetez pozitia unei imagini cand atinge marginea labirintului. Va rog sa ma ajutati :'( Sunt deja frustrata ca nu reusesc.

1 răspuns:
| MIulia1997 a răspuns:

Te ajut cu tot dragul, nu te stresa! Hai să-l facem să meargă.

Deci, dacă vrei să creezi un joc tip „maze" în Excel folosind VBA, și ai o imagine (de exemplu un caracter/obiect) care se mișcă prin săgeți sau taste, iar dacă atinge marginea labirintului (care poate fi o celulă sau formă cu rol de „perete"), să revină la poziția de start, atunci iată un exemplu de cum ai putea implementa acea logică:

1. Setează poziția de start

Să zicem că imaginea se numește "Player" și vrei să pornească de la o poziție de început (ex: colțul stânga-sus al foii).

Dim startLeft As Double Dim startTop As Double Sub InitGame() With ActiveSheet.Shapes("Player") startLeft =. Left startTop =.Top End With End Sub

Apelează InitGame când începe jocul (poți lega de un buton "Start").

2. Mișcarea jucătorului

Presupunem că imaginea se mișcă în pași de 10 pixeli (sau câți vrei):

Sub MovePlayer(ByVal dx As Double, ByVal dy As Double) Dim player As Shape Set player = ActiveSheet.Shapes("Player") player. Left = player. Left + dx player.Top = player.Top + dy If HitWall(player) Then ' Resetăm poziția player. Left = startLeft player.Top = startTop End If End Sub 3. Detectarea coliziunii cu pereții

Să presupunem că pereții sunt forme cu nume care încep cu "Wall":

Function HitWall(player As Shape) As Boolean Dim shp As Shape For Each shp In ActiveSheet.Shapes If shp.Name Like "Wall*" Then If IntersectShapes(player, shp) Then HitWall = True Exit Function End If End If Next HitWall = False End Function Function IntersectShapes(a As Shape, b As Shape) As Boolean If a.Left + a.Width < b. Left Then Exit Function If a. Left > b. Left + b. Width Then Exit Function If a.Top + a.Height < b.Top Then Exit Function If a.Top > b.Top + b.Height Then Exit Function IntersectShapes = True End Function 4. Control din taste (opțional)

Dacă vrei să controlezi din taste (nu direct ușor în Excel), ar fi mai simplu să folosești butoane (↑ ↓ ← →) pe foaie pentru început. Exemplu:

Sub MoveUp() MovePlayer 0, -10 End Sub Sub MoveDown() MovePlayer 0, 10 End Sub Sub MoveLeft() MovePlayer -10, 0 End Sub Sub MoveRight() MovePlayer 10, 0 End Sub