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;
}