è impressionante ma con excel si può giocare ... tutti conoscono il gioco snake volendo si può fae snake con excel basta creare una macro e definire quali sono i cambi (le celle) dove far girare il nostro serpentino! 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 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