Page 7 of 17

Re: [Pandora rebirth] Fall to win

Posted: 21 Mar 2012, 23:17
by gigios
Allora, premetto che anche in questo caso non ho guardato il codice ma, l'effetto è abbastanza simile al primo screenshot inviato.
Praticamente ho la sovrapposizione di più muri.
Io proverei a tener conto, nella generazione dei muri, di un 'offset' minimo tra un muro e l'altro, in modo che ci sia lo spazio 'fisico' per far passare il personaggio.

Image

Re: [Pandora rebirth] Fall to win

Posted: 21 Mar 2012, 23:43
by Farox
Io invece con la versione 0.37 ho modificato i tasti...

Code: Select all

//------------------menu
process menu()
private
int posizione;
begin
testo[1]=write(0,400,150,1,"Fall to win");
testo[2]=write_var(0,400,160,1,version);
sfondo(400,240,10);
logo(400,100,9);
fakemarco(260,220,8);
posizione=1;
x=400;y=340;
loop
 switch (posizione)
		    case 1 : posizione=1;//-------------start
			graph=41;
			frame(500);
		       if (key(_DOWN)) posizione=2; end
			   if (key(_SPACE)); principale(); break; end
			   if (key(_END)); principale(); break; end //tasto B su Pandora
			end //endcase
		    case 2 : posizione=2;//------------option
			graph=42;
			frame(500);
		       if (key(_UP)) posizione=1; end
			   if (key(_DOWN)) posizione=3; end
			  // if (key(_SPACE));    //menu opzioni ...........se abilito anche questa riga mi da errore!!!
			   if (key(_END)); //tasto B menu opzioni su Pandora
			   end
			end //endcase
		    case 3 : posizione=3;//--------------Bonus
			graph=43;
			frame(500);
		       if (key(_UP)) posizione=2; end
			   if (key(_DOWN)) posizione=4; end
			   //if (key(_SPACE));    //menu BONUS...........se abilito anche questa riga mi da errore!!!
			   if (key(_END));  //tasto B menu Bonus su Pandora
			   end
			end //endcase
		    case 4 : posizione=4;//--------------exit
			graph=44;
			frame(500);
		       if (key(_UP)) posizione=3; end
			   if (key(_SPACE))esci=1; end
			   if (key(_END)) esci=1; end //tasto B su Pandora
			end //endcase
	end //endswitch
frame;
end
end
ed anche

Code: Select all

//-------------------------marco----
Process marco(x,y,z)

private

//Variabili utilizzate per gestire gli id dei processi durante le collisioni (se servissero in altri processi, toglierli da qui e metterli globali)
muro idMuro;
fuoco idFuoco;

//Variabili private
int premuto;
int premuto2;
int premuto3;
int m_animazione;
int togliVita;						//Usata per rimuovere una vita in caso di collisione
int startInvincibilita;				//Memorizza l'inizio dell'invincibilità per disattivarla dopo un tempo fisso

begin
	graph=10;
	palla=0;
	invincibile=0;
	m_animazione=10;
  loop
   
	if(key(_left)) x=x-6; angle=+20000; else angle=0; end
    if(key(_right)) x=x+6; angle=-20000;  end
	if(key(_up)) y=y-6; end
	if(key(_down)) y=y+6; end
	
	// if((get_timer()-last_time)>1000)
	// if(key(_SPACE))
			// last_time=get_timer(); 
			// palla=1; graph=20; 
			// angle=0; 
			// frame; 
		// else palla=0; graph=10; 
		// end 
	// end //--appallottolamento
	
	if(palla==0&&(get_timer()-last_time)>50)
		graph=m_animazione; m_animazione+=1; frame;
		last_time=get_timer();
		if (m_animazione>11)
			m_animazione=10;
		end
	end

	//if((get_timer()-last_time)>500)
	/// se abilito anche queste righe mi da errore nel compilare........
	//if(key(_SPACE))  
	//	last_time=get_timer(); 
	//	palla=1;	graph=20;	
	//	frame; 
	//else 
	//	palla=0;
	if(key(_CONTROL)) // tasto R su pandora
		last_time=get_timer(); 
		palla=1;	graph=20;	
		frame; 
	else 
		palla=0;
	end 
	//end //--appallottolamento

	   
	/// se abilito anche queste righe mi da errore nel compilare........
	//if((key(_Z))&& premuto==0 &&palla==0 &&nfiamme>0) fiamme(x-27,y+12);premuto=1; nfiamme=nfiamme-1;end //sparafuoco
	//if(!key(_Z))	 premuto=0; end
	
        //if((key(_C))&& premuto2==0 &&palla==0 &&nacqua>0) acqua(x+27,y+12);premuto2=1; nacqua=nacqua-1; end //sparaacqua
	//if(!key(_C))	 premuto2=0; end
	
	//if((key(_X))&& premuto3==0 &&palla==0 &&nfiocco>0) fiocco(x,y+4);premuto3=1;  nfiocco=nfiocco-1; end //sparafiocco
	//if(!key(_X))	 premuto3=0; end
	
	////////////////pandora button
	
	// X: Page Down
	if((key(_PGDN))&& premuto==0 &&palla==0 &&nfiamme>0) fiamme(x-27,y+12);premuto=1; nfiamme=nfiamme-1;end //sparafuoco
	if(!key(_PGDN))	 premuto=0; end
	
	// Y: Page Up
    if((key(_PGUP))&& premuto2==0 &&palla==0 &&nacqua>0) acqua(x+27,y+12);premuto2=1; nacqua=nacqua-1; end //sparaacqua
	if(!key(_PGUP))	 premuto2=0; end
	
	// A: Home
	if((key(_HOME))&& premuto3==0 &&palla==0 &&nfiocco>0) fiocco(x,y+4);premuto3=1;  nfiocco=nfiocco-1; end //sparafiocco
	if(!key(_HOME))	 premuto3=0; end
	///////////////////////////////////////
	
	if(y<15) y=15; end              //limite_superiore
    if(y>460) y=460; end            //limite_inferiore
	if(x<260) x=260; end            //limite SX
	if(x>540) x=540; end            //limite DX
	
	//-------------------------------------------------------------------------
	togliVita = 0;					//Resetta la variabile utilizzata per togliere una vita

	//-------------------------------------------------------------------------
	//Le collisioni vengono gestite solo se il personaggio non è invincibile
	//Se è già avvenuta una collisione salta i controlli delle altre collisioni (può essere tolto il controllo se si vogliono gestire ad esempio animazioni particolari su più collisioni)
	
	//-------------------------------------------------------------------------
	//Collisione con muro
	if(togliVita==0)
		idMuro=collision(type muro);
		if(idMuro)
			//Se il muro non è già stato distrutto allora controlla la collisione
			if(idMuro.distrutto==0)
				if((idMuro.ghiacciato==1) && (palla==1))
					//Rende il muro trasparente in quanto viene attraversato e indica che non è più 'pericoloro' ad eventuali passaggi successivi
					idMuro.alpha = 50;
					idMuro.distrutto = 1;
				elseif(invincibile == 0)
					//Se il personaggio non è invincibile toglie una vita
					togliVita = 1;
				end
			end
		end
	end
	//-------------------------------------------------------------------------
	//Collisione con fuoco
	if(togliVita==0)
		idFuoco=collision(type fuoco);
		if(idFuoco)
			//Se il fuoco non è già stato distrutto allora controlla la collisione
			if(idFuoco.distrutto==0)
				if(idFuoco.spento==1)
					//Rende il fuoco trasparente in quanto viene attraversato e indica che non è più 'pericoloro' ad eventuali passaggi successivi
					idFuoco.alpha = 50;
					idFuoco.distrutto = 1;
				elseif(invincibile == 0)
					//Se il personaggio non è invincibile toglie una vita
					togliVita = 1;
				end
			end
		end
	end
	//-------------------------------------------------------------------------

	//-------------------------------------------------------------------------
	//Gestione Vita
	if ((collision(type legno) && palla==0)
		or (collision(type laser) && laserspento==0)
		or togliVita == 1)

		if(invincibile==0)
			vite=vite-1;       				//diminuisce 1 vita
			invincibile=1;     				//diventa invincibile
			alpha=100;		 				//trasparentizza
			startInvincibilita=get_timer();	//Memorizza il tempo iniziale dell'invincibilità
		end
	else
		//Check Invincibile
		if(invincibile==1)
			//Controlla per quanto tempo invincibile è a 1
			if((get_timer()-startInvincibilita)>1000)	//Dopo un secondo resetta l'invincibilità
				invincibile=0;  	  //ritorna normal
				alpha=1000;         //opacizza
			end
		end
	end //Se sbatti col muro muori
	//-------------------------------------------------------------------------
	
	frame;  
 end
end
come potete vedere dai commenti Bennu non lo conosco granchè....infatti per compilare ho dovuto disabilitare la gestione tasti che viene usata da PC....perchè se no mi da errore.

Ah dimenticavo ho mappato i tasti cosi (versione di test e non definitiva..):
DPAD movimenti (che funzionava da sempre anche con le vecchie versioni)
Bottone R (post DX di Pandora) per accucciare ( ma puo andare bene anche B )
A : sparafiocco
X : sparafuoco
Y : spara acqua
B : conferma nei menu

Ancora manca la gestione dell'uscita pensavo di metterla nella gestione della pausa...cioè se in pausa e si preme ESC si esce dal gioco o si torna al menu...ho fatto una prova ma non funziona...

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 18:17
by Zip
ieri avevo gia aggiustato y guarda come è gestito ora :)
@ farox posta la tua versione completa per piacere e chiamala 0.37p e cosi la confronto con la 037 normale :)
(nella 040 ho aggiunto la possibilita di uscire premendo ESC se si è in pausa)
oppure rimappa usando questa 0041

edit: come puoi vedere gigios la generazione non sembra cosi casuale visto che il rand genera
sx
ssx
cx
ddx
dx
di seguito :/
riedit: ho aggiunto
dopo il begin in GENERA()

Code: Select all

rand_seed(time());
sembra essere migliorata la casualita, passo a fare scelta casuale tipi dei muri :)

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 18:29
by gigios
[OT]
Normalmente tutte le funzioni per generare numeri casuali, non sono tali!!!
Di solito, come hai fatto tu, si usa dare un 'seme' di partenza da cui partire a generare i vari numeri casuali.
Praticamente se applichi sempre lo stesso seme la sequenza di numeri generati sarà sempre la stessa, proprio perché non è realmente 'casuale'!
[/OT]

Appena posso provo l'ultima versione :)

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 18:37
by Zip
generazione di tipo casuale introdotta!!!

ora vedo di aggiungere le condizioni
se parte =100 200 300 ecc esce 1 laser
se parte> 400 iniziano a uscire i fuochi
e vedo di rimettere i pwup :D
per migliorare la casualita che dovrei fare allora?

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 18:52
by gigios
Per la casualità nulla!
Basta fare quello che hai fatto, ovvero passare come seed un valore sicuramente variabile, infatti sarà praticamente impossibile che il programma venga eseguito nello stesso giorno e alla stessa ora, con precisione del millisecondo :)
Praticamente con la tua istruzione di inizializzazione ti sei garantito che ad ogni riavvio dell'applicazione i livelli generati siano sicuramente differenti rispetto all'avvio precedente.

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 18:58
by Zip
ho introdotto la parte dei fuochi dopo una certa "parte"
ho notato delle cose da sisetmare!
praticamente i poter acqua ghiaccio fuoco e i rispettivi muri nemici.

se io colpisco con una goccia il fuoco esso si spegne, ok..
ma devevo fare leggere alla goccia la variabile "spento" di fuoco e fare si che se è spento la nuova goccia non si infranga contro il muro semitrasparente ma passi..

c'era un errore che ho corretto in goccie che ho corretto aggiungendo

Code: Select all

if (collision (type fuoco))
		frame; break;
in pratica prima una goccia poteva spegnere tanti fuochi ora ho sistemato e si ferma al primo!
ma le nuove gocce non passano
devo sfruttate il pubblic che hai introdotto tu per "spento" ma non ci riesco :/ poi dai un occhiata tu magari
non subito perche devo aggiungere altro

io vedo di migliorare le condizioni legate a parte per aumentare la difficolta..

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 19:10
by Zip
come faccio a ottenere una condizione del genere:

dopo che parte ha superato 50
ogni 30 parti generate
genera un fuoco
end

oppure

se parti generate multiplo di 200 (200 400)
genera laser
end

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 19:13
by gigios
Ricapitolando, devo vedere il processo goccia, giusto?

Lo rendo come il muro e fuoco!

Re: [Pandora rebirth] Fall to win

Posted: 22 Mar 2012, 19:14
by Zip
aspetta prendi questo che ci sono anche i fuochi..
e se puoi dimmi come dovrei tradurre qulle condizioni