Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17

Discussione: Problemino snake in c#

  1. #11
    Faccio fatica a capire il tuo codice.
    Perché usi 4 timer diversi? Perché usi le PictureBox? Sei partito bene usando la classe List, ma poi vai a gestire la dinamica del gioco appoggiandoti alle proprietà degli oggetti grafici che hai creato. Se per ogni segmento dello snake crei una PictureBox capisco perfettamente perché dopo poco il gioco rallenti!

    Suggerimenti:
    • usa solamente un Timer per effettuare lo spostamento dello snake e la gestione delle collisioni
    • non usare le PictureBox per disegnare lo snake ma disegna direttamente sul Form, utilizzando l'evento Paint
    • come ti avevo già detto in un post precedente cerca di tenere ben separate la gestione del gioco dalla sua rappresentazione grafica.
    • usa la struttura Point per memorizzare le coordinate x, y di un'ipotetica griglia, di dimensioni prefissate


    Ecco un ipotetico algoritmo.
    Avvio del gioco
    • inizializzo la lista (ciccio) con 4 segmenti contigui
    • imposto la variabile direzione = 0 (vedi evento KeyDown)
    • imposto la variabile punteggio = 0
    • imposto la variabile allunga = 0 (vedi evento Tick)
    • cerco una posizione casuale e libera per la mela
    • avvio il Timer


    Evento Tick del Timer
    • se allunga > 0 aggiungo un elemento vuoto in coda alla lista ciccio e decremento allunga = allunga - 1
    • determino la nuova coordinata x,y della testa, in base alla posizione attuale della testa e alla direzione
    • controllo l'eventuale collisione col bordo (x < 0 | y < 0 | x > max_x | y > max_y): se avviene -> game over
    • controllo l'eventuale autocollisione (basta iterare tra tutti gli elementi della lista ciccio): se avviene -> game over
    • controllo l'eventuale collisione con la mela (testa.x = mela.x && testa.y = mela.y): se avviene imposto la variabile allunga = 5 (o altro valore a piacimento), incremento punteggio, determino una nuova posizione casuale per la mela
    • inserisco la nuova testa all'inizio della lista ciccio, elimino l'ultimo elemento
    • forzo il ridisegno dell'area del form (this.Invalidate())


    Evento Paint
    • disegno un cerchio pieno sulle coordinate della mela (metodo FillEllipse dell'oggetto e.Graphics)
    • disegno un rettangolo pieno per ogni coordinata nella lista ciccio (metodo FillRectangle)

    Le coordinate effettive degli oggetti grafici devono essere calcolate in proporzione all'area di disegno.

    Evento KeyDown
    • imposto la variabile "direzione" con un valore che dipende da quale tasto direzione ho premuto (per esempio 0=destra, 1=giù, 2=sinistra, 3=su)
    Chi non cerca trova.

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    11
    Io ho optato ad usare 4 timer differenti perche se no se si andavano in conflitto i movimenti..Per il fatto di non usare delle picture box avevo pensato di usare il system drawing come dici tuma non so come si imposta molto..

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    11
    Guara seguendo un po' le tue linee guida ci sono riusito e l'ho finito...
    Pero ora volevo chiederti se peraso saicome si fa a riprodurre un suono ad esempio quando mangio la mela e quando muoio...
    Cmq grazie di tutto

  4. #14
    Guardati la classe System.Media.SoundPlayer, dovrebbe essere sufficiente. Ciao
    Chi non cerca trova.

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    11
    Grazie ancora di tutto

  6. #16
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    11
    Ciao scusa un ultima cosa sono riuscito facendo cosi:
    [CODE]
    SoundPlayer so = new SoundPlayer(@"blip.wav");
    so.Play();
    [\CODE]
    pero quando deve generare il suono mi dice che non riesce a trovare il file,il file si trova dentro alla cartella del progetto dentro
    \bin\debug cosi da poterlo avere sempre dentro...
    Ma una cosa come faccio a definirgli l'indirizzo?

  7. #17
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    11
    no scusa ce l'ho fatta

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.