---CODICE---
; Con questo alias viene creata una nuova finestra chiamata
@gioco (se è gia in esecuzione la finestra viene
resa attiva)
; i parametri usati nel comando "/window" sono
spiegati chiaramente nell'help del mIRC, nel nostro caso
servono solamente per dare al giochino
; un aspetto grafico più adeguato alle nostre esigenze,
mentre le variabili specificate serviranno per salvare i
punti del giocatore (%px.p),
; quelli del computer (%px.pc) e per controllare lo stato
del gioco (%g.act); il valore 1 di quest'ultima variabile
sta ad indicare che il gioco è attualmente in esecuzione.
; la variabile %nome.p, come facilmente intuibile, serve
ad immagazzinare il nome del giocatore.
alias pingpong if (!%g.act) { %nome.p = $?="Inserirsci
il tuo nome:" | window -dCp +fd @gioco 0 0 505 410
| %px.p = 0 | %px.pc = 0 | %g.act = 1 | gioco } | else window
-a @gioco
; Nell'alias precendente viene invocato un altro alias,
chiamato gioco. Tutti i comandi draw che vedete servono
solamente a disegnare linee, rettangoli e punti nella nostra
finestra.
; Le variabili %player e %pc servono a salvare le posizioni
nella finestra delle racchette. Potete notare che i valori
di queste variabili sono composte da 4 parametri separati
da punti
; In pratica quei quattro numeri indicano il punto X di
origine, il punto Y di origine, la larghezza e l'altezza
delle racchette (x y w h).
; Il comando e i parametri del "/drawtext" servono
solamente a visualizzare il punteggio della partita. Inoltre
vengono startati due timer, il primo controllerà
il movimento della pallina,
; mentre il secondo il movimento della racchetta del computer.
alias -l gioco {
clear @gioco
if (!%nome.p) %nome.p = Giocatore
%palla.v = 0
%palla.o = 1
%pallax = 20
%pallay = 20
drawrect -f @gioco 1 1 0 0 505 410
drawrect @gioco 12 1 10 10 480 340
drawrect -f @gioco 0 1 245 0 10 360
drawdot @gioco 12 8 %pallax %pallay
drawrect -f @gioco 0 1 20 140 10 80
drawrect -f @gioco 0 1 470 140 10 80
drawtext @gioco 12 Verdana 14 20 370 -PUNTEGGIO- %nome.p
$+ : %px.p - Computer: %px.pc
%player = 20.30.140.220
%pc = 470.480.140.220
.timergiocop -cm 0 7 palla
.timergiocomovpc -cm 0 10 mv.pc
}
; Questo alias è invocato dal timer giocop che, come
detto, gestisce il movimento della palla. Anche se a prima
vista può sembrare complicato, il codice si basa
su una teoria semplicissima:
; Le variabili controlleranno se la pallina sta andando
su, giu, destra e/o sinistra, e ne verrà modificata
la direzione se la palla va in collissione con i margini
del campo, per gestire questa collisione
; viene effettuato un continuo controllo sulle variabili
x ed y della pallina in base alla posizione del campo di
cui terremo presente sempre le coordinate x ed y.
; Il primo controllo viene effettuato sull'ipotesi che la
pallina esce fuori dai margini laterali del campo, se si
verifica questo evento vuol dire che la racchetta non e'
stata in grado di far rimbalzare
; la pallina, quindi il gioco viene fermato, incrementata
la variabile del punteggio (a seconda se la pallina esce
a destra o a sinistra) e ristartato il gioco dall'inizio.
; per dare l'effetto grafico del movimento della pallina
verrà utlizzata una semplice tecnica, ossia colorare
di nero il punto precendente della pallina (x,y) e di blu
quello nuovo. La stessa tecnica verrà
; utilizzata per il movimento delle racchette.
; L'eccezzione si verifica soltanto quando la pallina passa
sopra la rete, in questo caso il colore non sarà
il nero ma il bianco.
alias -l palla {
;valore 1 alto e destra - valore 0 basso e sinistra
if ((%pallax <= 0) || (%pallax >= 505)) { drawdot
@gioco 1 8 %pallax %pallay | .timergioco* off | inc % $+
$iif(%pallax <= 0,px.pc,px.p) | .timergioco 1 1 gioco
| halt }
var %x, %y, %t
if ((%pallax >= 235) && (%pallax <= 265))
drawrect -f @gioco 0 1 245 0 10 360
if (%pallay == 20) { %palla.v = 0 }
if (%pallay == 340) { %palla.v = 1 }
if ((%pallax isnum 20 - $calc($gettok(%player,1,46) + 18))
&& (%pallay isnum $gettok(%player,3,46) - $gettok(%player,4,46)))
{ %palla.o = 1 | tokenize 46 %player | %t = 1 }
if ((%pallax isnum $calc($gettok(%pc,2,46) - 18) - 480)
&& (%pallay isnum $gettok(%pc,3,46) - $gettok(%pc,4,46)))
{ %palla.o = 0 | tokenize 46 %pc | %t = 1 }
if (%palla.v == 1) %y = $calc(%pallay - 1)
else %y = $calc(%pallay + 1)
if (%palla.o == 0) %x = $calc(%pallax - 1)
else %x = $calc(%pallax + 1)
drawdot @gioco 1 8 %pallax %pallay
drawdot @gioco 12 8 %x %y
%pallax = %x | %pallay = %y
if (%t) { drawrect -f @gioco 0 1 $1 $3 10 80 }
}
; Questo alias gestisce il movimento della racchetta verso
l'alto. L'immagine viene disegnata con lo stesso principio
sopra citato.
; La variabile %player mantiene i parametri del posizionamento
della racchetta aggiornandosi automaticamente ad ogni termine
dello script.
alias -l mv.s {
tokenize 46 %player
if ($3 >= 20) {
drawrect -f @gioco 1 1 $1 $3 10 80
drawrect -f @gioco 0 1 $1 $calc($3 - 1) 10 80
%player = $1 $+ . $+ $2 $+ . $+ $calc($3 - 1) $+ . $+ $calc($3
- 1 + 80)
}
}
; Come il caso precendente, ma la gestione è riferita
al movimento verso il basso.
alias -l mv.g {
tokenize 46 %player
if ($3 <= 260) {
drawrect -f @gioco 1 1 $1 $3 10 80
drawrect -f @gioco 0 1 $1 $calc($3 + 1) 10 80
%player = $1 $+ . $+ $2 $+ . $+ $calc($3 + 1) $+ . $+ $calc($3
+ 1 + 80)
}
}
; Questo invece gestisce il movimento della racchetta governata
dal computer. La racchetta si sposta in base alle coordinate
x ed y della pallina
; e come nei casi precedente la variabile %pc mantiene sempre
aggiornate le coordinate del posizionamento della racchetta.
alias -l mv.pc {
tokenize 46 %pc
if ($3 isnum 20-260) {
var %y = $calc($3 $iif(%pallay <= $calc($3 + 40),-,+)
1)
if (%y < 20) %y = 20 | elseif (%y > 260) %y = 260
drawrect -f @gioco 1 1 $1 $3 10 80
drawrect -f @gioco 0 1 $1 %y 10 80
%pc = $1 $+ . $+ $2 $+ . $+ %y $+ . $+ $calc(%y + 80)
}
}
; Nel primo caso viene gestita la pressione dei tasti su
e giu, che attivano il timer giocomov attribuendogli l'alias
mv.s o mv.g in base al tasto premuto.
; Quando invece questi due tasti vengono lasciati (evento
keyup) il timer viene fermato.
; In fine quando il gioco viene chiuso (il gioco si chiude
dalla switchbar) la variabile %g.act viene cancellata e
tutti i timer fermati.
on *:keydown:@gioco:38,40:.timergiocomov off | .timergiocomov
-cm 0 10 $iif($keyval == 38,mv.s, mv.g)
on *:keyup:@gioco:38,40:.timergiocomov off
on *:close:@gioco:unset %g.act | .timergioco* off
---FINE CODICE---
Per lanciare il gioco basta scrivere dalla riga di comando
/pingpong e con questo credo sia tutto :).
Clicca per ingrandire
Guerrjero
www.tuttoirc.it
|