Acerca del problema de guardar y leer códigos de progreso en la programación de juegos en C
//==============Función de progreso de acceso===================
void SaveIt(int Num)
{
char *FileName[]={"save\\1.sav", "save\\2.sav", "save \ \3.sav", "save\\4.sav", "save\\5.sav"};
ARCHIVO *fp;
fp=fopen(NombreArchivo[ Núm. ], "wb");
fwrite(amp; Escena, 4, 1, fp);
fwrite(amp; SX, 4, 1, fp); > p>
fwrite(amp;SY,4,1,fp);
fwrite(amp;old_SX,4,1,fp);
fwrite(amp; old_SY, 4, 1, fp);
fwrite(amp; DX, 4, 1, fp);
fwrite(amp; DY, 4, 1, fp); /p> p>
fwrite(amp; old_DX, 4, 1, fp);
fwrite(amp; old_DY, 4, 1, fp); amp; Flag_OutCity, 4, 1, fp);
fwrite(amp; Flag_GotoPalace, 4, 1, fp);
fwrite(amp; Hero, sizeof(Rol), 1); , fp) ;
for(int i=0; ilt; MAPAS; i )
{
fwrite(Mapa[i].Nombre, 32, 1, fp );
fwrite(y Mapa[i].Ancho, 4, 1,
fwrite(y Mapa[i].Alto, 4,); 1, fp );
fwrite(amp;Mapa[i].Ground, 4, 1,
fwrite(Mapa[i].res, 7, 1, fp);
fwrite(Mapa[i].Datos, Mapa[i].Ancho*Mapa[i].Alto*2, 1,
fwrite(amp); ;Mapa[ i].Npc_Nums, 4, 1, fp);
fwrite(Mapa[i].NPC, tamaño de (Rol), Mapa[i].Npc_Nums,
);}
fclose(fp);
}
//****************** *** ******8
//Guardar progreso
BOOL SaveGame()
{
int MenuIt= 0;
char *Menu[]={"Progreso uno", "Progreso dos", "Progreso tres", "Progreso cuatro", "Progreso cinco", "Cancelar"};
int x=0, y=280;
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200),
MostrarMenú(x 50
, y 20, MenuIt, Menú, 6, RGB(255, 255, 255));
PresioneTecla(VK_RETURN, 1
while( 1 )
<); p> {if( GetAsyncKeyState(VK_DOWN) ) //Siguiente elemento
{
PressKey(VK_DOWN, 1);
MenuIt=(MenuIt 1)6;
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200),
ShowMenu(x 50); , y 20, MenuIt, Menu, 6, RGB(255, 255, 255));
}
if( GetAsyncKeyState(VK_UP) ) //Elemento anterior p>
{
PressKey(VK_UP, 1);
if( MenuIt==0 ) MenuIt=5
else MenuIt--; p>
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200), FALSE);
ShowMenu(x 50, y 20, MenuIt, Menú, 6. RGB(255, 255, 255));
}
if( GetAsyncKeyState(VK_RETURN) ) //Confirmar
{
while( GetAsyncKeyState(VK_RETURN) ) {}
cambiar( MenuIt )
{
caso 0:
caso 1: p>
caso 2:
caso 3:
caso 4:
//Guardar
SaveIt(MenuIt );
return TRUE;
break;
caso 5: //Cancelar
//ChangePalette(MainPal, NullPal, - 1) ;
//PostMessage(hWnd, WM_CLOSE, 0, 0);
//GameTitle();
devuelve FALSO;
romper;
}
}
if( GetAsyncKeyState(VK_ESCAPE) ) //regresar
{
while( GetAsyncKeyState(VK_ESCAPE) ) {}
//MainMove();
//Flip()
return FALSE; p>
}
}
}
//Progreso de lectura
BOOL LoadIt(int Num)
{
char *FileName[]={"save\\1.sav", "save\\2.sav"," save\\3.sav", "save\\4.sav", "save\\5.sav"};
ARCHIVO *fp;
if( (fp= fopen(FileName[Num], "rb"))==NULL )
{
//fclose(fp);
return FALSE; p> p>
}
fread(amp; Escena, 4, 1, fp
fread(amp; SX, 4, 1, fp); p>
fread(amp;SY,4,1,fp);
fread(amp;old_SX,4,1,fp);
fread(amp;old_SY ,4 , 1, fp);
fread(y DX, 4, 1, fp);
fread(y DY, 4, 1, fp); p>
fread(y old_DX, 4, 1, fp);
fread(y old_DY, 4, 1, fp);
fread(y Flag_OutCity); , 4 , 1, fp);
fread(y Flag_GotoPalace, 4, 1, fp);
fread(y héroe, sizeof(Rol), 1, fp); ;
Hero.Surface=lpDDSSpirit; //Asociación de página
for(int i=0; ilt; MAPS; i)
{
fread(Mapa[i].Nombre, 32, 1, fp);
fread(y Mapa[i].Ancho, 4, 1, fp); > fread (amp; Mapa[i].Alto, 4, 1, fp);
fread (amp; Mapa[i].Tierra, 4, 1,
fread (Mapa[i].res, 7, 1, fp);
fread(Mapa[i].Datos, Mapa[i].Ancho*Mapa[i].Alto*2, 1 , fp );
fread(amp; Mapa[i].Npc_Nums, 4, 1,
fread(Mapa[i].NPC, sizeof(Rol), Mapa[i].Npc_Nums, fp);
for(int j=0; jlt; Mapa[i].Npc_Nums; j)
{
// Asociación de página
Map[i].NPC[j].Surface=lpDDSNpc[ Map[i].NPC[j].Pic
}
;}
fclose(fp);
devuelve VERDADERO
}
//******* * *******************8
//Progreso de lectura
BOOL LoadGame()
{
int Yo
nuIt=0;
char *Menu[]={"Progreso 1", "Progreso 2", "Progreso 3", "Progreso 4", "Progreso 5", "Cancelar"}; p> p>
int x=0, y=280;
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200),
ShowMenu(x 45, y 20, MenuIt, Menu, 6, RGB(255, 255, 255));
PressKey(VK_RETURN, 1
while); ( 1 )
{
if( GetAsyncKeyState(VK_DOWN) ) //Siguiente elemento
{
PressKey(VK_DOWN, 1)
MenuIt=(MenuIt 1)6;
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200), FALSE);
ShowMenu(x 45, y 20, MenuIt, Menú, 6, RGB(255, 255, 255));
}
if( GetAsyncKeyState(VK_UP) ) //Elemento anterior
{
PressKey(VK_UP, 1
if( MenuIt==0 ) MenuIt=5; > else MenuIt--;
Blt(lpDDSBackGround, x, y, lpDDSMainMenu, GetRect(0, 0, 150, 200),
ShowMenu(x 45, y); 20, MenuIt, Menú, 6, RGB(255, 255, 255));
}
if( GetAsyncKeyState(VK_RETURN) ) //Confirmar
{
while( GetAsyncKeyState(VK_RETURN) ) {}
cambiar( MenuIt )
{
caso 0:
caso 1:
caso 2:
caso 3:
caso 4:
//Leer disco
if( LoadIt(MenuIt)==TRUE )
return TRUE;
break
caso 5: //Cancelar
//ChangePalette(MainPal, NullPal, -1);
//PostMessage(hWnd, WM_CLOSE, 0, 0);
//GameTitle(); p> p>
return FALSE;
descanso
}
}
if( Ge
tAsyncKeyState(VK_ESCAPE) ) //Regresar
{
while( GetAsyncKeyState(VK_ESCAPE) ) {}
//MainMove();
//Flip();
devuelve FALSO
}
}
}