Giocare con Excel | BMWpassion forum e blog

Giocare con Excel

Discussione in 'Off-Topic' iniziata da DjMarvel, 13 Giugno 2006.

  1. DjMarvel

    DjMarvel Presidente Onorario BMW

    8.941
    1.060
    28 Dicembre 2004
    Reputazione:
    126.772.168
    330Cd,e92 30d,F30 30d,G30 30d
    è impressionante ma con excel si può giocare ...

    tutti conoscono il gioco snake :mrgreen: volendo si può fae snake con excel :eek:

    basta creare una macro e definire quali sono i cambi (le celle) dove far girare il nostro serpentino! :mrgreen:

    se volete giocarci senza fare tutta la macro ecco il giochino

    http://download.microsoft.com/download/3/4/a/34adfd37-7426-4e8b-b999-508e4ef8967c/Giocare_Excel.zip

    :mrgreen:

    Codice:
    Dim XStart As Integer    ' angolo in alto a sinistra
                             ' del campo di gioco
    Dim YStart As Integer    ' angolo in alto a sinistra
                             ' del campo di gioco
    Dim XMax As Integer      ' angolo in basso a destra
                             ' del campo di gioco
    Dim YMax As Integer      ' angolo in basso a destra
                             ' del campo di gioco
    Dim L As Integer         ' lunghezza serpente
    Dim Area As Long         ' dimensioni area di gioco
    Dim S As Worksheet       ' foglio contenente il gioco
    Dim C As Worksheet       ' foglio contenente le coordinate
                             ' di tutti i pezzi del serpente
    Dim DIR As Range         ' direzione del serpente
    Dim CURDIR As String     ' direzione corrente del serpente
    Dim STATUS As Range      ' stato del gioco
    Dim SnakeStart As Long   ' casella su C della casella che
                             ' contiene le coordinate della testa
    Dim SnakeEnd As Long     ' casella su C della casella che
                             ' contiene le coordinate della coda
    Dim SnakeHeadX As Integer ' nuova posizione della testa
    Dim SnakeHeadY As Integer ' nuova posizione della testa
    Dim TIMEDELAY As Double   ' ritardo tra due eventi consecutivi
                              ' (velocità del gioco)
    Dim XCoord As Integer     ' coordinate del cibo
    Dim YCoord As Integer     ' coordinate del cibo
    Dim ColorSnake As Integer ' colore del serpente
    Dim ColorFood As Integer  ' colore del cibo
    Dim Step As Long          ' numero di passi effettuati dal serpente
    Dim Punti As Long         ' punteggio del gioco raggiunto
    Dim PuntiCELL As Range    ' cella contenente il punteggio
    Dim Extrapunti As Integer ' Estrapunteggio
    Dim ExtraPuntiCell As Range ' cella contenente l'extrapunteggio
    Dim MaxExtraPunti As Integer ' massimo numero di extrapunti concessi
    
    Declare Function GetAsyncKeyState Lib "User32.dll"
     (ByVal vKey As Long) As Long
    
    Const VK_LEFT As Long = 37
    Const VK_DOWN As Long = 40
    Const VK_RIGHT As Long = 39
    Const VK_UP As Long = 38
    Const VK_Z As Long = 90
    Const VK_SHIFT As Long = 16
    Const VK_ESCAPE As Long = 27
    Const VK_RETURN As Long = 13
    
    Sub init()
        Dim i As Integer
        XStart = 4    'definizione della posizione
        YStart = 7    'dell'are di lavoro
        XMax = 43
        YMax = 46
        
        Area = (XMax - XStart + 1) * (YMax - YStart + 1)
        Set S = Worksheets("S")    'continele le posizioni
                                   'delle caselle del serpente
        Set C = Worksheets("SNAKE") 'contiene l'area di gioco
        Set STATUS = C.Cells(6, 3)  'cella contenente un valore
                                    'indica se il gioco è in corso o meno
        Set DIR = C.Cells(5, 5)     'cella contenente la direzione
                                    'del serpente
        Set PuntiCELL = C.Cells(3, XMax + 3) 'cella contenente il punteggio
        Set ExtraPuntiCell = C.Cells(4, XMax + 3) 'cella contenente
                                                  'l'extrapunteggio
        
        STATUS.Value = ""              'il gioco è in corso
        
        'copiamo uno schema vuoto e pulito: azzeriamo l'area di gioco
        
        Sheets("SNAKE (2)").Select
        Range("C6:AR47").Select
        Selection.Copy
        Sheets("SNAKE").Select
        Range("C6").Select
        ActiveSheet.Paste
        
        'inizializzazione del serpente
        L = 9 'lunghezza serpente iniziale
        XCoord = Int((XMax + XStart) / 2) - L
        YCoord = Int((YMax + YStart) / 2)
        
        'definizione dei colori degli elementi del gioco
        ColorSnake = 9 'colore amaranto
        ColorFood = 11 'colore blu
            
        For i = 1 To L
            S.Cells(i, 1).Value = XCoord
            S.Cells(i, 2).Value = YCoord
            C.Cells(YCoord, XCoord).Interior.ColorIndex = ColorSnake
            XCoord = XCoord + 1
        Next
        SnakeHeadX = XCoord - 1
        SnakeHeadY = YCoord
        DIR.Value = "dx"
        CURDIR = "dx"
        C.Cells(5, 5).Value = DIR
        SnakeStart = 8
        SnakeEnd = 0
        TIMEDELAY = 0.1 'velocità del gioco
        'inserisci cibo in posizione casuale
        'cerca posizione che non contiene nulla
        'prima di posizionare il cibo
        Do
            XCoord = Int(((XMax - XStart + 1) * Rnd) + 1) + XStart
            YCoord = Int(((YMax - YStart + 1) * Rnd) + 1) + YStart
        Loop Until C.Cells(YCoord, XCoord).Interior.ColorIndex = xlNone
        C.Cells(YCoord, XCoord).Interior.ColorIndex = ColorFood
        Step = 0
        Punti = 0
        MaxExtraPunti = 30
        Extrapunti = MaxExtraPunti
        PuntiCELL.Value = Punti
        ExtraPuntiCell = Extrapunti
        DIR.Select
        DIR.Value = "dx"
        STATUS.Value = "On"
        Call snake  'rutine di gestione del gioco
        
    End Sub
    
    Sub snake()
    Dim Start, Delay
    Dim Moved As Boolean
    
    Do While STATUS.Value = "On"
        Start = Timer            'Determina l'istante di partenza
        Delay = Start + TIMEDELAY
        Moved = False
        Do
        If Timer > Delay Then
        If Not Moved Then
              Moved = True
              Extrapunti = Extrapunti - 1
              If Extrapunti > 0 Then
                ExtraPuntiCell.Value = Extrapunti
              Else
                ExtraPuntiCell.Value = ""
                Extrapunti = 0
              End If
              
               If GetAsyncKeyState(VK_LEFT)  0 Then
                   DIR.Value = "sx"
                  ElseIf GetAsyncKeyState(VK_RIGHT)  0 Then
                   DIR.Value = "dx"
                  ElseIf GetAsyncKeyState(VK_UP)  0 Then
                   DIR.Value = "su"
                  ElseIf GetAsyncKeyState(VK_DOWN)  0 Then
                   DIR.Value = "giu"
                End If
              
              Select Case DIR.Value
                Case "dx"
                    If CURDIR  "sx" Then
                        SnakeHeadX = SnakeHeadX + 1
                        CURDIR = "dx"
                    Else
                        SnakeHeadX = SnakeHeadX - 1
                        CURDIR = "sx"
                    End If
                Case "su"
                    If CURDIR  "giu" Then
                        SnakeHeadY = SnakeHeadY - 1
                        CURDIR = "su"
                    Else
                        SnakeHeadY = SnakeHeadY + 1
                        CURDIR = "giu"
                    End If
                Case "giu"
                    If CURDIR  "su" Then
                        SnakeHeadY = SnakeHeadY + 1
                        CURDIR = "giu"
                    Else
                        SnakeHeadY = SnakeHeadY - 1
                        CURDIR = "su"
                    End If
                Case "sx"
                    If CURDIR  "dx" Then
                        SnakeHeadX = SnakeHeadX - 1
                        CURDIR = "sx"
                    Else
                        SnakeHeadX = SnakeHeadX + 1
                        CURDIR = "dx"
                    End If
                End Select
                SnakeStart = (SnakeStart + 1) Mod Area
                S.Cells(SnakeStart + 1, 1).Value = SnakeHeadX
                S.Cells(SnakeStart + 1, 2).Value = SnakeHeadY
                'verifica scontro
                If C.Cells(SnakeHeadY, SnakeHeadX).Interior.ColorIndex = 1
     Or C.Cells(SnakeHeadY,
    SnakeHeadX).Interior.ColorIndex = ColorSnake Then
                    STATUS.Value = ""
                    GoTo FineGioco
                ElseIf C.Cells(SnakeHeadY,
    SnakeHeadX).Interior.ColorIndex = ColorFood Then
                      C.Cells(SnakeHeadY,
    SnakeHeadX).Interior.ColorIndex = ColorSnake
                          'inserisci cibo
                          Punti = Punti + 1 + Extrapunti
                          Extrapunti = Extrapunti + MaxExtraPunti
                          PuntiCELL.Value = Punti
                      Do
                        XCoord = Int(((XMax - XStart + 1) * Rnd)
    + 1) + XStart
                        YCoord = Int(((YMax - YStart + 1) * Rnd)
    + 1) + YStart
                      Loop Until C.Cells(YCoord, XCoord).Interior.ColorIndex = xlNone
                      C.Cells(YCoord, XCoord).Interior.ColorIndex = ColorFood
    
                Else
                      C.Cells(S.Cells(SnakeEnd + 1, 2).Value,
    S.Cells(SnakeEnd + 1, 1).Value).Interior.ColorIndex =
    xlNone
                      SnakeEnd = (SnakeEnd + 1) Mod Area
                      C.Cells(SnakeHeadY,
    SnakeHeadX).Interior.ColorIndex = ColorSnake
                End If
            End If
               If GetAsyncKeyState(VK_ESCAPE)  0 Then GoTo
    FineGioco
            
        End If
        Loop Until Moved
    Loop
    FineGioco:
    temp = MsgBox("Il tuo punteggio è:" & Punti, vbOKOnly,
    "Snake!")
    End Sub
    
    Do While STATUS.Value = “On”
    …
    Loop
    
    Start = Timer 
    Delay = Start + TIMEDELAY
    Moved = False
    Do 
       If Timer > Delay Then 
          … 
       End if
    Loop Until Moved
    
    If GetAsyncKeyState(VK_LEFT)  0 Then 
          DIR.Value = “sx” 
       ElseIf GetAsyncKeyState(VK_RIGHT)  0 Then 
          DIR.Value = “dx” 
       ElseIf GetAsyncKeyState(VK_UP)  0 Then 
          DIR.Value = “su” 
       ElseIf GetAsyncKeyState(VK_DOWN)  0 Then 
          DIR.Value = “giu”
    End If
    
    Select Case DIR.Value 
       Case “dx” 
          If CURDIR  “sx” Then 
             SnakeHeadX = SnakeHeadX + 1 
             CURDIR = “dx” 
          Else 
             SnakeHeadX = SnakeHeadX - 1 
             CURDIR = “sx” 
          End If
    …
    End Select
    
    SnakeStart = (SnakeStart + 1) Mod Area
    S.Cells(SnakeStart + 1, 1).Value = SnakeHeadX
    S.Cells(SnakeStart + 1, 2).Value = SnakeHeadY
    
    If C.Cells(SnakeHeadY, SnakeHeadX).Interior.ColorIndex = 1 Or C.Cells(SnakeHeadY,
     SnakeHeadX).Interior.ColorIndex = ColorSnake Then 
          STATUS.Value = “” 
          GoTo FineGioco
    
    ElseIf C.Cells(SnakeHeadY, SnakeHeadX).Interior.ColorIndex = 
    ColorFood Then
    
    
     
  2. dako

    dako Amministratore Delegato BMW

    3.386
    48
    6 Maggio 2004
    Reputazione:
    436
    ??????
    Mitico funziona!!!
     
  3. Tonio330cd

    Tonio330cd Presidente Onorario BMW

    8.557
    367
    1 Aprile 2005
    Reputazione:
    45.441
    330cd E46
    MITTICOO!!!!!!
     
  4. capricciodivino

    capricciodivino Collaudatore

    295
    21
    15 Marzo 2006
    Reputazione:
    153
    La sua ihihi
    che bellooooooooooooooooooooo
     
  5. DjMarvel

    DjMarvel Presidente Onorario BMW

    8.941
    1.060
    28 Dicembre 2004
    Reputazione:
    126.772.168
    330Cd,e92 30d,F30 30d,G30 30d
    :mrgreen: :mrgreen:

    un gioco che si maschera bene in ufficio .... 8-[
     
  6. FaGiO

    FaGiO Direttore Corse

    2.235
    30
    2 Settembre 2003
    Reputazione:
    498.554
    Fiat 5oo Lounge 1.3 Mjet
    Mi rompe il cazzo con ste Macro protette!!!

    Grrrrr...
     
  7. Luca318

    Luca318 Presidente Onorario BMW

    16.581
    116
    20 Novembre 2003
    Reputazione:
    12.692
    ///M3 E36 Individual
    basta che vai sulle opzioni e le disabiliti :biggrin:
     
  8. FaGiO

    FaGiO Direttore Corse

    2.235
    30
    2 Settembre 2003
    Reputazione:
    498.554
    Fiat 5oo Lounge 1.3 Mjet
    L'ho fatto...

    ...non mi ha cagato di striscio!!!

    ](*,)
     

Condividi questa Pagina