Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Noiembrie 21, 2008, 10:27:23 am
Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
Noutăţi: De-Ce.net - Tips & Tricks
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: [C/NDS] Functii Text  (Citit de 180 ori)
0Utilizatori şi 1 Vizitatori
zapakitul
Global Moderator
Hero Member
*****
Deconectat Deconectat

Mesaje: 1415



[C/NDS] Functii Text, August 03, 2008, 03:01:17 pm

Salut! Ma gandeam ca pe masura ce ajung sa stapanesc cate un capitol nou din programarea pentru console precum Nintendo DS sa scriu cate un tutorial, care sa rezume ce am invatat!  Cu astea iind zise, putem sa ne apucam de treaba!

Cateva detalii legate de soft:
Compilator: DevkitARM, pentru procesoarele ARM 7 si ARM9, cele 2 procesoare folosite de Nintendo DS!
Librarii Folosite: PAlib
Ide: Programmers Notepad 2.0 DevKit Edition!
Emulator: No$GBA(NoCash Game Boy Advance)

Puteti sa sariti urmatorul capitol dar sugerez sa il cititi ca sa stiti pentru ce tip de "platforma" lucrati

Despre Nintendo DS:
In primul rand Nintendo DS(uneori numit si DS sau NDS) este o consola portabila lansata in 2004! Se poate distinge foarte usor de celelalte console portabile datorita caracteristicilor sale evidente: Cele 2 LCD-uri, unu dintr-e ele luand rolul unui Touch Screen si cele 2 sloturi pentru Diskete(DS si GBA)! As vrea totusi sa dau cateva detalii despre "componentele ascunse" ale sale! Vorbesc despre Microfon, Adaptorul Wireless Integrat( IEEE 802.11 standardizat WI-FI), cele 2 procesoare ARM(9 si 7)! De asemenea dispune de o memorie RAM de 4 Mega si un spatiu de stocare de 256 kb flash memory!
- Cele 2 procesoare au denumirea de Main Core si Sub Core insa doar primul are capacitati de Randare 3D, insa detin 2 enginuri 2D, unu pentru fiecare ecran!
- Hardware-ul suporta Lighting, anti-aliasing, bump-mapping, alpha blending, cel-shading si z-buffering insa este capabil sa redea doar 6144 de vertex-uri sau 2084 de face-uri pe frame!
Sper ca ati inteles acuma pentru ce platforma vom lucra!

Main Tutorial:
Disclaimer: Desi v-oi incerca sa acopar cateva lucruri esentiale despre C, acest tutorial nu v-a fi un tutorial C complet! V-as sugera sa urmariti tutorialele lui Agkelos si a celorlalti! Voi vorbi doar despre strictul necesar pentru NDS Dev! Haideti sa incepem!
Dupa cum stiti este o traditie sa incepi primul tau program intr-un limbaj nou cu Hello World!

Cod:
#include

int main(void)
{


PA_Init();
PA_InitVBL();
PA_InitText(1,2);
PA_OutputSimpleText(1,0,0,"Hello World !");
while(1)
  {
PA_WaitForVBL();
}

return 0;
}
Output:

Sa luam fiecare bucatica de cod in parte:

Cod:
#include

int main(void)
Folosim pentru a include libraria pe care vrem sa o folosim, in cazul nostru PA9.h!
Cod:
int main(void)
{
//code
}
este "corpul" programului nostru!

Cod:
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
PA_OutputSimpleText(1,0,0,"Hello World !");
Folosim PA_Init() si PA_InitVBL() pentru a initializa Enginul!
PA_InitText(1,2) este folosit pentru a semnala utilizarea comenzilor de text pe ecranul unul, folosnd background-ul cu numarul 2! Nu va faceti griji daca nu intelegeti, voi vorbi despre acest lucru putin mai in fata!
PA_OutputSimpleText(1,0,0,"Hello World !") afiseaza text-ul pe ecranul unu la coordonata X = 0 si Y = 0!

Cod:
while(1)
  {
PA_WaitForVBL();
}
Creeam un LOOP Infinit!

Acum ca ati vazut cum arata un codul sursa al unui program in C as vrea sa va vorbesc despre lucrurile esentiale ale acestui limbaj, lucruri pe care le vom folosi in continuare! Asa ca urmatoarea etapa consta in teorie pe paine!
Incepem cu: Variabilele!

##Variabile:##

[offtopic]
Daca sunteti nou veniti in mediul C, ca si mine dealtfel, si inainte ati folosit un limbaj basic Like variabilele ar putea sa va incurce putin deoarece in C ele trebuiesc declarate!
[/offtopic]

Presupun ca stiti deja ce sunt variabilele asa ca nu voi acoperi acest aspect! O sa vorbesc despre cum le putem declara!

Cod:
int X;
Exemplu standard de declarare a unei variabile! Astfel X este o variabila de tip integer! De asemenea putem sa declaram si variabile de tip signed sau unsigned in felu urmator:
Cod:
s16 PozitieX = 5;
s16 PozitieY = 0;
s16 PozitieZ = 27;
unde s = Signed, 16 = numarul de biti! Cu cat numarul de biti este mai mare cu atat numarul folosit este mai mare! Dupa cum stiti procesoarele de DS sunt procesoare pe 32 de biti! Astfel o variabila unsigned pe 32 biti alterneaza intre 0 si 4 294 967 295 iar una signed intre -2 147 483 648 si 2 147 483 647. De asemenea putem sa folosim u in loc de s! Uitati un exemplu de utilizare:

Cod:
#include

s16 PozitieX = 5;
s16 PozitieY = 0;
int main(void)
{
PA_Init();  
PA_InitVBL();
  PA_InitText(1,2);
  PA_OutputSimpleText(1,PozitieX ,PozitieY ,"Hello World !");  
 
while(1)
{

}

return 0;
}
l
Astfel pe ecranul de sus al consolei noastre va aparea textul Hello World in pozitia X = 5 si Y = 0!
Variabilele mai pot fi declarate si astfel:
Cod:
s32 x, y, z, marimex, marimey;
Cam asa sta treaba cu variabilele! Sa trecem mai departe si sa vorbim despre: structuri!

##Structuri:##

Structurile sunt esentiale in orice proiect! Ajuta la organizarea proiectului si il face mai usor de urmarit!
Exemplu de structura:
Cod:
typedef struct
{
s32 x, y, z, marimex, marimey;
}details;
Astfel noi am declarat o structura numita Details! Acum ca stim sa le declaram... ce ar fi sa invatam cum sa le folosim! Simplu! Intai declaram o variabila care foloseste acea structura! Sa zicem ca vrem sa creem o variabila Cub!
Cod:
details cube;
cube.x = 10;
cube.y = 15;
cube.z = 0;
cube.marimex = 200;
cube.marimey = 140;
Astfel am creeat o noua variabile, cube, care al carui type este details! Pare greu? Mie mi se pare ca nu.
Ok acestea au fost structurile! In continuare vom vorbi despre instructiuni de control

##Instructiuni de Control:##

- Instructiunea IF:
Daca ar fi sa analizam logic, instructiunea IF ar fi de genu:
Cod:
Daca Se indeplineste Conditia
         Realizeaza Actiunea
Daca Nu
         Ia alte masuri
In C lucrurile ar sta cam asa:

Cod:
if( Conditie )
   code;
else
  code2;
Conditia poate fi adevarata sau falsa, astfel 1 = True(Adevarat) iar 0 = False(Fals)! Daca. virgula, Conditia ia valoarea 1 atunci se executa blocul 1(code) daca nu atunci se executa blocul 2(code2)! Cam asa sta treaba cu IF-ul! Greu? Neh...

- Instructiunea Switch:

Ganditi-va la switch ca la fratele mai mare a lu' nenea IF! Spune fratele mai mare deoarece switch ne permite mai mult de 2 alternative!
Exemplu de utilizare:
Cod:
switch(expresie)
{
case constanta1:
PrimaInstructiune;
break;
case constanta2
aDouaInstruciune2;
break;
......
default:
InstructiuneDefault;
}
Sper ca v-am lamurit si cum sta treaba cu Switch-ul... Ce mai avem de povestit? Hm... Agh da, sa vorbim si despre LOOP-uri!

- LOOP

In Basic loop-urile erau foarte clare, si in general se foloseau segmentele Do - Loop, For - Next etc!
Exemplu de utilizari a loop-urilor in basic:
Cod:
a = 100
do
a = a + 1
Print "Valoarea lui A: "+str$(a)
loop
Codul adauga lui a valoarea 1 de fiecare data pe loop si afisa pe ecran acest lucru! De asemenea un exemplu For - Next in Basic ar fi urmatorul
Cod:
b = 0

For a = 1 to 2000
b = b + 1
Print "Valoarea lui b este: "+str$(b)
next a
Astfel loop-ul se repeta pana cand a lua valoarea 2000!

- While(Loop)

Exemplu de loop in C folosind While:
Cod:
While(2>1)
{
code;
}
Astfel loop-ul se va tot "invartii" pana cand 2 va fi mai mic sau egal cu unu, sau mai bine zis, va rula la infinit!!

- For(Loop)

Instructiunea For poate fi privita ca o derivatie a instriuctiunii While insa contine 3 Conditii! In termeni logici ar putea fi privita asa:
Cod:
Pentru A egal cu 0, A fiind mai mic sau egal decat 100, se adauga valoarea 1 la valoarea lui A
In C am traduce asa:
Cod:
for(A=0;A < 100;A++)
{
PA_OutputSimpleText(1,0,0,"Hello World");
}
Nota Personala: Instructiunile FOR mi se par foarte atragatoare, iar eu, unul, le folosesc foarte des

Ce ar fi sa reprezentam exemplu de mai sus folosind while? Acesta ar arata cam asa:

Cod:
s32 A;
A = 0;
while(A < 100)
{
    PA_OutputSimpleText(1,0,0,"Hello World");
    A++;
}
- Do -- While

Instructiunea Do - While este asemanatoare cu while doar ca blocul  instructiunii este executat cel putin o data!
In termeni logicii poate fi interpretata in felul urmator:
Cod:
Realizeaza Actiunea, Atata timp cat (conditie)
Un exemplu de folosire ar fi:
Cod:
do
{
   PA_OutputSimpleText(1,0,0,"Hello World");
}while(2>1)
- Break

Uneori este necesar sa iesiti fortat dintr-un loop! Pentru asta puteti folosi comanda Break! Un exemplu de folosire al comenzi este:
Cod:
while(2 > 1)
{
    break;
}
Cam acestia ar fi operatorii Logici!

##Matrici:##
Acum ca am vazut cum sta treaba cu operatorii logici, ce ar fi sa vorbim si despre matrici? Ce sunt matricile?
Imaginativa niste Dulapioare pline de cutii in care pot fi depozitate date...! Dupa modul de declararea ele sunt asemanatoare cu variabilele doar ca au in plus un numar intre "[ ]"!
Exemplu de declarare:
Cod:
s32 Matrice[1000];
Si totusi, la ce le folosim? Le folosim ca sa ne usureze munca... Ia ganditi-va ca am avea o lista de 100 de variabile... O.o va dati seama cat am avea de scris?  Sa luam un exemplu:
Cod:
s32 valoare[100]
s32 a;
for(a = 0; a < 100;a++)
{
valoare[a] = 1
}
In loc sa scriem 100 de randuri pentru 100 de variabile si sa le dam valoarea 1 am scris 6 randuri de cod! Iar ca sa le citim este lafel de simplu...
Cod:
s32 variabila = 0;
variabila = valoare[2];
Ce am facut aici? Am creeat o variabila si i-am atribuit valoarea pe care o ocupa un numar de pe pozitia a 3-ea! Da pozitia a 3-ea deoarece in C totu incepe de la 0, astfel 0 are prima pozitie, 1 o are pe a doua, si 2 pe a trea! Si lista continua!
Oricum va sfatuiesc sa urmariti urmatorul tutorial despre matrici, deoarece acopera mai bine acest aspect!

##Functii de Text:##
Acum ca am lamurit si treburile importante sa ne intoarcem la tutorialul nostru!
La inceputul tutorialului v-am prezentat un cod care afiseaza Hello World pe ecran! Tot acolo am vorbit si despre functia PA_OutputSimpleText care va permite sa afisati un text pe ecran la anumite coordonate! Insa Libraria PAlib cuprinde mai multe functii text pe care as vrea sa le postez! Acestea sunt:
Cod:
- PA_OutputSimpleText()
- PA_BoxText()
- PA_OutputText()
Functia PA_OutputSimpleText are urmatorii parametrii:
- numarul ecranului pe care afisam textul
- pozitia X
- pozitia Y
- Textul care trebuie afisat
pecand Functia PA_BoxText este alcatuita astfel:
- numarul ecranului pe care afisam textul
- coltul din stanga sus al cutiei de pe fundal
- coltul din stanga jos al cutiei de pe fundal
- coltul din dreapta sus al cutiei de pe fundal
- coltul din dreapta jos al cutiei de pe fundal
- Textul care trebuie afisat
- limita de caractere care vor fi afisate!
iar Functia PA_OutputText este organizata astfel:
- numarul ecranului pe care afisam textul
- pozitia X
- pozitia Y
- Textul care trebuie afisat
- argumente!
De asemenea trebuie tinut minte ca, pentru a folosi functile de text este necesar ca dupa initializarea librariei sa initializam Textul! Acest lucru se poate face astfel:
Cod:
PA_Init();
PA_InitVBL();
PA_InitText(1,2);
Dupa cum am mai spus PA_Init() si PA_InitVBL() sunt folosite pentru a initializa libraria PA_InitText(1,2) initializeaza folosirea textului pe ecranul 1 folosind backgroundul 2!
Parametri PA_InitText()
- Ecranul pe care afisam(1 pentru ecranul de sus, 0 pentru ecranul de jos)
- Background-ul folosit(0, 1, 2 sau 3)

Nota Personala Am tot in zis in cateva randuri despre Background-uri insa nu am spus si ce sunt ele! Imi cer scuze pentru asta si promit ca o sa dezbat acest lucru intr-un tutorial viitor!

Daca Simple Text afiseaza pe ecran un string, Advance text permite sa afisam continutul unei variabile sau un sir de caractere! Uitati un exemplu pentru afisarea pe ecran a unei variabile de tip float:
Cod:
float numar=7.349;
PA_OutputText(1,0,0,"Valoarea variabilei numar este:  %f ",numar);
Acelasi lucru este valabil si pentru celelalte variabile! De retinut faptul ca folosim %f pentru Float, %d pentru integer si %s pentru string!

Hey super! Am invatat sa folosim C si PAlib ca sa afisam text pe ecranul consolei noastre favorite! Haideti sa il si coloram! Pentru acest lucru putem sa folosim una din functiile de mai jos:
- PA_SetTextCol
- PA_SetTextTileCol
- %c_
Sa le luam pe fiecare in parte:
PA_SetTextCol Parametrii
- ecranul unde vrem sa folosim acea culoare
- valoare rosu
- valoare verde
- valoare albastru
Atentie! PA_SetTextCol da aceeasi culoare la tot textul, fie ca a fost scris inainte sa folosim functia, sau dupa ea!
Cum setam culorile? Fiecare parametru de culoare are o valoare de la 0 la 31 aceasta constand in faptul ca 0 = intensitate minima, si 31 culoarea la intensitatea maxima! Combinand cele 3 culori putem obtine altele! Exemplu:
Cod:
Albastru: RGB: 0,0,31
Rosu: RGB: 31,0,0
Verde: RGB: 0,31,0
Alb: RGB: 31,31,31
Negru: RGB: 0,0,0
PA_SetTextTileCol Parametrii
- ecranul unde vrem sa coloram tile-ul
- culoarea pentru noul text (valori de la 0 - 9 )
Cifrele pentru culori sunt urmatoarele:
Cod:
0 = alb
1 = rosu
2 = verde
3 = albastru
4 = mov
5 = albastru deschis
6 = galben
7 = gri deschis
8 = gri inchis
9 = negru
Cum putem sa folosim aceasta functiie? Urmariti exemplu' de mai jos
Cod:
PA_SetTextTileCol(1, 4);
PA_OutputSimpleText(1,2,4,"Text Colorat");
Ultima dar nu cea din urma functie este %c_ unde _ tine locul unei Culori! Folosind-o impreuna cu Advance Text putem sa coloram diferit fiecare text pe care il scriem! Cifra culorilor este aceeasi ca la PA_SetTextTileCol
Exemplu de utilizare:
Cod:
PA_OutputText(0, 0, 0, "%c3Text Albastru %c1 Text Rosu %c5E%c2T%c6C");
Cam asta este tot! Nu cred ca pare atat de greu nu? Sincer mie mi se pare mult mai interesant sa prezint o aplicatie scrisa de mine pe ecranul unei console, decat pe cel al unui pc! O sa revin si cu alte tutoriale legate de Nintendo DS HomeBrew!
Memorat

A DS , my kindom for a  DS!

Un Pc De Carcasa Noua Blog
HostGator
Newbie
*
Mesaje: Multe

Reclamă cu aligatori
 

Ai auzit de aligatorul care ofera hosting?
 
   
Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro