Úloha: Autíčko

Vaším úkolem bude vytvořit hru, ve které se jezdí autíčkem. Autíčko je ovládáno šipkami, které mění jeho směr a zvyšují-snižují jeho rychlost. K tomuto cíli se budeme dostávat postupně:

Autíčko

Auto může být reprezentováno elementem <div>. V css musí být nastavena výška a šířka. background-color je možné nahradit nějakým pěkným obrázkem (background-image:url('obrazek.png')).

Jak lze ovlivňovat rozumným způsobem pozici autíčka?

<div id="parkoviste">
 <div id="auticko"></div>
</div>

Autíčko musí mít v css position:absolute a parkoviste position:relative (a nějakou šířku width a výšku height - např width:500px;height:500px. Pro jistotu na začátek parkovišti nastavte také nějakou světlou backgroundColor - ať vidíte svou herní plochu.

Hodnoty css auticka left:100px a top:100px znamenají odstup od levého a vrchního kraje). Změnou těchto hodnot se pak autíčko posouvá.

Zkuste si teď pohybovat autíčkem doprava; použijeme setInterval funkci, která nám umožní opakovat volání funkce změny koordinátů autíčka každých X milisekund.

var x=0; //pocatecni pozice
 
function render(){
x+=1; //posun doprava
document.getElementById("auticko").style.left=x+"px";
}

Modifikací posunu y (top vlastnosti v css) tedy naše nahoru otočené autíčko můžeme rozjíždět v ose y (nahoru a dolů). Použijeme k tomu zachytávání klávesnice:

/* Ovladani klavesnici */
document.addEventListener('keydown', function(event){
  const keyName = event.key;
 
  if(keyName === 's' || keyName === 'S'){
  dolu();
  }
  if(keyName === 'w' || keyName === 'W'){
  nahoru();
  }
});

V tomto zjednodušeném případě si vysvětlíme, jak funguje rychlost a přidávání/ubírání plynu. My totiž nechceme, aby zmáčknutí W posunulo auto nahoru. Chceme aby zmáčknutí (resp. později držení) W zvýšilo rychlost autíčka. Rychlost se pak přičítá k pozici (jako jsme kódem x+=1 nahoře ve funkci render přičítali jedničku, teď můžeme přičíst (resp. odečíst) y+=rychlostY.

Otáčení autíčka

Otočení nehybného autíčka lze pomocí CSS udělat poměrně jednoduše - jde o vlastnost transform:rotate(7deg). Hodnotu 7 si, podobně jako u rychlosti, budeme držet v proměnné rotace - klávesy A a D budou tento úhel rotace zvyšovat/snižovat.