Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Articole » Programare » [C/Nintendo DS] Introducere in PALib

Articol:
[C/Nintendo DS] Introducere in PALib
Autor: BacioiuC, postat pe 26 Apr 2009 11:55:27
Versiune printabilã
--- Introducerea folosita la momentul scrieri articolului August 03 2008 ---
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 acestea fiind 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(si libnds)
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! 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 sursă:
#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 sursă:
#include 

int main(void)

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

este "corpul" programului nostru!

Cod sursă:
    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 sursă:
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 sursă:
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 sursă:
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 sursă:
#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 sursă:
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 sursă:
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 sursă:
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 sursă:
Daca Se indeplineste Conditia
         Realizeaza Actiunea
Daca Nu
         Ia alte masuri

In C lucrurile ar sta cam asa:

Cod sursă:
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 sursă:
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 sursă:
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 sursă:
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 sursă:
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 sursă:
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 sursă:
for(A=0;A  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 sursă:
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 sursă:
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 sursă:
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 sursă:
- 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 sursă:
    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 sursă:
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 sursă:
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 sursă:
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 sursă:
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 sursă:
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!

-------------------------------End of Article---------------------------------------
Este un tutorial mai vechi, scris de mine pentru un forum de programare si "securitate" Rolling Eyes. Stiu ca nu se compara cu alta tutoriale deja existente, si ca libraria este foarte simpla de folosit, dar poate este vreun incepator pe acolo care are nevoie de o mica indrumare. Eu cel putin m-am distrat copios lucrand la aplicati pentru DS-ul meu.
Edit: Vai ce de greseli de ortografie si punctuatie pe mine Embarassed . Edit, edit edit!

Comentarii pentru acest articol:



Pagina 1 din 1 [ 1 ]

Mesaj Info autor
    Postat la 27 Apr 2009 09:15:44    Subiect: < fara subiect >
Black_Knight info:

Black_Knight:

un articol foarte interesant!
felicitari
nu stiu cand o sa pot pune in practica ce scrie in acest articol, dar oricum sigur cineva o sa aiba nevoie de asa ceva. mai ales ca asemenea tutoriale nu se prea gasesc nici pe internet in general!
inca odata felicitari


Status:
Înregistrat pe:
07 May 2007 19:49:43
Vârsta: 29 ani
Mesaje: 711
Locatie: Bucuresti
Programator

 
    Postat la 07 Oct 2009 18:54:41    Subiect: < fara subiect >
pro info:

pro:

Foarte folositor articolul !
Felicitari !



Status:
Înregistrat pe:
01 Mar 2009 21:05:57
Vârsta: 19 ani
Mesaje: 1
Locatie: Bucuresti


 
    Postat la 07 Oct 2009 19:21:45    Subiect: < fara subiect >
Rimio info:

Rimio:

Articolul este mult prea simplist. Daca cititorul nu stie ce face IF in mod sigur nu trebuie sa inceapa sa programeze pe DS. Scuze daca nu impartasesc parerea colegilor de mai sus, dar, cu tot respectul, nu merita citit.

LE: La naiba, inca un thread rascolit Smile. Mai bine statea mort, acolo.

Ultima editare efectuată de Rimio pe 07 Oct 2009 19:22:55; 1 editări în total

If at first you don't succeed, you fail.



Status:
Înregistrat pe:
24 Mar 2007 21:50:44
Vârsta: 23 ani
Mesaje: 794
Locatie: Pitesti, Arges
Programator

 
    Postat la 08 Oct 2009 19:29:34    Subiect: < fara subiect >
BacioiuC info:

BacioiuC:

Stai linistit Rimio, iti apreciez punctul de vedere.


Status:
Înregistrat pe:
14 Mar 2009 23:58:07
Vârsta: 20 ani
Mesaje: 89
Locatie: Bucuresti
Game designer
Freelancer
 

Pagina 1 din 1 [ 1 ]


Server time: 16:08:37 10.02.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2011 Copyright 7thFACTOR Entertainment - All rights reserved