Aiuto - Cerca - Utenti - Calendario
Versione completa: [LUA] PSP
.:Go!PSP Forum:. News sulle Console Sony - Hardware - Custom Firmware - Modding > Console PSP > Firmware & Custom Firmware > Temi & Modding PSP
Raffa94
Ragazzi non ho trovato una guida oppure una sezione dove postare questo topic.

Bè vorrei sapere se voi ve ne intendete di "Linguaggio LUA" per PSP

Mi piacerebbe impararlo, oppure sapere le cose basi.

Questo è il codice che ho trovato in rete:

» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)

--variabili scritte
tempo_scritta=0

--varibili di moto
xspeed=4
yspeed=4
x=10
y=10


--posizione nemico

ex=math.random(470)
ey=math.random(260)

---funzioni

function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end



function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end





function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

end


function informazioni()
--se la collisione avviene o è appena avvenuta
if (collide() or tempo_scritta>0) then
screen:print(0, 15,"COLPITO!", red)
tempo_scritta=tempo_scritta-1

end
end






-- ciclo principale

while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end



limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


Vorrei capire:

- Come posso mettere il punteggio?
- Come posso ad ogni "colpito" far cambiare la posizione del nemico?

Grazie a chi è disposto ad aiutarmi ^^
kabir94
per prima cosa, dentro lo spoiler usa i tag [ code ] [ /code ] che cosi si capisce molto meglio biggrin.gif
Fai conto che non conosco e non ho mai usato LUA:
1- Per prima cosa, per il punteggio dovrebbe essere molto semplice.
Semplicemente crei una variabile, chiamata "punteggio" (o qualcosa del genere) e a ogni colpito! la incrementi di 1 (o quanto vuoi tu).
2- Intendi metterlo in una posizione random? basta cambiare ex e ey, rifacendo math.random ad ogni colpito!

In puro codice:
per la variabile, aggiungi prima di "---funzioni" qualcosa del tipo
CODICE
punteggio = 0

adesso dovresti sostituire
CODICE
if (collide() or tempo_scritta>0) then
    screen:print(0, 15,"COLPITO!", red)
    tempo_scritta=tempo_scritta-1

end

con
CODICE
if (collide() or tempo_scritta>0) then
    screen:print(0, 15,"COLPITO!", red)
    punteggio=punteggio+1
    screen:print(1, 15, punteggio, red)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end


Spero che funzioni, come gia detto non ho mai usato e non conosco il LUA <.<
Rising1
sono interessato a questo linguaggio e avrei domande:
-permette di creare SOLO giochi per psp o anche per altre console/programmi?
-bisogna conoscere bene altri linguaggi? io so il pascal a livelli da principiante (solo programmi da console e matematici, ma conosco i vari cicli etc...)
-in caso decidessi di impararlo, che guida mi consigliate
-esistono altri linguaggi di programmazione di semplici videogiochi (magari associati ad rpgmaker) migliori?
kabir94
CITAZIONE (Rising1 @ Tuesday 4 January 2011 - 10:46) *
sono interessato a questo linguaggio e avrei domande:
-permette di creare SOLO giochi per psp o anche per altre console/programmi?

No, il LUA praticamente sta ovunque... è un linguaggio interpretato (come Python), quindi hai solo bisogno di un interprete.
Esistono numerosi interpreti, per PSP, DS , PC ecc... per PC lo trovi qua: http://www.lua.org/
CITAZIONE (Rising1 @ Tuesday 4 January 2011 - 10:46) *
-bisogna conoscere bene altri linguaggi? io so il pascal a livelli da principiante (solo programmi da console e matematici, ma conosco i vari cicli etc...)

Guarda, alla fine tutti i linguaggi di alto livello un po si assomigliano, se sai un po di pascal non dovresti avere grossi problemi in futuro.
CITAZIONE (Rising1 @ Tuesday 4 January 2011 - 10:46) *
-in caso decidessi di impararlo, che guida mi consigliate

TI consiglierei di dare un occhiata al manuale ufficiale che trovi sul sito http://www.lua.org/docs.html se l'inglese non è un problema.
Inoltre in quella pagina ci sono anche parecchi manuali consigliati (sempre in inglese).
In italiano non saprei...
CITAZIONE (Rising1 @ Tuesday 4 January 2011 - 10:46) *
-esistono altri linguaggi di programmazione di semplici videogiochi (magari associati ad rpgmaker) migliori?

Per associati intendi simili? direi che per creare RPG in modo facile rpgmaker è il migliore...
Rising1
ok grazie wink.gif
ma un interprete in pratica è come un compilatore? che, ad esempio poi ti trasforma il codice in un file .nds o in eboot etc?
per la cosa di rpg maker intendevo il fatto che per usarlo bisogna avere le basi per saper programmare (secondo quanto ho capito), quindi intendevo se c'è un linguaggio specifico per programmare con rpgmaker
Raffa94
Grazie ragazzi, oggi proverò a mettere il codice e vi farò sapere.

Se non erro rpgmaker non devi programmare, ti da già tutto lui, tu devi solo cliccare per ex sulla porta e trascinarla nello scenario.
kabir94
CITAZIONE (Rising1 @ Tuesday 4 January 2011 - 14:14) *
ok grazie wink.gif
ma un interprete in pratica è come un compilatore? che, ad esempio poi ti trasforma il codice in un file .nds o in eboot etc?
per la cosa di rpg maker intendevo il fatto che per usarlo bisogna avere le basi per saper programmare (secondo quanto ho capito), quindi intendevo se c'è un linguaggio specifico per programmare con rpgmaker

No, un compilatore non è un interprete biggrin.gif
Un compilatore ti crea dal sorgente un eseguibile, e questo è stand-alone (ovvero non ha più bisogno del compilatore per funzionare). (esempio: C, Pascal ecc...)
Invece un interprete prende il sorgente e lo esegue sul momento, e per far funzionare il tuo sorgente hai bisogno dell'interprete (esempio: Python, Pearl, LUA, Ruby ecc...)
RPG Maker ha un suo linguaggio di scripting, che serve ad aggiungere feature al gioco... ma in linea di massima per un gioco semplice non lo usi oppure usi codice gia fatto da altri.
Rising1
CITAZIONE (kabir94 @ Tuesday 4 January 2011 - 17:05) *
No, un compilatore non è un interprete biggrin.gif
Un compilatore ti crea dal sorgente un eseguibile, e questo è stand-alone (ovvero non ha più bisogno del compilatore per funzionare). (esempio: C, Pascal ecc...)
Invece un interprete prende il sorgente e lo esegue sul momento, e per far funzionare il tuo sorgente hai bisogno dell'interprete (esempio: Python, Pearl, LUA, Ruby ecc...)
RPG Maker ha un suo linguaggio di scripting, che serve ad aggiungere feature al gioco... ma in linea di massima per un gioco semplice non lo usi oppure usi codice gia fatto da altri.

grande! notworthy.gif
ok tutto chiaro grazie naughty.gif
Raffa94
kabir grazie mille, il tuo codice funziona (ho apportato alcuni endamenti al mio cmq questo che ora vi riporto è il codice modificato e che funziona) però ora vorrei sapere (se sai come si fa ovvio ^^) come far apparire la scritta "Preso!" un pochino sopra a quando ho preso l'obbiettivo. Qui sotto ho riportato il codice:

» Click to show Spoiler - click again to hide... «
-Codice con il Tag-codice DISATTIVATO
» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)

--variabili scritte
tempo_scritta=0

--varibili di moto
xspeed=4
yspeed=4
x=10
y=10

--punteggio

punteggio = 0

--posizione nemico

ex=math.random(470)
ey=math.random(260)

---funzioni

function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end


function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end


function informazioni()

--se la collisione avviene o è appena avvenuta

if (collide() or tempo_scritta>0) then
screen:print(3, 15,"Preso!", red)
punteggio=punteggio+1
screen:print(3, 3, punteggio, green)
tempo_scritta=tempo_scritta-1
ex=math.random(470)
ey=math.random(260)
end

end

-- ciclo principale

while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end



limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


-Codice con il Tag-codice ATTIVATO
» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
CODICE
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)


--variabili scritte
CODICE
tempo_scritta=0


--varibili di moto
CODICE
xspeed=4
yspeed=4
x=10
y=10


--punteggio
CODICE
punteggio = 0


--posizione nemico
CODICE
ex=math.random(470)
ey=math.random(260)


---funzioni
CODICE
function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end



CODICE
function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


CODICE
function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end



CODICE
function informazioni()


--se la collisione avviene o è appena avvenuta

CODICE
if (collide() or tempo_scritta>0) then
    screen:print(3, 15,"Preso!", red)
    punteggio=punteggio+1
    screen:print(3, 3, punteggio, green)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end

end


-- ciclo principale

CODICE
while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end




CODICE
limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


Grazie mille ^^
kabir94
CITAZIONE (Raffa94 @ Tuesday 4 January 2011 - 18:59) *
kabir grazie mille, il tuo codice funziona (ho apportato alcuni endamenti al mio cmq questo che ora vi riporto è il codice modificato e che funziona) però ora vorrei sapere (se sai come si fa ovvio ^^) come far apparire la scritta "Preso!" un pochino sopra a quando ho preso l'obbiettivo. Qui sotto ho riportato il codice:

» Click to show Spoiler - click again to hide... «
-Codice con il Tag-codice DISATTIVATO
» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)

--variabili scritte
tempo_scritta=0

--varibili di moto
xspeed=4
yspeed=4
x=10
y=10

--punteggio

punteggio = 0

--posizione nemico

ex=math.random(470)
ey=math.random(260)

---funzioni

function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end


function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end


function informazioni()

--se la collisione avviene o è appena avvenuta

if (collide() or tempo_scritta>0) then
screen:print(3, 15,"Preso!", red)
punteggio=punteggio+1
screen:print(3, 3, punteggio, green)
tempo_scritta=tempo_scritta-1
ex=math.random(470)
ey=math.random(260)
end

end

-- ciclo principale

while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end



limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


-Codice con il Tag-codice ATTIVATO
» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
CODICE
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)


--variabili scritte
CODICE
tempo_scritta=0


--varibili di moto
CODICE
xspeed=4
yspeed=4
x=10
y=10


--punteggio
CODICE
punteggio = 0


--posizione nemico
CODICE
ex=math.random(470)
ey=math.random(260)


---funzioni
CODICE
function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end



CODICE
function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


CODICE
function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end



CODICE
function informazioni()


--se la collisione avviene o è appena avvenuta

CODICE
if (collide() or tempo_scritta>0) then
    screen:print(3, 15,"Preso!", red)
    punteggio=punteggio+1
    screen:print(3, 3, punteggio, green)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end

end


-- ciclo principale

CODICE
while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end




CODICE
limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


Grazie mille ^^

Per obiettivo intendi quando becchi in "nemico"?
Se si, in linea di massima ti basta cambiare
CODICE
    screen:print(3, 15,"Preso!", red)

con
CODICE
    screen:print(ex-5, ey,"Preso!", red)

aggiustando il -5 con un numero che vuoi tu (potrei essermi confuso sulla posizione dell'ex e ey, al massimo prova a scambiarli biggrin.gif).
Raffa94
Ecco cosa sbagliavo... io mettevo il trattino in basso ex: "posizione_x+1" e non mi veniva ora ho modificato cosi:

CODICE
if (collide() or tempo_scritta>0) then
    screen:print(x-15, y+13,"Preso!", red)
    punteggio=punteggio+1
    screen:print(3, 3, punteggio, green)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end


e mi viene

Ora sto cercando di mettere almeno delle cose con cui la mia "X" muore xD ma è complicato Grz ancora ^^
Raffa94
Avrei bisogno ancora d'aiuto...

Se io volessi creare un altro "cursore" che si chiama ex: Z che si muove con altri tasti come faccio? ho provato a smanettare ma mi da un errore di numero, una cosa cosi. Sapreste aiutarmi? (il codice che uso è sempre quello di prima)

Ho provato a far cosi però non è quello che volevo(ma ci sto vicino):

» Click to show Spoiler - click again to hide... «
» Click to show Spoiler - click again to hide... «
-- inizializzo le variabili

--colori
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)

--variabili scritte
tempo_scritta=0

--varibili di moto
xspeed=4
yspeed=4
x=10
y=10

zxspeed=4
zyspeed=4
zx=15
zy=15

--punteggio

punteggio = 0

--posizione nemico

ex=math.random(470)
ey=math.random(260)

---funzioni

function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end


function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna Z
screen:print(zx, zy, "Z", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end


function informazioni()

--se la collisione avviene o ? appena avvenuta

if (collide() or tempo_scritta>0) then
screen:print(x-15, y+13,"Preso!", red)
punteggio=punteggio+1
screen:print(3, 3, punteggio, green)
tempo_scritta=tempo_scritta-1
ex=math.random(470)
ey=math.random(260)
end

if (collide() or tempo_scritta>0) then
screen:print(zx-15, zy+13,"Preso!", red)
punteggio=punteggio+1
screen:print(13, 13, punteggio, green)
tempo_scritta=tempo_scritta-1
ex=math.random(470)
ey=math.random(260)
end

end

-- ciclo principale

while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end

--tasti cursore Z

if pad:triangle() then
zy=y-zyspeed
end

if pad:cross() then
zy=y+zyspeed
end

if pad:circle() then
zx=x+zxspeed
end

if pad:square() then
zx=x-zxspeed
end

limiti_bordi()

screen.waitVblankStart()
screen.flip()
end


» Click to show Spoiler - click again to hide... «
CODICE
-- inizializzo le variabili

--colori
green = Color.new(0, 255, 0)
red= Color.new(255,0, 0)
white = Color.new(255,255,255)

--variabili scritte
tempo_scritta=0

--varibili di moto
xspeed=4
yspeed=4
x=10
y=10

zxspeed=4
zyspeed=4
zx=15
zy=15

--punteggio

punteggio = 0

--posizione nemico

ex=math.random(470)
ey=math.random(260)

---funzioni

function collide()

if (x>=ex-5 and x<=ex+5 and y>=ey-5 and y<=ey+5) then
tempo_scritta=30
return true
end

end


function limiti_bordi()

if x>=470 then
x=470
end

if x<=0 then
x=0
end

if y>=260 then
y=260
end

if y<=0 then
y=0
end

end


function disegna()

--disegna il cursore
screen:print(x, y,"X", white)

--disegna l'obiettivo
screen:print(ex, ey,"O", red)

--disegna Z
screen:print(zx, zy, "Z", red)

--disegna il punteggio
screen:print(3, 3, punteggio, green)

end


function informazioni()

--se la collisione avviene o ? appena avvenuta

if (collide() or tempo_scritta>0) then
    screen:print(x-15, y+13,"Preso!", red)
    punteggio=punteggio+1
    screen:print(3, 3, punteggio, green)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end

if (collide() or tempo_scritta>0) then
    screen:print(zx-15, zy+13,"Preso!", red)
    punteggio=punteggio+1
    screen:print(13, 13, punteggio, green)
    tempo_scritta=tempo_scritta-1
    ex=math.random(470)
    ey=math.random(260)
end

end

-- ciclo principale

while true do
screen:clear()

disegna()

informazioni()

pad = Controls.read()


if pad:start() then
break
end

if pad:left() then
x=x-xspeed
end

if pad:right() then
x=x+xspeed
end


if pad:up() then
y=y-yspeed
end

if pad:down() then
y=y+yspeed
end

--tasti cursore Z

if pad:triangle() then
zy=y-zyspeed
end

if pad:cross() then
zy=y+zyspeed
end

if pad:circle() then
zx=x+zxspeed
end

if pad:square() then
zx=x-zxspeed
end

limiti_bordi()

screen.waitVblankStart()
screen.flip()
end
Questa è la versione 'lo-fi' del forum. Per visualizzare la versione completa con molte più informazioni, formattazione ed immagini, per favore clicca qui.
Invision Power Board © 2001-2024 Invision Power Services, Inc.