Hlavní menu
  Seznam rubrik
  Vyhledávání

Vyhledat text

  Přihlášení
Uživatel

Heslo

Programujeme
Processing – vytváříme jednoduchou hru - Tenis
tenis_250

Seznámíme se se základními grafickými prvky jako je obdélník a čtverec a pomocí několika podmínek a funkcí vytvoříme jednoduchou hru, aby mělo naše učení i nějaký výsledek. Program je záměrně napsán velice jednoduše, aby i kluci z kroužku pochopily základy, vždyť někteří chodí teprve do třetí třídy ZŠ.



vice_120



Zde máme jednoduchý příklad pohybu míčku po hřišti. V tomto případě se míček odráží od

mantinelů a svislý pohyb ovládáme myší , jedná se pouze o základní ukázku.

int i=0;

int m=0;

void setup(){

size(480,280);

}

void draw(){

background(255,255,255); //barva hriste

//micek

fill(237,10,30); //barva mice

ellipse(i,mouseY,30,30);

//sit

fill(10,237,30); //barva site

rect(width/2,0,5,280);

// Pohyb mice

if (i>=(width-15))m=1;

if (m==0)i++;

if (m==1)i--;

if (i<=15)m=0;

}

Nyní přikládám funkční program včetně komentářů, předpokládám že bude vše jasné.

/***************************** PROGRAM TENIS ************************/

// Ukazkový program TENIS

import ddf.minim.*;

Minim minim;

AudioSample kick;

AudioSample snare;

int x=50; //vodorovná osa pohybu míče

int y=50; //svislá osa pohybu míče

int ny=0;

int mx=0; //paměť pohybu míče ve vodorovné ose

int my=0; //paměť pohybu míče ve svislé osa

float p=0; //pozice pálky počítače

int score_l=0; // skore počítače

int score_p=0; // moje skore

boolean hra= false; //paměť běhu hry

boolean Game=false; //paměť ukončení hry při dosažení skore

void setup()

{

size(500,300);

frameRate(100);

y=100;

minim = new Minim(this);

// load BD.wav from the data folder

kick = minim.loadSample( "BD.mp3",512);

if ( kick == null ) println("Nelze otevřít kick!");

// load SD.wav from the data folder

snare = minim.loadSample("SD.wav", 512);

if ( snare == null ) println("Nelze otevřít snare!");

}

void draw(){

//pozadí hřiště

background(255,255,255);

// síť

fill(10,237,30);

rect(width/2,0,5,400);

//tenisák

fill(245,198,44);

ellipse(x,y,30,30);

// moje pálka

fill(10,30,237);

rect(475,mouseY,5,50);

//pohyb pálky počítače

if (y>p)p=p+0.8;

else p=p-0.8;

// pálka počítače

fill(237,10,30);

rect(20,p,5,50);

//zobrazení skore

textSize(40);

text(score_l+":"+ score_p,223,35);

if (hra)

{

Leva_p(); //volání funkce vyhodnocení kontaktu míčku s pálkou počítače

Prava_p(); //volání funkce vyhodnocení kontaktu míčku s mojí pálkou

// vyhodnocení dosažení pravéhu mantinelu

if (x>=495)

{

mx=1;

score_l++;

snare.trigger(); //zvuk

}

//pohyb míčku vpravo

if (mx==0)x=x+5;

//pohyb míčku vlevo

if (mx==1)x=x-5;

// vyhodnocení dosažení levého mantinelu

if (x<=5)

{

mx=0;

score_p++;

snare.trigger(); //zvuk

}

switch (my) //přepínač pohybu míčku ve svislé ose

{

case 0:

y=y;

break;

case 1:

y=y+1;

break;

case 2:

y=y-1;

break;

}

//odraz od spodního okraje hřiště

if (y>=285)my=2;

//odraz od horního okraje hřiště

if (y<=15)my=1;

//výpis skore na obrazovku

if (score_l==9 |score_p==9) // Konec hry

{

Game=true;

hra=false;

}

}

else

{

if (Game==false) //Zobrazí informace po zapnutí nebo ručním ukončení

{

fill(37,68,216);

textSize(40);

text("TENIS ",200,100);

fill(216,148,37);

textSize(25);

text("Start klávesou s nebo S ",100,200);

text("Konec klávesou k nebo K ",100,250);

}

else // Výpis při dosažení skore

{

fill(37,68,216);

textSize(40);

text("KONEC HRY ",150,100);

}

}

}

void keyPressed() // test stisknutí klávesnice

{

if ( key == 's' | key == 'S' ) //start hry

{

hra=true;

Game=false;

score_l=0;

score_p=0;

}

if ( key == 'k' | key == 'K' ) hra=false; //konec hry

}

void Leva_p() //pálka počítače

{

if ((x<=40) & (x>=20))

{

if ((y<=p+33) & (y>=(p+17)))

{ //rovne

mx=0; //paměť pohybu míče ve vodorovné ose

my=0; //paměť pohybu míče ve svislé ose

kick.trigger(); //zvuk pálky

}

if ((y>=p) & (y<(p+17)))

{ // nahoru

mx=0;

my=2;

kick.trigger(); //zvuk pálky

}

if ((y>p+33) & (y<=(p+50)))

{ // dolu

mx=0;

my=1;

kick.trigger(); //zvuk pálky

}

}

}

void Prava_p() //moje pálka

{

if ((x>=460) & (x<=480))

{

if ((y<=mouseY+33) & (y>=(mouseY+17)))

{ // rovne

mx=1; //paměť pohybu míče ve vodorovné ose

my=0; //paměť pohybu míče ve svislé ose

kick.trigger(); //zvuk pálky

}

if ((y>=mouseY) & (y<(mouseY+17)))

{ // nahoru

mx=1;

my=2;

kick.trigger(); //zvuk pálky

}

if ((y>=mouseY+33) & (y<=(mouseY+50)))

{ // dolu

mx=1;

my=1;

kick.trigger(); //zvuk pálky

}

}

}

Záměrně nechávám program opsat případně zkopírovat , aby jste se zamysleli nad řešením jednotlivých úkolů, případně si udělali vlastní vylepšení.

Pro funkci zvuku musíme vytvořit adresář data v adresáři programu a do tohoto adresáře zkopírovat soubory BD.mp3 a SD.wav z adresáře příkladů, které jsou uloženy v adresáři kde máte nainstalován Processing. V mém případě je cesta následující:

c:\processing-2.1\modes\java\libraries\minim\examples\TriggerASample\data\

V opačném případě můžete zakomentovat všechny odkazy na zvuk a pracovat bez zvuku


| Autor: Tonda Seiner | Vydáno dne 02. 02. 2014 | 10585 přečtení |
| Počet komentářů: 117 | 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