Anuncios Google

Ayuda con las monedas en el juego de plataformas

no me aparecen las monedas...

 

que hago mal?

 

code:

 

// Includes c/c++

#include <stdio.h>

#include <stdlib.h> 

// Includes propietaris NDS

#include <nds.h>

#include <maxmod9.h>

#include <nf_lib.h>

// Includes de llibreries nostres

#include "Soini.h"  

#include "nivell1.h"

 

typedef struct

{

s16 x; //Posició X

s16 y; //Posició Y

bool salt; //Si està saltant

bool moure; //Si es mou

u8 tresors; //seran les "monedes" que recull

} Jugador;

 

typedef struct

{

s16 x; //Posició X

s16 y; //Posició Y

} Moneda;

 

//capseleres de funcions

int cercarMonedes();

void cercarPosicionsMoneda(s16 *x,s16 *y,s16 fons_x,s16 fons_y);

void colocarMonedes(int monedes);

void moureEsquerra(bool *jugMou,s32 y,s32 *x);

void moureDreta(bool *jugMou,s32 y,s32 *x);

void saltar(s32 x, s32 *y,int pujada);

void posicioCordenades(s16 *x, s16 *y, s16 posx, s16 posy);

void crearCordenades(s16 jugX, s16 jugY, s16 *cord_x, s16 *cord_y);

void moureJugador(s16 *jugX, s16 *jugY, bool *jugSalt, bool *jugMou);

void iniciarTilejatN1(Jugador j, int monedes);

void presentacio1();

void iniciar();

void splash();

void soInicial(u8 *sound);

void inici(u8 *sound);

void joc();

void nivell1(); 

void reiniciarsp();

void moureMonedes(s16 *x, s16 *y);

void tilejatMonedes(int monedes);

void main()

{

//inicialitzem variable de so i una variable de jugador

u8 Sound_id;

Jugador jug;

iniciar();

soInicial(&Sound_id);

splash();

inici(&Sound_id);

// Bucle (es repeteix per sempre)

while(1) 

{

scanKeys();//mirem si teclejem alguna cosa

if(keysDown() & KEY_TOUCH)//si toquem la pantalla inferior

{

joc(jug);//iniciem el joc

}

swiWaitForVBlank(); // Espera el sincronisme vertical

}

}

 

void iniciar()

{

consoleDemoInit(); // Inicialitza la consola

consoleClear(); // Esborra la pantalla

NF_SetRootFolder("NITROFS");//Escollim nitrofiles com a carpeta inicial

NF_Set2D(1, 0);//Inici del sistema 2D inferior

NF_Set2D(0, 0);//Inici del sistema 2D superior

NF_InitTiledBgBuffers();//Iniciem els bufers dels fons tilejats

NF_InitTiledBgSys(1);//Inici del sistema del fons inferior

NF_InitTiledBgSys(0);//Inici del sistema del fons superior

NF_InitSpriteBuffers();//Iniciem els buffers dels sprites

NF_InitSpriteSys(0);//Iniciem el sistema d'sprites inferior

NF_InitSpriteSys(1);//Iniciem el sistema d'sprites superior

NF_ResetSpriteBuffers();//Resetejem els Sprites

NF_ResetTiledBgBuffers();//Resetejem els fons

}

void splash()

{

setBrightness(3, 0); // Restaura l'enlluernament

NF_LoadTiledBg("splashes/nfl", "nf", 256, 256); // Carrega el fons per la capa 3, pantalla superior

NF_CreateTiledBg(0, 3, "nf");

NF_LoadTiledBg("splashes/devkitpro", "dev", 256, 256); // Carrega el fons per la capa 3, pantalla inferior

NF_CreateTiledBg(1, 3, "dev");

reiniciarsp();

NF_ResetTiledBgBuffers();

NF_DeleteTiledBg(0,3);

NF_DeleteTiledBg(1,3);

NF_LoadTiledBg("splashes/logo-cepnet", "cep", 256, 256); // Carrega el fons per la capa 3, pantalla superior

NF_CreateTiledBg(1, 3, "cep");

NF_LoadTiledBg("splashes/Sasieta", "sasi", 256, 256); // Carrega el fons per la capa 3, pantalla inferior

NF_CreateTiledBg(0, 3, "sasi");

reiniciarsp();

NF_ResetTiledBgBuffers();

NF_DeleteTiledBg(0,3);

NF_DeleteTiledBg(1,3);

setBrightness(3, 0); // Restaura l'enlluernament

}

 

void soInicial(u8 *Sound)

{

// Inicialitza l'engine d'audio de la DS

soundEnable();

// Inicialitza els buffers de so

NF_InitRawSoundBuffers();

// Carega els samples de so en format RAW

NF_LoadRawSound("sfx/music", 1, 22050, 0);

// Inicia la musica de fons

//amb el seguent atribut

*Sound = NF_PlayRawSound(1, 127, 64, false, 0);

}

 

void reiniciarsp()

{

s8 caux = 0, iluminacio = -16; // iniciem valors

while(!(iluminacio==0))

{//cuan iluminacio no siga 0:

caux++;

if(caux==11)

{

caux= 0;

iluminacio++;

}

setBrightness(3, iluminacio);//Cambia l'enlluernament

swiWaitForVBlank();

}

while(!(iluminacio==-16))

{

caux++;

if(caux==11)

{

caux = 0;

iluminacio--;

}

setBrightness(3, iluminacio);//Cambia l'enlluernament

swiWaitForVBlank();//Espera el sincronisme vertical

}

}

 

void inici(u8 *Sound)

NF_UnloadRawSound(1); // esborrem la musica inicial de la memoria

*Sound = 0;

//carreguem l'audio definit

mmInitDefault("audio/ini.bin");

mmLoad(MOD_LEYENDADELBESO);

mmStart(MOD_LEYENDADELBESO,MM_PLAY_LOOP);

NF_InitTiledBgBuffers();//Iniciem els bufers dels fons tilejats

NF_InitTextSys(1);//Iniciem el sistema de text inferior

NF_InitTiledBgSys(0);//Inici del sistema del fons superior

NF_InitTiledBgSys(1);//Inici del sistema del fons superior

NF_LoadTiledBg("splashes/Gosters", "gosters", 256, 256); // Carrega el fons per la capa 3, pantalla superior

NF_CreateTiledBg(0, 3, "gosters");

NF_LoadTextFont16("fnt/font16", "normal", 256, 256, 0);//Carregem la font

NF_CreateTextLayer16(1, 0, 0,"normal");//Paso la font a la pantalla inferior

NF_DefineTextColor(1, 0, 1, 31, 0, 0);

NF_WriteText16(1, 0, 1, 1, "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                       Polseu la pantalla tactil per   iniciar el joc\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t                                        Centre d'estudis politecnics    curs 2012-13");

NF_SetTextColor(1, 0, 1);

NF_UpdateTextLayers();

}

 

void joc(Jugador j)

{

//inicialitzem el jugador

memset(&j, 0, sizeof(Jugador));

//aturem la musica de fons

mmStop();

mmUnload(MOD_LEYENDADELBESO);

//inicialitzem el tilejat

NF_ResetTiledBgBuffers();

NF_DeleteTiledBg(0,3);

NF_DeleteTiledBg(1,0);

//primer nivell

nivell1(j);

}

 

void nivell1(Jugador j)

{

//presentem

presentacio1();

//carreguem l'audio definit

mmInitDefault("audio/nivell1.bin");

mmLoadEffect(SFX_JUMP);

mmLoad(MOD_ANDES);

mmStart(MOD_ANDES,MM_PLAY_LOOP);

j.x = 1280;

j.y = 80;

j.salt = false;

s16 fons_x, fons_y, personatje_x, personatje_y;

crearCordenades(j.x,j.y,&fons_x,&fons_y);

posicioCordenades(&j.x,&j.y,fons_x,fons_y);

int monedes = cercarMonedes();

iniciarTilejatN1(j,monedes);

Moneda mon[monedes];

s16 mon_x[monedes];

s16 mon_y[monedes];

int i;

for(i = 0;i<monedes;i++)

{

memset(&mon[i], i+1, sizeof(Moneda));

cercarPosicionsMoneda(&mon[i].x,&mon[i].y,fons_x,fons_y);

}

while(1)

{

int i;

for(i = 0;i<monedes;i++)

{

moureMonedes(&mon[i].x,&mon[i].y);

mon_x[i] = mon[i].x - fons_x;

mon_y[i] = mon[i].y - fons_y;

NF_MoveSprite(1,i,mon_x[i],mon_y[i]);

}

personatje_x = j.x - fons_x;

personatje_y = j.y - fons_y;

moureJugador(&j.x,&j.y,&j.salt,&j.moure);

crearCordenades(j.x,j.y,&fons_x,&fons_y);

NF_MoveSprite(1,0,personatje_x,personatje_y);

NF_SpriteOamSet(1);

swiWaitForVBlank();

oamUpdate(&oamSub);

NF_ScrollBg(1,2, fons_x,fons_y);

NF_ScrollBg(1,3, fons_x,fons_y);

}

}

void presentacio1()

{

bool bo = true;

NF_InitTiledBgBuffers();//Iniciem els bufers dels fons tilejats

NF_InitTextSys(0);//Iniciem el sistema de text superior

NF_InitTextSys(1);//Iniciem el sistema de text inferior

NF_InitTiledBgSys(0);//Inici del sistema del fons superior

NF_InitTiledBgSys(1);//Inici del sistema del fons superior

NF_LoadTextFont16("fnt/font16", "normal", 256, 256, 0);//Carregem la primera font

NF_LoadTextFont16("fnt/font16", "normal2", 256, 256, 0);//Carregem la segona font

NF_CreateTextLayer16(1, 0, 0,"normal2");//Paso la font a la pantalla inferior

NF_CreateTextLayer16(0, 0, 0,"normal");//Paso la font a la pantalla superior

NF_DefineTextColor(1, 0, 1, 31, 0, 0);//definim el color del text

NF_WriteText16(0, 0, 1, 1, "A una terra imaginaria hi ha un\'noi\' que viu molt felic en un  lloc extrany, pero no sap quines aventures li esperen...");// i escribim el text

NF_WriteText16(1, 0, 1, 1, "Prem el boto A per continuar");

NF_SetTextColor(1, 0, 1);//agafem el color del text recen definit

NF_UpdateTextLayers();

while(bo == true)

{

//cuan pitjem la A trenquem el bucle

scanKeys();

if(keysDown() & KEY_A)

{

bo = false;

}

}

//netejem

NF_ResetTiledBgBuffers();

NF_DeleteTiledBg(1,0);

NF_DeleteTiledBg(0,0);

}

void iniciarTilejatN1(Jugador j, int monedes)

{

NF_InitTiledBgBuffers();

NF_InitTiledBgSys(1);

NF_InitSpriteBuffers();

NF_InitSpriteSys(1);

NF_InitCmapBuffers();

//Carreguem els fons

NF_LoadTiledBg("bgs/level1", "2", 2048, 256);

NF_LoadTiledBg("bgs/nuvols", "3", 256, 256);

//el planol de colisions

NF_LoadColisionMap("cmaps/level1collision", 0, 2048,256);

//ara els Sprites

NF_LoadSpriteGfx("sprites/player",0,32,32);

NF_LoadSpriteGfx("sprites/coin",1,32,32);

//Carrega els sprites a la RAM,asignant-li un id(0-255) i l'ampada i l'alçada.

NF_LoadSpritePal("sprites/player",0);

NF_LoadSpritePal("sprites/coin",1);

//el mateix pero per la paleta. Aquest id anirà de 0 a 65.

NF_VramSpriteGfx(1,0,0, false);//carreguem l'sprite a la ram

NF_VramSpritePal(1,0,0);// el mateix amb la paleta

NF_CreateSprite(1,0,0,0, j.x, j.y);//carreguem l'sprite

NF_CreateTiledBg(1, 2, "2");//carreguem el tilejat del fons

NF_CreateTiledBg(1, 3, "3");//carreguem el tilejat del fons

tilejatMonedes(monedes);

}

void moureJugador(s16 *jugX, s16 *jugY, bool *jugSalt, bool *jugMou)

{

        s32 x = *jugX;

        s32 y = *jugY;

scanKeys();

        if((keysDown() & KEY_LEFT) || (keysHeld() & KEY_LEFT))

        {

moureEsquerra(&*jugMou,y,&x);

        }      

        if((keysDown() & KEY_RIGHT) || (keysHeld() & KEY_RIGHT))

        {

moureDreta(&*jugMou,y,&x);

        }

*jugSalt = false;

int i = x;

while(*jugSalt == false && i < (x + 22))

{

if (NF_GetTile(0,i,(y + 16)) == 1 || NF_GetTile(0,i,(y + 16)) == 2) *jugSalt = true;

i++;

}      

        if (*jugSalt == false)

{

y += 1;

if(NF_GetTile(0,x,(y + 16)) == 3) saltar(x,&y,50);

}

if(keysDown() & KEY_A && *jugSalt == true)

        {

saltar(x,&y,90);

        }

        *jugX = x;

        *jugY = y;

}

void moureMonedes(s16 *x, s16 *y)

{

scanKeys();

        if((keysDown() & KEY_LEFT) || (keysHeld() & KEY_LEFT))

        {

*x += 1;

        }      

        if((keysDown() & KEY_RIGHT) || (keysHeld() & KEY_RIGHT))

        {

*x -= 1;

        }

}

void crearCordenades(s16 jugX, s16 jugY, s16 *cord_x, s16 *cord_y)

{

*cord_x = jugX -128;

*cord_y = jugY -96;

if(*cord_x < 0) *cord_x = 0;

if(*cord_y < 0) *cord_y = 0; 

if(*cord_x > 2048 - 256) *cord_x = 2048 - 256;

if(*cord_y > 256 - 192) *cord_y = 256 - 192;

}

void posicioCordenades(s16 *x, s16 *y, s16 posx, s16 posy)

{

*x = *x - posx -16;

*y = *y - posy -16; 

}

void saltar(s32 x, s32 *y,int pujada)

{

mmEffect(SFX_JUMP);

bool puja = true;

int cont = 0;

s32 i;

while(puja == true && cont < pujada)

{

for(i = x; i < (x + 22);i++)

{

if(NF_GetTile(0,i,*y) == 1) puja = false;

}

*y -= 1;

cont++;

}

swiWaitForVBlank();

}

void moureDreta(bool *jugMou,s32 y,s32 *x)

{

*jugMou = true;

int i = y;

while(*jugMou == true && i < (y + 16))

{

if (NF_GetTile(0, (*x + 23), i) == 1 || NF_GetTile(0, (*x + 23), i) == 2) *jugMou = false;

i++;

}

if(*jugMou == true)

{

*x += 1;

if (*x > 2048 -32) *x = 2048 - 32;

}

}

void moureEsquerra(bool *jugMou,s32 y,s32 *x)

{

*jugMou = true;

int i = y;

while(*jugMou == true && i < (y + 16))

{

                if (NF_GetTile(0,(*x - 1), i) == 1 || NF_GetTile(0,(*x - 1), i) == 2) *jugMou = false;

i++;

}

if(*jugMou == true)

{

*x -= 1;

if (*x < 0) *x = 0;

}

}

int cercarMonedes()

{

int i,j,cont = 0;

for(i= 0; i < 2048; i++)

{

for(j=1;j<256;j++)

{

if(NF_GetTile(1,i,j) == 4) cont++;

}

}

return cont;

}

void tilejatMonedes(int monedes)

{

int i;

Moneda mon[monedes];

for(i = 0; i < monedes; i++)

{

NF_VramSpriteGfx(1,i+1,i+1, false);//carreguem l'sprite a la ram

NF_VramSpritePal(1,i+1,i+1);// el mateix amb la paleta

NF_CreateSprite(1,i+1,1,1,mon[i].x,mon[i].y);

}

}

void cercarPosicionsMoneda(s16 *x,s16 *y,s16 fons_x,s16 fons_y)

{

*x = 1280;

*y = 80;

*x -= fons_x - 4;

*y -= fons_y - 4;

}


Anuncios Google