Hlavní menu
  Seznam rubrik
  Vyhledávání

Vyhledat text

  Přihlášení
Uživatel

Heslo

Programujeme
Processing – další hra Cihly
cihly_215

Nyní vám přidávám další lekci, opět formou hry. Jedná se o jednu ze skalních her z počátku počítačů. Na ní vám chci připomenout již známé příkazy a doplnit nové. Navíc je tato hra předána opravdu v hrubé podobě bez zvuků a jakéhokoli spoštění. Prostě program nahrajete, spustíte a můžete si hrát. Předpokládám, že si hru vylepšíte sami, doplníte skore atd. Příště se snad přiblížíme k dalším možnostem jak hru ovládat a doplnit. Tato hra má jen 150 řádků včetně komentářů,tak že s chutí do toho.

Nejprve však přiblížení toho co bychom si měli zapamatovat:

vice_120



// komentář programu - určitě jej hojně využívejte, aby jste si zajistili přehled i po nějakém čase

/* blokový komentář začátek

tyto řádky budou programem nezpracovány – lze s výhodou použít i pro dočasné vynechání části programu

*/ blokový komentář konec

int x=0; //definice proměnné integer – celé číslo běžně může dosahovat hodnoty +/- 32767

// s nastavením počáteční hodnoty

boolean mx=false; // definice logické proměnné která má poze dvě hodnoty pravda = true

// nepravda = false

int pozice_X[]=new int[40]; /* definice proměnné typu pole s velikostí 40 prvků

přístup k jednotlivým prvkům je pak pomocí indexu v hranaté závorce viz příklad pozice_X[0] = 15;

nebo a = pozice_X[1]; */

void setup() //--- Funkce pro nastavení programu čte se pouze jednou při startu programu

void draw() //--- Hlavní tělo programu - Opakuje se stále až do ukončení programu

size (rozsah_x,rozsah_y); // velikost obrazu ve které se zadává velikost v ose x , velikost v ose y

frameRate (100); //počet překreslení obrazovek za jednu sekundu

background (255,255,255); // barva pozadí obrazu hodnota 0-255 pro barvu(červená,zelená,modrá)

fill (30,10,307); //barva objektu hodnota 0-255 pro barvu(červená,zelená,modrá)

stroke (0,0,0); //okraj objektu hodnota 0-255 pro barvu(červená,zelená,modrá)

ellipse (x,y,30,30); //vykreslení kruhu(elipsy)-pozice x,y,velikost x,velikost y

rect (X,Y,50,25); // vykreslení obdélníku (čtverce)-pozice x,y,velikost x,velikost y

if (podmínka) jeden příkaz; //když je podmínka platná vykoná příkaz

else jedn příkaz; // když podmínka není platná vykoná příkaz za else

{

neco( ); // pro názvy proměnných a funkcí nepoužívejte českou diakritiku !

neco_jineho( );

} //{ } potřebujeme li zpracovat více příkazů , pak je uzavřeme do těchto závorek

// potřebujeme li volit mezi více hodnotami lze s výhodou použít takzvaný přepínač

switch (my) //přepínač pohybu míčku ve svislé ose výběr z hodnoty 0 až 4

{

case 0:

y=y;

break;

case 1:

y=y+1;

break;

case 2:

y=y-1;

break;

case 3:

y=y+2;

break;

case 4:

y=y-2;

break;

}

// pro vnoření příkazů dodržujte formát viz funkce něco z důvodu přehlednosti programu

void neco() // název funkce něco bez předání vstupních nebo výstupních parametrů(hodnot)

{

if(odraz >= y)

{

if((x>(mouseX-40)) & (x<mouseX+40))

{

my=true; // změna směru koule při kontaktu koule

modpal=true; //nastavení paměti při kontaktu koule

}

}

}

Nakonec ještě funkce výstupu

print(1+1); // výstup do konzole programu to je to černé okno pod editačním oknem

println("TENIS "); // výstup do konzole programu s odřádkováním

textSize(40); // velikost textu na grafické obrazovce pro barvu se použije opět příkaz fill...

text("TENIS ",200,100); //výstup na grafickou obrazovku („text“, pozice X, pozice Y)

Nyní konečně slíbená hra:

/**********************************

*********** Bourání cihlel ************

* příklad řešení pro výuku programování *

* KRA Písek *

***********************************/

//- definice proměnných

int pozice_X[]=new int[40]; //souřadnice cihly v ose X

int pozice_Y[]=new int[40]; //souřadnice cihly v ose Y

boolean cihla[]=new boolean[40]; // stav cihly

int x=0; //pozice koule v ose X

int y=130; //pozice koule v ose Y

int zx=0; //pozice cihly při stavění v ose X

int zy=0; //pozice cihly při stavění v ose Y

int i=0; // indexová proměná vybírá konkrétní cihlu

int odraz=350; // pozice odrazu v ose Y

boolean mx=false; // paměť pohyby koule v ose X

boolean my=false; // paměť pohyby koule v ose Y

boolean modpal=false; // pamet dotyku s odrazkou

boolean novaz=true; // nová zeď - paměť

int rozsah_x=350; //rozměr v ose X

int rozsah_y=350; //rozměr v ose Y

//---SETUP---

void setup()

{

size(rozsah_x,rozsah_y);

frameRate(100); //počet překreslení obrazovek

odraz=rozsah_y-75;

}

//--- Hlavní tělo programu -----

void draw()

{

background(255,255,255);

if (novaz)nova_zed(); //zavolá funkci postavení nové zdi

else zed(); // pak už pokračuje funkcí stavu zdi

pohyb_x(); //funkce řeší pohyb koule v ose X

pohyb_y(); //funkce řeší pohyb koule v ose Y

fill(30,10,307); //barva koule

ellipse(x,y,30,30); //vykreslení koule

odpal(); //funkce kontroluje dotek koule z odpalem

fill(10,307,30); //barva odpalu

stroke(0,0,0); //okraj odpalu

rect(mouseX-40,odraz,80,15); //vykreslení odpalu

}

// ********** FUNKCE **************

//--funkce řeší kontakt cyhly s koulí případně ji přebarví

void zed()

{

stroke(255,255,255); //okraj cihly

for (i=0;i<40;i++) //Vyber cihel

{

if (modpal) //paměť - byl dotek s odpalem

{

if ((x>=pozice_X[i]) & (x<=(pozice_X[i]+50)))

{

if ((y>=pozice_Y[i]) & (y<=(pozice_Y[i]+25)))

{

if (cihla[i])

{

modpal=false; //zrušení - dotek s odpalem

cihla[i]=false; // paměť-vybourání cihly

}

}

}

}

if(cihla[i]) fill(193,10,10); //barva cihla

else fill(255,255,255); //barva - není cihla

rect(pozice_X[i],pozice_Y[i],50,25); // vykreslení cihly

}

}

// ---postavi novou zed -----

void nova_zed()

{

stroke(255,255,255); //okraj cihly

fill(193,10,10); //barva cihly

for (zy=1;zy<5;zy=zy+1) //Sloupec cihel

{

for (zx=0;zx<(rozsah_x+25);zx=zx+50) //Řada cihel

{

if (zy==1||zy==3) //1. a 3. řada cihel

{

rect(zx,zy*25,50,25);

pozice_X[i]=zx;

pozice_Y[i]=zy*25;

}

else //posun cihel 2. a 4. řady

{

rect(zx-25,zy*25,50,25);

pozice_X[i]=zx-25;

pozice_Y[i]=zy*25;

}

cihla[i]=true; // nastavení paměti - je cihla

i++;

}

}

novaz=false; //vymazání paměti nové zdi

}

//---pohyb koule v ose X----

void pohyb_x()

{

if(x>=(rozsah_x-15))mx=true; //změna směru koule v ose X

if(mx==false)x=x+3; //posun koule v ose X

if(mx==true)x=x-3; //posun koule v ose X

if(x<=15)mx=false; //změna směru koule v ose X

}

//---pohyb koule v ose Y---

void pohyb_y()

{

if(y>=(rozsah_y-15)) //změna směru koule v ose Y

{

my=true;

modpal=false; //dotek koule dole - smazání paměti odpalu

}

if(my==false)y=y+3; //posun koule v ose Y

if(my==true)y=y-3; //posun koule v ose Y

if(y<=15)my=false; //změna směru koule v ose Y

}

//---dotek z odrazovou plochou----

void odpal()

{

if(odraz >= (y) & (odraz <=(y+15)))

{

if((x>(mouseX-40)) & (x<mouseX+40))

{

my=true; // změna směru koule při kontaktu koule

modpal=true; //nastavení paměti při kontaktu koule

}

}

}

//-----Konec programu --------


| Autor: Tonda Seiner | Vydáno dne 09. 02. 2014 | 10761 přečtení |
| Počet komentářů: 57 | Přidat komentář |
| Informační e-mail | Vytisknout článek |


Tento web site byl vytvořen prostřednictvím phpRS - redakčního systému napsaného v PHP jazyce.
Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami nebo registrovanými ochrannými známkami příslušných vlastníků.

Web site powered by phpRS PHP Scripting Language MySQL Apache Web Server