Přejít na obsah
  • Vytvořit účet

Programy v Cčku |7|


kgsws

Recommended Posts

24. 1 --------------

Instalace z částí:

http://xorloser.com/PSPDevWin32.zip

rozbalte, instalovat na disk C (jinde muj update nepojede dobře)

vysledna složka by měla byt C:/pspdev

niní stahněte muj plus pack

http://zdoom.ic.cz/pspdev-kg.rar

a rozbalte ho přesně do složky PSPDEV, pokud udělate něco špatně nepujde to :lol:

spusťte run.bat, tim se pusti přikazovej řadek z přidavnym nastavenim pro PSP složky ... (a zobrazi se little help)

Doporučuju po přečtení jedné "lekce" tutoriálu něco vyskoušet (upravit) a pak teprve pokračovat z další

Začneme prvním tutoriálem ...

pro vstup do složky napsat "CD HelloWorld" a potom pro převedení do EBOOT.PBP napsat "MAKE"

Vysvětlení:

na začátku sou knihovny pro určitý funkce

// za tyto znamynka se pišou kometnaře
/* nebo za tohle
a plati to dokud se to neoběvi znova
(obraceně) */
#include <pspkernel.h>  //to se nevyužije
#include <pspdebug.h> //pro psaní textů
#include <pspdisplay.h> //žeby display?
#include <pspctrl.h> //klavesy, 4 lekce
#include <stdio.h> //nějaky ty funkce pro text
#include <stdlib.h>//to samy

následuje identifikace programu, místo "HeWo" může být jakejkoliv text

PSP_MODULE_INFO("HeWo", 0, 1, 1);

define, zkrácení, místo pspDebugScreenPrintf budeme psát printf

#define printf pspDebugScreenPrintf

Exit Callback, určí co se má stát když po zmáčknutí HOME se odpoví YES

int exit_callback(int arg1, int arg2, void *common) {
         sceKernelExitGame(); // Tohle se stane po "YES" teď to znamená konec.
         return 0;
}

int CallbackThread(SceSize args, void *argp) {
         int cbid;

         cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
         sceKernelRegisterExitCallback(cbid);

         sceKernelSleepThreadCB();

         return 0;
}

int SetupCallbacks(void) {
         int thid = 0;

         thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
         if(thid >= 0) {
                   sceKernelStartThread(thid, 0, 0);
         }

         return thid;
}

funkce MAIN která už obsahuje náš program

int main() {
SetupCallbacks(); //nastaveni ExitCallbacku
pspDebugScreenInit(); //zapnuti textu
printf("Hello World?\nNo ja myslim ze jo\n"); //tohle napíše, "\n" je skok na další řádek, když něco začíná znakem \ bere se to jako speciální znak, proto pokud chcem vypsat tenhle znak, musí se zapsat 2x zasebe.
sceKernelSleepThread(); //čeká ... jedině na konec hry ...
return 0; // navratova hodnota, niní se nebude řešit
}

lehký ne? no testnite to na PSP

Druhej tutoriál ... Vylepšený HelloWorld ... (ve složce HelloWorld-Barvy)

Vysvětlím jen nový funkce.

Celá tato část vytvoří barevnou, nadpisovou linku, uvidíte v PSP

printf(" ");
color(0x00FFFF); //změní barvu textu, HEX číslo naopak - po dvou (Modrá)(Zelená)(Červená)
backcolor(0xFF0000); //změní barvu pozadí
printf("                          Barevny HelloWorld                      ");
color(0xFFFFFF);
backcolor(0x000000);
printf("\n");

Ještě jedna nová věc (dvě?)

sceKernelDelayThread(1000*1000); //čekání v mikrosekundách (celkem 1 sekunda)
gotoXY(20,5) //přesun kurzoru na tuhle souřadnici, nasledujici psani bude od tam

Toť vše, jednoduchý? No já myslim že jo.

3ti tutoriál (ve složce promeny)

Práce z proměnýma, podmínkama a cyklama, dost důležitá věc.

Do proměné můžeme uložit hodnotu (číslo, text) podle typu, niní bude proměná typu INT (což je číslo)

int cislo; //vytvoříme novou proměnou, ze začátku má hodnotu 0

Cyklus + podmínka

while(cislo!=14) { //začátek cyklu, to co je mezi { a } se bude opakovat dokud platí to v závorce (cislo se nerovná 14)
cislo++; //niní se k číslu přičte 1 (důležitý, kdyby se nepřičítalo, číslo by nikdy nebylo 14 a cyklus by jel pořád a nešel by vypnout)
if(cislo==5) color(0x0000FF); else color(0xFFFFFF); //podmínka, pokud se cislo rovna 5 tak se splní první příkaz, pokud ne splní se druhej
printf("Ted je cislo: %d\n",cislo); //vypíše text, %d bude nahrazeno obsahem proměné číslo
} //to co nasleduje dál se už nebode opakovat

Výsledek? to je snad jednoduchý ... testujte

Pozor, nepleťte si cislo=1 a cislo==1 !

cislo=1 nastaví proměnou na číslo 1

cislo==1 otestuje jestly se rovná 1

4 tutorial, tlačítka ...

na to je speciální proměná nemá smysl ji rozebirat

SceCtrlData pad;

Upravíme co se stane po odpovězení na "YES" protože ukončení hry v cyklu může dělat problémy

int exit_callback(int arg1, int arg2, void *common) {
         konec=1; //proč 1? sledujte cyklus while(konec==0) (dokud se konec rovna 0) po odpovězeni "YES" se konec=1 a cyklus se ukončí
         return 0;
}

cyklus, podmínky známe (pouze se mění obsah podmínky)

while(konec==0) { //opakuje se dokud číslo v proměné konec nebude jiný než 0
sceCtrlReadBufferPositive(&pad, 1); //zjištění stavu kláves
gotoXY(0,3);
if(pad.Buttons & PSP_CTRL_CROSS)    printf("Krizek      : ON \n"); else printf("Krizek      : OFF\n");
if(pad.Buttons & PSP_CTRL_CIRCLE)   printf("Kolecko     : ON \n"); else printf("Kolecko     : OFF\n");
if(pad.Buttons & PSP_CTRL_SQUARE)   printf("Ctverec     : ON \n"); else printf("Ctverec     : OFF\n");
if(pad.Buttons & PSP_CTRL_TRIANGLE) printf("Trojuhelnik : ON \n"); else printf("Trojuhelnik : OFF\n");
if(pad.Buttons & PSP_CTRL_UP)       printf("Nahoru      : ON \n"); else printf("Nahoru      : OFF\n");
if(pad.Buttons & PSP_CTRL_DOWN)     printf("Dolu        : ON \n"); else printf("Dolu        : OFF\n");
if(pad.Buttons & PSP_CTRL_LEFT)     printf("Doleva      : ON \n"); else printf("Doleva      : OFF\n");
if(pad.Buttons & PSP_CTRL_RIGHT)    printf("Doprava     : ON \n"); else printf("Doprava     : OFF\n");
if(pad.Buttons & PSP_CTRL_LTRIGGER) printf("L           : ON \n"); else printf("L           : OFF\n");
if(pad.Buttons & PSP_CTRL_RTRIGGER) printf("R           : ON \n"); else printf("R           : OFF\n");
if(pad.Buttons & PSP_CTRL_START)    printf("START       : ON \n"); else printf("START       : OFF\n");
if(pad.Buttons & PSP_CTRL_SELECT)   printf("SELECT      : ON \n"); else printf("SELECT      : OFF\n");
sceKernelDelayThread(100*1000);
}

25. 1 --------------

Balíček http://zdoom.ic.cz/pspdev-kg-5-6.rar rozbalte přímo do složky C:\pspdev\zdrojaky

2D grafika ... (ve složce 2Dgraf)

nový funkce

pro vložení pixelu z určitou barvou na souřadnici x,y

void putpixel(int x,int y,int barva)
{
   if(x<0||x>479||y<0||y>271) //omezi psani pixelu mimo display
   {
     return; //je mimo, návrat bez vložení pixelu
   }
   u32 *address=VRAM+((((512)*1)*y)+x); //pracuje se z video pamětí
   *address=barva;
}

čára z jednoho bodu (x0,y0) do druhýho (x1,y1) z barvou

void line(int x0,int y0,int x1,int y1,int barva) //nemá cenu rozebírat
{
  int dy = y1 - y0;
  int dx = x1 - x0;
  float t = (float) 0.5;
  putpixel(x0,y0,barva);
  if( dy == 0 && dx == 0 ) return;
  if (abs(dx) > abs(dy)) // slope < 1
  {
     float m = (float) dy / (float) dx;
     t += y0;
     dx = (dx < 0) ? -1 : 1;
     m *= dx;
     while (x0 != x1)
     {
        x0 += dx;
        t += m;
        putpixel(x0,(int)t,barva);
     }
  }
  else
  {
     float m = (float) dx / (float) dy;
     t += x0;
     dy = (dy < 0) ? -1 : 1;
     m *= dy;
     while (y0 != y1)
     {
        y0 += dy;
        t += m;
        putpixel((int)t,y0,barva);
     }
  }
}

kruh ze středem v bodě x,y z poloměrem a z barvou

void circle(int xcenter,int ycenter,int radius,int barva) //nema cenu rozebirat
{
   int x=0;
   int y=radius;
   int p=3 - 2 * radius;
   while(x <= y)
   {
       putpixel(xcenter+x,ycenter+y,barva);
       putpixel(xcenter-x,ycenter+y,barva);
       putpixel(xcenter+x,ycenter-y,barva);
       putpixel(xcenter-x,ycenter-y,barva);
       putpixel(xcenter+y,ycenter+x,barva);
       putpixel(xcenter-y,ycenter+x,barva);
       putpixel(xcenter+y,ycenter-x,barva);
       putpixel(xcenter-y,ycenter-x,barva);
       if(p < 0)
           p += 4 * x++ + 6;
       else
           p += 4 * (x++ - y--) + 10;
   }
}

výslednej obrázek pomocí funkcí

line(0,0,479,271,0x00FFFF); //z levýho horního rohu do pravýho spodního
line(0,271,479,0,0x00FFFF); //z levýho spodního rohu do pravýho horního
circle(239,135,50,0xFFFF00); //kruh ve středu displaye o průměru 50 pixelů
putpixel(239,135,0x00FF00); //pixel ve středu kruhu (je tam ale je hůř vidět)

Zobrazení grafu funkce ... (ve složce grafgen)

Vytvoří čtvercovou síť v pozadí. jak? kdo nechápe, návrat do "lekce" 3!

//vertikální čáry
while(x!=48) {
x++;
line(x*10-1,0,x*10-1,271,0x002200);
}
//horizontální čáry
while(y!=27) {
y++;
line(0,y*10-4,480,y*10-4,0x002200);
}

cyklus pro počítání ke každýmu X jedno Y

while(x!=480) {
x++;
xx=x-239; //uprava, aby to začlo od -238 na prvním sloupci displaye
y=(xx*xx*xx)/5000; //jednoduchá funkce X na třetí (a dělení pro lepší zobrazení)
putpixel(x,271-(y+135),0x00FF00);
}

28.1 --------------

Přehrávání zvuku wav, hodí se pro kratky zvukovy efekty (do menu, her)

http://zdoom.ic.cz/pspdev-kg-7.rar

rozbalte přímo do složky C:\pspdev\

7 "lekce" ve složce "wav"

pokud by vám tato lekce nešla zkompilovat (bezezměn) tak to neni vaše chyba ale moje, napište na fórum kdyžtak.

přibila nová knihovna knihovna

#include "../wav-knihovny/wavloader.h" //umožní používat wav funkce

nový typ proměné

char soubor[256]; // text o velikosti MAX 255 znaků (ano 255 NE 256!)

kód z vysvětlením

sprintf(soubor,"wav.wav"); // napíše text ale do textové proměné soubor (info: dá se použít %d z lekce 3)
WAV_Init(); //inicializace zvuku
printf("nacitani zvuku ...\n");
WAV* zvuk1 = WAV_Load(soubor); //načte data zvuku ze souboru do proměné typu WAV (* znamená ukazatel, nemá cenu zatím rozebírat)
sceKernelDelayThread(1000*1000);
printf("Prehravani ...\n");
WAV_Play(zvuk1); //pustí zvukový data z proměné zvuk1
sceKernelDelayThread(3000*1000);
printf("Ukoncovani ...\n");
WAV_Unload(zvuk1); //uvolní data zvuku z RAM, po tomhle nezle znova přehrát (neměl by, netestoval sem)
WAV_End(); //vypne zvuk

možná ste si všimli že tam vůbec neni exit callback ...

ano, zde není potřeba, program se ukončí sám ...

když zmáčknete HOME, nezobrazí se nabídka ...

v této lekci se aji změnilo makefile pro zkompilování wavloaderu

Dál:

1) Práce ze soubory (vytvoření, čtení, kopírování)

- 3D grafika (to jen možná ... celkem složitý, bojím se že z toho moc lidí nic neudělá)

Někomu asi došlo že sem se nezmínil o MAKEFILE, ten soubor pro tutoriály zatím zůstáva stejnej, jeho obsah nemusíte chápat, stačí ho mít na disku, ale můžete v něm změnit méno programu

PSP_EBOOT_TITLE = Sem nazev

Odkaz ke komentáři
Sdílet na ostatní stránky

  • Odpovědi 67
  • Vytvořeno
  • Poslední odpověď

Nejvíc přispívající

Nejvíce příspěvků v jednom dni

Nejvíc přispívající

parada, ted se nejak roztrhl pytel s tutorialama pro programovani na psp... je super, ze uz vim alespon jak zacit

o vikendu si urcite neco vyzkousim asi spis beznou homebrew, nez lua...

v te souvislosti me napada... kgsws, mohl bys pls jeste vypsat typy promennych a zpusob dekladace... predpokladam, ze to budou bezne typy, jako integer, float, char, atd, ale spis by me zajimalo jak se to zapisuje... v C jsem jeste nikdy neprogramoval, predem dekuju :)

to kgsws: good work, dikec...

to Myschoo: kdyz uz jsem u toho dekovani :) ...diky za tutorial pro lua script :D

Odkaz ke komentáři
Sdílet na ostatní stránky

super hned zitra se do toho pustim, hele mohl by jsi sem hodit nejaky zdrojak na easy flasher, treba ten na top_menu.rco? diky :)

to ne, v kopírování sem dám ale jak zapisovat do flash ne (bezpečnostní důvody, kolik by asi vzniklo brickerů) ale zkušenější na to "příjdou"

Odkaz ke komentáři
Sdílet na ostatní stránky

to kgsws: pls mam na tebe dotaz, dneska jsem si to tak nejak zkousel a hned pri prvnim pokusu vytvorit eboot.pbp dojde k nejaky chybe... samotnyho zdrojaku jsem se ani nedotkl, takze me napada, ze to muze byt jedine tim makefileem...

Kazdopadne ty jsi kuchar:) tohohle kompilatoru, tak doufam, ze bys mi s tim pomohl...

tiipxk2.jpg

btw: kam se potom ulozi ten eboot? do slozky s programem ci kam??

predem dikec :)

Odkaz ke komentáři
Sdílet na ostatní stránky

uz viem kde je chyba... tam nemas napisat main.c ale iba:

cd helloworld

hodi ta to vyssie do zlozky a napis:

make

musi to ist, aspon mne to ide

edit:

Moje prve pokusy...texty

snap0010.jpg

Zle poradie vo farbach HEX, zle riadkovanie...

snap0011.jpg

Po optimalizacii :D

to je jedno, to main.e jsem jen tak zkosel prohlidnout zdrojak...

stejne by se to melo zkompilovat, ale jestli to jede tobe, tak to mam zase 1 dalsi problem :(

myslis, ze by to mohlo byt tim, ze na svazku C nemam widle?

Odkaz ke komentáři
Sdílet na ostatní stránky

[]to kgsws: pls mam na tebe dotaz, dneska jsem si to tak nejak zkousel a hned pri prvnim pokusu vytvorit eboot.pbp dojde k nejaky chybe... samotnyho zdrojaku jsem se ani nedotkl, takze me napada, ze to muze byt jedine tim makefileem...

Kazdopadne ty jsi kuchar:) tohohle kompilatoru, tak doufam, ze bys mi s tim pomohl...

tiipxk2.jpg

btw: kam se potom ulozi ten eboot? do slozky s programem ci kam??

predem dikec :)

to je jasný, chyba je v tom "MAKE Version 5.2" <- to neni make.exe z mýho packu, asi máš nainstalovaný ještě jiný Cčko v PC a ono se spustí make.exe z té verze, ne z té pro PSP ...

skus otevřít RUN.BAT, tam najdi řádek

set path=%path%;C:\pspdev\bin

a ten řádek nahraď (smazat starý a zkopírovat tam nový)

set path=C:\pspdev\bin;%path%

možná by to mohlo pomoct, ale nevím

Odkaz ke komentáři
Sdílet na ostatní stránky

[]to kgsws: pls mam na tebe dotaz, dneska jsem si to tak nejak zkousel a hned pri prvnim pokusu vytvorit eboot.pbp dojde k nejaky chybe... samotnyho zdrojaku jsem se ani nedotkl, takze me napada, ze to muze byt jedine tim makefileem...

Kazdopadne ty jsi kuchar:) tohohle kompilatoru, tak doufam, ze bys mi s tim pomohl...

tiipxk2.jpg

btw: kam se potom ulozi ten eboot? do slozky s programem ci kam??

predem dikec :)

to je jasný, chyba je v tom "MAKE Version 5.2" <- to neni make.exe z mýho packu, asi máš nainstalovaný ještě jiný Cčko v PC a ono se spustí make.exe z té verze, ne z té pro PSP ...

skus otevřít RUN.BAT, tam najdi řádek

set path=%path%;C:\pspdev\bin

a ten řádek nahraď (smazat starý a zkopírovat tam nový)

set path=C:\pspdev\bin;%path%

možná by to mohlo pomoct, ale nevím

presne tak... delphi jedno proradny mi to kazilo :lol:

dik moc uz mi to chodi :)

Odkaz ke komentáři
Sdílet na ostatní stránky

aj ti tie znaky padaju? :P

no jak se to veme... je to jen vypisovani 3 ruznych retezcu, ktery se postupne prepisujou a celou obrazovku prepisou asi 4x a pak se objevi ta hlaska...

...ve skutecnosti to nevypada jako metrix code :oops: , ale moc jsem se s tim neparal... je to jenom pokusna aplikace, ktera muze poslouzit jenom pro dve veci a my vime jaky na nic a na hov..... :D

Odkaz ke komentáři
Sdílet na ostatní stránky

Návštěvník
Toto téma je nyní uzavřeno, a proto není možné odpovídat.

×
×
  • Vytvořit...

Důležitá informace

Tento web používá k poskytování služeb a k analýze návštěvnosti soubory cookies. Více informací naleznete v Zásady ochrany osobních údajů a Pravidla webu