sdlBasic un piccolo basic per fare semplici giochi in 2d Questo basic e' una dimostrazione lampante della forza della licenza GPL L'interprete basic e' il wxbasic di David Cuny ("http://wxbasic.sourceforge.net") distribuito sotto licenza lGPL le librerie Grafiche SDL ("http://www.libsdl.org")sono distribuite sotto licenza GPL il motore grafico e' derivato dal mini gioco aliens ("http://www.libsdl.org/projects/aliens")scritto in c e distribuito sotto licenza GPL le rutine putpixel getpixel sono derivate direttamente dal tutorial delle SDL la rutine line e stata estratta e adattata direttamente dal sorgente della libreria python pygame("http://www.pygame.org") sempre sotto GPL Ho usato anche i sorgenti della libreria sdldraw ("http://sdl-draw.sourceforge.net/") Il sottoscritto non ha fatto altro che tagliare incollare e adattare sorgenti altrui distribuiti tutti sotto licenza GPL. Questo prodotto e' ovviamente soggetto alla licenza GPL ed e' gratuito come tutti i programmi sopra citati. _______________________________________________________________________________________________ sdlBasic elenco comandi e sintassi suggerisco di scaricare wxbasic per le istruzioni specifiche sezioni: Run time Sub and function Control structures Operator Array Strings Maths Files Dirs console output Date and time Screen Graphics File graphics input output Image manipulation Blitting Sprite system Bob system Text draw Print screen Sounds and music Keyboard Mouse Joystick SDLtime _________________________________________________________________________________________________________________________ Run time const option explicit : dichiarazione variabile obligatoria option qbasic include : inclusione file sorgente esterno argc : return number of args in caller argv : copy arg onto stack command command$ : returns requested arg from command line *run : run command on new thread shell : execute command, wait until finished end : terminate program and exit os : restituisce il nome del sistema operativo (windows o linux) _________________________________________________________________________________________________________________________ Sub and function declare sub function return _________________________________________________________________________________________________________________________ Control structures while wend exit while end while continue if then else elseif end if select case case else end case for each step next to continue *do *loop *until *continue _________________________________________________________________________________________________________________________ Operator + - * / ^ mod : shl : shift left shr : shift right or and xor not _________________________________________________________________________________________________________________________ Array dim *redim shared common lbound : returns lower bound of array *quicksort : sort an array ubound : upperbound of array erase _________________________________________________________________________________________________________________________ Strings asc : returns ascii value of first char in string chr chr$ : return string corresponding to ascii key value *format format$ : returns formatted string with embedded args insert insert$ : insert source string to target at index instr : returns position in source that target was found lcase lcase$ : convert string to lower case left left$ : returns leftmost chars in string len length : return length of string ltrim ltrim$ : returns string with left whitespace removed mid mid$ : returns string with chars 1..n from source replace replace$ : replace string from source with replace starting at index replacesubstr replacesubstr$ : replace substring in source with withstring reverse reverse$ : reverse a string right right$ : returns rightmost chars in string rinstr : reverse Instr function, search from end to start rtrim rtrim$ : right trim string space space$ : return string with n spaces in it str str$ : return string representation of numeric expression strf strf$ : converts a floating point or number value to a string string string$ : returns string m chars wide with n in it tally : returns number of occurances of matchstring trim trim$ : trim string typeof typeof$ : returns string with datatype ucase ucase$ : convert string to upper case val : returns closest numeric representation of number _________________________________________________________________________________________________________________________ Maths abs : returns absolute value of number acos : returns arccos of number asin : returns arcsin of number atan : returns arctan of number cos : returns cos of number exp : returns exponential function fix floor : truncate fractional number, rounding down towards zero frac : return fractional portion of number hex hex$ : returns hexidecimal representation of number int : convert to 32 bit integer, truncating decimals log : returns natural log of expression randomize : reseed the random number generator rnd : return an random number round : round to nearest integer sgn : returns sign of numeric expression sin : returns sine of given angle in radians sqr : return square root - make sure it's non-negative tan : return tanget of given angle in radians min : return min number of the operands max : return max number of the operands bitwiseand andbit : return the logic and of the operands bitwiseor orbit : return the logic or of the operands bitwisexor xorbit : return the logic xor of the operands _________________________________________________________________________________________________________________________ Files open as file input close output append eof : returns nonzero if Eof fileexists : returns true if the file exists filecopy : copy a file filemove : move a file filerename : rename a file freefile : return the handle of the next free file kill : delete filename loc : returns position in file lof : returns length of file readbyte : return a byte from the file rename : rename file seek : seek file position/return current file position writebyte : write a byte in the file _________________________________________________________________________________________________________________________ Dirs chdir : change directory dir dir$ : returns current path direxists : returns true if directory exists dirfirst : returns first entry in path dir dirnext : returns next entry in path dir mkdir : create a new directory rmdir : remove directory _________________________________________________________________________________________________________________________ console output print _________________________________________________________________________________________________________________________ Date and time date date$ : returns date in MM-DD-YYYY format time time$ : return time in HH:MM:SS format ticks : returns current timer value _________________________________________________________________________________________________________________________ Screen setdisplay(w,h,bpp,m) : apre lo schermo/finestra in double buffer in modo 0=screen|1=window|2=resize displaywidth : restituisce la larghezza del display displayheight : restituisce l'altezza del display displaybpp : restituisce la profondita di colore del display screen(n) : attiva lo schgermo logico n directscreen : apre direttamente il display come screen(piu veloce ma gli sprite e screen offset non funzionano correttamente) screenopen(n,w,h,dx,dy,dw,dh,flag) : apre lo schermo logico n di dimensione w,h nelle coordinate dx,dy,dw,dh, del display screenclose(n) : chiude lo schermo logico n screenclone(n,s,x,y,w,h,flag) : crea una nuova entrata nello schermo s screencopy(n,x,y,w,h,nd,xd,yd) : copia una porzione di schermo da n a nd screenfade(n,t) : sfuma lo screen n in t time screenfadein(n,i,t) : sfuma lo screen n verso l'immagine i in t time screencrossfade(n,i,t) : sfuma lo screen n verso dall'imagine correntel'immagine i in t time screenalpha(n,a) : setta il parametro alpha(trasparenza) allo screen n screenlock(n) : blocca lo screen n per l'accesso diretto dai comandi grafici screenunlock(n) : sblocca lo screen n per l'accesso diretto dai comandi grafici screenrect(x,y,w,h,flag) : modifica le coordinate di output sul display dello screen corrente xscreenrect : restituisce la coordinata x del rettangolo di output dello screen corrente yscreenrect : restituisce la coordinata y del rettangolo di output dello screen corrente wscreenrect : restituisce la coordinata w del rettangolo di output dello screen corrente hscreenrect : restituisce la coordinata h del rettangolo di output dello screen corrente flagscreenrect : restituisce lo stato del flag del rettangolo di output dello screen corrente screenwidth : restituisce la larghezza dello screen corrente screenheight : restituisce l'altezza dello screen corrente offset (x,y) : posiziona la posiziona di visione del display sullo schermo logico corrente xoffset : restituisce la coordinata x dell' offset dello screen corrente yoffset : restituisce la coordinata y dell' offset dello screen corrente cls : cancella lo schermo logico corrente screenswap : scambia lo schermo logico con quello fisico e aggiorna il bob system autoback setautoback(m) : attiva / disattiva lo screenswap automatico m=0 disattivato m>0 attende m millisecondi e performa lo screenswap m<0 esegue il comando screen swap solo se chiamato e dopo m millisecondi dualplayfield(optional m) : attiva / disattiva l'aggiornamento degli screen sopra al piano dei bob waitvbl : attende lo screenswap automatico fps(optional n) : attiva/disattiva o restituisce frame rate corrente (0/1/none) _________________________________________________________________________________________________________________________ Graphics rgb(r,g,b) : restituisce il colore corrente in formato Uint32 color (c,optional v) : setta il colore della paletta c con il valore v se mancante restituisce il colore c palette(optional 0-255 param) : setta l'intera paletta ink(c) : seleziona il colore corrente dal formato Uint32 point(x,y) : restituisce la componente colore alla coordinata x,y dot(x,y) : scrive un punto con il colore ink alla coordinata x,y plot(x,y,c) : scrive un punto con il colore c alla coordinata x,y line(x,y,x1,y1) : traccia una linea box(x,y,x1,y1) : traccia un rettangolo vuoto bar(x,y,x1,y1) : traccia un rettangolo pieno circle(x,y,r) : traccia un cerchio fillcircle(x,y,r) : traccia un cerchio pieno ellipse(x,y,rx,ry) : traccia un ellisse fillellipse(x,y,rx,ry) : traccia un ellisse piena paint(x,y) : riempie un area chiusa _________________________________________________________________________________________________________________________ File graphics input output loadimage(filename,n) : carica in un banco file grafico saveimage(filename,n) : salva il banco n nel file grafico (deve essere .bmp) loadsound(filename,n) : carica in un banco un file wav soundexists( n) : restituisce 1 se il bancosonoro n esiste 0 se vuoto loadmusic(filename) : carica in un banco un file xm mod musicexists() : restituisce 1 se la musica e' caricata 0 se vuoto _________________________________________________________________________________________________________________________ Image manipulation hotspot(n,x,y) : stabilisce il punto delle coordinate (n,0,0=alto sx | n,1,1=centro | n,2,2 =basso dx)n= image imageexists( n) : restituisce 1 se il banco n esiste 0 se vuoto imagewidth(n) : restituisce la larghezza dell'immagine n imageheight(n) : restituisce l'altezza dell'immagine n deleteimage(n) : cancella l'immagine n dalla memoria copyimage(s,d) : copia l'immagine s nel banco d setalpha(n,a) : setta la trasparenza zoomimage(n,zoomx.zoomy) : zoomma l'immagine rotateimage(n,angle) : ruota l'immagine rotozoomimage(n,angle,zoom) : ruota e zoomma l'imagine _________________________________________________________________________________________________________________________ Blitting blt(n,sx,sy,sw,sh,dx,dy) : copia un banco nello screen pastebob(x,y,n) : copia sullo schermo il banco n alle coordinate x,y ritagliando pasteicon(x,y,n) : copia sullo schermo il banco n alle coordinate x,y grab(n,x,y,w,h) : ritaglia dallo schermo corrente e copia nel banco _________________________________________________________________________________________________________________________ Sprite system In questa implementazione ci sono 512 sprite software che sono indipendenti degli screen spriteclip(x,y,w,h) : imposta il clipping degli sprite sprite(n,x,y,fr) : attiva o sposta il sprite n alla coordinata x,y con l'immagine fr deletesprite(n) : disattiva il sprite n xsprite(n) : restituisce la coordinata x del sprite n ysprite(n) : restituisce la coordinata y del sprite n spritewidth(n) : restituisce la larghezza del sprite n spriteheight(n) : restituisce l'altezza del sprite n frsprite(n) : restituisce il frame del sprite n livesprite(n) : restituisce 1 se il sprite n e' "vivo" spritehit(n, optional x) : restituisce 1 se il sprite n collide con il sprite x se -1 con tutti autoupdatesprite(m) : attiva / disattiva l'aggiornamento automatico dei sprite allo screenswap updatesprite : attiva un aggiornamento manuale degli sprite allo screenswap _________________________________________________________________________________________________________________________ Bob system In questa implementazione ci sono 512 bob software che sono dipendenti degli screen e attuano il background preserve setbob(n,scr) : assegna il bob n allo screen scr bob(n,x,y,fr) : attiva o sposta il bob n alla coordinata x,y con l'immagine fr deletebob(n) : disattiva il bob n xbob(n) : restituisce la coordinata x del bob n ybob(n) : restituisce la coordinata y del bob n bobwidth(n) : restituisce la larghezza del bob n bobheight(n) : restituisce l'altezza del bob n frbob(n) : restituisce il frame del bob n livebob(n) : restituisce 1 se il bob n e' "vivo" bobhit(n,optional x) : restituisce 1 se il bob n collide con il bob x se -1 con tutti autoupdatebob(m) : attiva / disattiva l'aggiornamento automatico dei bob allo screenswap updatebob : attiva un aggiornamento manuale dei bob allo screenswap _________________________________________________________________________________________________________________________ Text draw text(x,y,s,testo) : stampa il testo sul video con s size setfont(path) : seleziona il font d'uso textrender(testo,s,n) : crea il bob n contenente il "testo" scritto con il font corrente con size s _________________________________________________________________________________________________________________________ Print screen pen(c) : setta il colore di print con -1 restituisce il colore corrente paper(c) : settail colore di sfondo del carattere con -1 restituisce il colore corrente fprints(testo) : stampa un testo monospace nella griglia senza il return finale prints(testo) : stampa un testo monospace nella griglia locate(x,y) : muove il cursore di stampa alle coordinate x y atx : restituisce la coordinata x del cursore aty : restituisce la coordinata y del cursore curson : visualizza il cursore lampeggiante sul video alle coordinate (atx,aty) cursoff : spegne il cursore lampeggiante sul video inputs(prompt,defs) : raccoglie l'input da tastiera fino alla pressione di invio e lo restituisce zoneinputs(x,y,l,default) : raccoglie l'input da tastiera fino alla pressione nell'area specificata da x,y,l _________________________________________________________________________________________________________________________ Sounds and music playsound(n,c,optional l) : suona il suono n nel canale c l volte volumesound(c,optional v) : cambia il volume del canale c (-1 tutti) al valore v (0-128) stopsound(optional c) : ferma l'emissione del wav dal canale c (senza o -1 tutti) pausesound(optional c) : mette in pausa il canale c (senza o -1 tutti) resumesound(optional c) : sblocca dalla pausa il canale c (senza o -1 tutti) vumetersound(optional c) : restituisce lo stato corrente del canale c(senza o -1 tutti) positionsound(c,angle,dist) : posiziona il suono soundChannels(n) : definisce dinamicamente il numero di canali playmusic(n) : suona il track xm,mod,ogg,mp3 n e' l numero di volte (-1 continua) positionmusic(p) : sposta l'esecuzione al secondo indicato stopmusic : termina la riproduzione del modulo musicale pausemusic : mette in pausa la musica in esecuzione resumemusic : riavvia la musica in pausa rewindmusic : riavvolge la musica corrente fademusic(t) : esegue la dissolvenza progressiva della musica volumemusic(optional v) : cambia il volume della musica al valore v (0-128) speedmusic(v) : cambia la velocita di esecuzione della musica _________________________________________________________________________________________________________________________ Keyboard key(keycode) : restitusce 1 se e' premuto il tasto keycode inkey : restituisce il codice ascii del tasto premuto waitkey(optional keycode) : attende la pressione di un tasto(0 qualsiasi) _________________________________________________________________________________________________________________________ Mouse xmouse : restituisce la coordinata x del mouse sul display ymouse : restituisce la coordinata y del mouse sul display xmousescreen(n) : restituisce la coordinata x del mouse sullo screen ymousescreen(n) : restituisce la coordinata y del mouse sullo screen bmouse : restituisce il pulsante premuto del mouse mouseshow : visualizza il cursore del mouse mousehide : nasconde il cursore del mouse mousezone(x,y,w,h) : restituisce 1 se il mouse occupa questa parte dello screen _________________________________________________________________________________________________________________________ Joystick **xjoy : retituisce la coordinata x del joystick **yjoy : retituisce la coordinata y del joystick **bjoy : retituisce il pulsante premuto del joystick _________________________________________________________________________________________________________________________ SDLtime wait(t) : attende il trascorrere di t millisecondi timer : restituisce il tick corrente _________________________________________________________________________________________________________________________ * non funziona ** non funziona e da testare -> da eliminare to do: speedmusic vumeter msgbox (perform in interface.sdlblib) fsel (perform in interface.sdlblib) dirsel inputbox (perform in interface.sdlblib) listbox otionbox checkbox?? menu system (perform in interface.sdlblib) socket system sprite editor ide scritta in sdlBasic