Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Frutisnake 1.0

Soyez le premier à donner votre avis sur cette source.

Vue 2 416 fois - Téléchargée 471 fois

Description

C'est le jeu classique du snake, avec un éditeur et même quelques options! Il a été code en c avec l'aide de la SDL et des connaissances du tutoriel sur le C du site du 0. Toutes les images utilisees dans le jeu viennent d'un forum du même site:"http://www.siteduzero.com/forum/sujet/jeu-sdl-frutisnake-33341". Et vous pouvez télécharger le jeu en entier ici:"http://sourceforge.net/projects/frutisnake10/".

Source / Exemple :


Voici la fonction "jouer":

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>

#include "constantes.h"
#include "enumeration.h"
#include "structures.h"
#include "jeu.h"
#include "fichiers.h"
#include "serpent.h"
#include "main.h"
#include "macros.h"

int jouer(SDL_Surface* ecran, const int tempsLatence, InfosCarte* infosCarte)
{
    printf("Entrer dans jeu.\n");
    int carte[NBRE_BLOCS_LARG][NBRE_BLOCS_HAUT]= {{0}};
    int continuer=1, i=0, j=0, tempPrecedent=0;
    srand(time(NULL));
    Serpent serpent;
    Objets objets;
    Temps temps;
    Info infosJeu;
    //InfosCarte infosCarte;
    //INIT_INFOS_CARTE(infosCarte);
    SDL_Event event;
    SDL_Rect position={0, 0, 0, 0};

    informerJoueur(&infosJeu, JEU, INIT, NULL);
    if(!chargerCarte(carte, CHOISIR, infosCarte))
    {
        informerJoueur(&infosJeu, JEU, CLOSE, NULL);
        ERREUR_DONNEES();
        fprintf(stderr,"Impossible d'ouvrir le fichier pour chargement.\n");
        return QUITTER;
    }
    initialiser(&serpent, &objets, carte, &infosJeu, ecran);

    for (j=0; j<NBRE_BLOCS_HAUT; j++)
    {
        for (i=0; i<NBRE_BLOCS_LARG; i++)
        {
            if (carte[i][j] == TETE_GAUCHE)
            {
                serpent.mobile.position[0].x = i;
                serpent.mobile.position[0].y = j;
                serpent.mobile.morceau[0]=serpent.tete[GAUCHE];
                carte[i][j]=VIDE;
            }
        }
    }

    tempPrecedent=SDL_GetTicks();
    temps.tempsLatence=tempsLatence;
    infosJeu.niveau=tempsLatence;

    while(continuer)
    {
        SDL_PollEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            libererSurfaces(&serpent, &objets);
            informerJoueur(&infosJeu, JEU, CLOSE, NULL);
            return QUITTER;
            break;
        case SDL_KEYDOWN:
            switch(event.key.keysym.sym)
            {
            case SDLK_PAUSE:
                if(!pause(&objets, ecran, carte))
                {
                    libererSurfaces(&serpent, &objets);
                    informerJoueur(&infosJeu, JEU, CLOSE, NULL);
                    return QUITTER;
                }
                break;
            case SDLK_F10:
                changerModeAffichage(ecran);
                break;
            case SDLK_ESCAPE:
                if(!sauvegarderDonneesPartie(&infosJeu))
                {
                    ERREUR_DONNEES();
                    fprintf(stderr,"Echec de la sauvegarde des donnees de la partie!\n");
                }
                libererSurfaces(&serpent, &objets);
                informerJoueur(&infosJeu, JEU, CLOSE, NULL);
                return MENU;
                break;

            case SDLK_RIGHT:
                serpent.mobile.direction=DROITE;
                break;
            case SDLK_LEFT:
                serpent.mobile.direction=GAUCHE;
                break;
            case SDLK_DOWN:
                serpent.mobile.direction=BAS;
                break;
            case SDLK_UP:
                serpent.mobile.direction=HAUT;
                break;
            default:
                break;
            }
            break;
        }
        infosJeu.longSerpent.donnee=serpent.mobile.nbreMorceaux;
        temps.actuel=SDL_GetTicks();
        infosJeu.temps.donnee=(temps.actuel-tempPrecedent)/1000;

        if(!gererTemps(carte, &serpent, &temps, &infosJeu))
        {
            POS_INIT(position);
            position.x=ecran->w/2 - serpent.perdu->w/2;
            position.y=ecran->h/2 - serpent.perdu->h/2;
            SDL_BlitSurface(serpent.perdu, NULL, ecran, &position);
            SDL_Flip(ecran);
            if(!sauvegarderDonneesPartie(&infosJeu))
            {
                ERREUR_DONNEES();
                fprintf(stderr,"Echec de la sauvegarde des donnees de la partie!\n");
            }
            SDL_Delay(2000);
            continuer=0;
            continue;
        }

        for(i=0; i<2; i++)
        {
            POS_INIT(position);
            modifierPosition(serpent.mobile.positionFond[i].x*TAILLE_BLOC,
                             serpent.mobile.positionFond[i].y*TAILLE_BLOC,
                             TAILLE_BLOC, TAILLE_BLOC, &position,1);
            SDL_BlitSurface(objets.arrierePlan, &position, ecran, &position);
        }
        if(serpent.mobile.effacerPomme)
        {
            POS_INIT(position);
            modifierPosition(serpent.mobile.position[0].x*TAILLE_BLOC,
                             serpent.mobile.position[0].y*TAILLE_BLOC,
                             TAILLE_BLOC, TAILLE_BLOC, &position, 1);
            SDL_BlitSurface(objets.arrierePlan, &position, ecran, &position);
            serpent.mobile.effacerPomme=0;
        }

        collerSerpentJeu(&serpent, ecran);
        POSITION(position);
        collerSurfaces(carte, ecran, &objets, POMME, &position);
        informerJoueur(&infosJeu, JEU, BLIT, ecran);
        SDL_Flip(ecran);
        SDL_Delay(tempsLatence*0.50);
    }

    informerJoueur(&infosJeu, JEU, CLOSE, NULL);
    libererSurfaces(&serpent, &objets);

    return MENU_NIVEAUX;
}

Conclusion :


Je pense que le jeu assez complet mais il manque quand même quelques trucs comme la musique, la possibilité de jouer a plusieurs, un mode aventure...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Votre évaluation

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.