gke

package module
v0.0.0-...-281fa27 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 9, 2026 License: MIT Imports: 20 Imported by: 0

README

Engine pro kroužek GoCode

Beware: using this library is not a good idea. It is designed to be used in a course for children so it does not match best practices, implement things the right way or even have consistent naming. Functions used in the course are in Czech, others are in English just for my own convenience. Moreover this library does not have a stable API, it is changed every year during summer holidays to reflect the needs of the course.

Knihovna pro tvorbu her v jazyce Go.

Jak začít

Každý program s touto knihovnou vypadá přibližně takto:

package main

import (
	gke "github.com/Fanteria/go-krouzek-engine"
)


func main() {
    gke.NastavPozadi("pozadi.png")

    zem := gke.PridejBlok("zem.png")
    gke.NastavPozici(zem, 0, 400)
    gke.NastavBlokovani(zem, true)

    postava := gke.PridejHratelnouPostavu("hrdina.png", 0.1, map[ebiten.Key]gke.Akce{
        ebiten.KeyArrowLeft:  gke.AkceJdeVLevo,
        ebiten.KeyArrowRight: gke.AkceJdeVPravo,
    })

    gke.SpustHru() // tohle volej vždy jako poslední!
}

Přehled funkcí

Pozadí
NastavPozadi(cesta_k_obrazku)

Nastaví obrázek, který se zobrazí jako pozadí celé hry – za vším ostatním.

gke.NastavPozadi("obloha.png")
Bloky

Blok je obrázek, který se zobrazí na obrazovce. Může to být kámen, plošina, strom – cokoliv.

PridejBlok(cesta_k_obrazku) *Blok

Přidá do hry jednoduchý blok z obrázku.

kamen := gke.PridejBlok("kamen.png")
PridejBlokSVyrezem(cesta_k_obrazku, vyrez) *Blok

Přidá blok, ale zobrazí jen část obrázku. Hodí se pro tzv. spritesheety – velké obrázky obsahující více věcí najednou. Výřez zadáš souřadnicemi levého horního rohu (X1, Y1) a pravého dolního rohu (X2, Y2).

// Z obrázku vezme jen část od pixelu (0,0) do (32,32)
strom := gke.PridejBlokSVyrezem("stromy.png", gke.Vyrez{X1: 0, Y1: 0, X2: 32, Y2: 32})
PridejAnimovanyBlok(cesta_k_obrazku, rychlost_animace, vyrezy...) *Blok

Přidá blok s animací – obrázek, který se střídavě mění jako animovaný film. Zadáš rychlost (číslo od 0 do 1, větší = rychlejší) a jednotlivé snímky animace jako výřezy.

ohne := gke.PridejAnimovanyBlok("ohne.png", 0.2,
    gke.Vyrez{X1: 0,  Y1: 0, X2: 32, Y2: 32},
    gke.Vyrez{X1: 32, Y1: 0, X2: 64, Y2: 32},
    gke.Vyrez{X1: 64, Y1: 0, X2: 96, Y2: 32},
)
Nastavení bloků
NastavPozici(blok, x, y)

Přesune blok na zadané místo na obrazovce. x je vzdálenost od levého okraje, y od horního okraje (v pixelech). Levý horní roh obrazovky je (0, 0).

gke.NastavPozici(kamen, 100, 300)
NastavZvetseni(blok, zvetseni)

Změní velikost bloku. 1.0 = původní velikost, 2.0 = dvakrát větší, 0.5 = poloviční.

gke.NastavZvetseni(kamen, 2.0)
NastavBlokovani(blok, blokuje)

Zapíná (true) nebo vypíná (false) pevnost bloku. Flexibilnější verze NastavPevnost.

gke.NastavBlokovani(dvere, false) // postavy projdou skrz
gke.NastavBlokovani(dvere, true)  // postavy se zastaví
Postavy

Postava je speciální blok, který může hráč ovládat klávesnicí.

PridejHratelnouPostavu(cesta_k_obrazku, rychlost_animace, akce_pohybu) *Postava

Přidá postavu ovládanou hráčem. Zadáš obrázek (spritesheet), rychlost animace a mapu kláves – každé klávese přiřadíš akci, která se má stát po jejím stisku.

postava := gke.PridejHratelnouPostavu("hrdina.png", 0.1, map[ebiten.Key]gke.Akce{
    ebiten.KeyArrowLeft:  gke.AkceJdeVLevo,
    ebiten.KeyArrowRight: gke.AkceJdeVPravo,
    ebiten.KeySpace:      gke.AkceSkace,
})
NastavRychlostPohybu(postava, rychlost)

Nastaví, jak rychle se postava pohybuje. Výchozí hodnota je 1.0.

gke.NastavRychlostPohybu(postava, 3.0) // třikrát rychlejší
NastavAnimaci(postava, akce, zrcadlove_otocena, animace)

Přiřadí postavě sadu snímků (animaci) pro konkrétní akci. Parametr zrcadlove_otocena způsobí, že se obrázek překlopí zrcadlově – hodí se např. pro pohyb doleva, kdy použiješ stejné snímky jako pro pohyb doprava, jen otočené.

// Animace běhu doprava
gke.NastavAnimaci(postava, gke.AkceJdeVPravo, false, []gke.Vyrez{
    {X1: 0,  Y1: 0, X2: 32, Y2: 32},
    {X1: 32, Y1: 0, X2: 64, Y2: 32},
})

// Animace běhu doleva – stejné snímky, jen zrcadlově otočené
gke.NastavAnimaci(postava, gke.AkceJdeVLevo, true, []gke.Vyrez{
    {X1: 0,  Y1: 0, X2: 32, Y2: 32},
    {X1: 32, Y1: 0, X2: 64, Y2: 32},
})

// Animace skoku (bez směru)
gke.NastavAnimaci(postava, gke.AkceSkace, false, []gke.Vyrez{
    {X1: 0,  Y1: 32, X2: 32, Y2: 64},
    {X1: 32, Y1: 32, X2: 64, Y2: 64},
})

// Animace skoku doprava
gke.NastavAnimaci(postava, gke.AkceSkaceVPravo, false, []gke.Vyrez{
    {X1: 0,  Y1: 32, X2: 32, Y2: 64},
    {X1: 32, Y1: 32, X2: 64, Y2: 64},
})

// Animace skoku doleva – zrcadlově otočená
gke.NastavAnimaci(postava, gke.AkceSkaceVLevo, true, []gke.Vyrez{
    {X1: 0,  Y1: 32, X2: 32, Y2: 64},
    {X1: 32, Y1: 32, X2: 64, Y2: 64},
})
Spuštění hry
SpustHru()

Spustí hru. Tuhle funkci volej vždy jako úplně poslední – až budeš mít vše připraveno.

gke.SpustHru()

Souřadnice na obrazovce

Možná tě překvapí, že osa Y jde dolů, ne nahoru jako v matematice. Levý horní roh obrazovky je bod (0, 0).

(0,0) ──────────────────► X
  │
  │
  │
  ▼
  Y

Takže pokud chceš dát blok dolů na obrazovce, použij větší hodnotu Y.

Tipy

  • Vždy volej SpustHru() jako poslední.
  • Bloky přidávej v pořadí, v jakém chceš, aby se kreslily – první přidaný blok bude nejníže (překryjí ho ostatní).
  • Pro pevné bloky (zem, zdi) nezapomeň zavolat NastavPevnost.

Documentation

Index

Constants

View Source
const (
	LogDebug   = LogLevel(slog.LevelDebug)
	LogInfo    = LogLevel(slog.LevelInfo)
	LogWarning = LogLevel(slog.LevelWarn)
	LogError   = LogLevel(slog.LevelError)
)
View Source
const (
	AkceNic = iota
	AkceStoji
	AkceJdeVPravo
	AkceJdeVLevo
	AkceJdeNahoru
	AkceJdeDolu
	AkceSkace
	AkceSkaceVPravo
	AkceSkaceVLevo
)

Variables

This section is empty.

Functions

func NastavAnimaci

func NastavAnimaci(postava *Postava, akce Akce, zrcadlove_otocena bool, animace []Vyrez)

NastavAnimaci přiřadí postavě animaci pro určitou akci (např. běh, stání, skok). Zadej postavu, akci, pro kterou animaci nastavuješ, zda má být obrázek zrcadlově otočený, a seznam výřezů ze spritesheetu, které tvoří snímky animace.

func NastavBlokovani

func NastavBlokovani(blok *Blok, blokuje bool)

NastavBlokovani zapíná nebo vypíná, zda blok zastavuje postavy. Pokud zadáš true, postavy se o blok zastaví. Pokud false, postavy projdou skrz.

func NastavGravitaci

func NastavGravitaci(gravitace float64)

NastavGravitaci nastaví sílu gravitace – jak rychle padají postavy dolů. Větší číslo = silnější gravitace, 0 = žádná gravitace.

func NastavKameru

func NastavKameru(postava *Postava)

NastavKameru zapne sledování postavy kamerou – obrazovka se bude posouvat spolu s postavou. NastavKameru zapne sledování postavy kamerou – obrazovka se bude posouvat spolu s postavou. Kamera se nezasune doleva za souřadnici 0. Jak daleko od okrajů se kamera začne pohybovat nastavíš pomocí NastavOkrajeKamery.

func NastavOkrajeKamery

func NastavOkrajeKamery(vlevo, vpravo, nahoru, dolu float64)

NastavOkrajeKamery nastaví, jak daleko od okrajů obrazovky musí postava být, aby se kamera začala posouvat. Například hodnoty 200 a 200 a 150 a 150 znamenají, že postava se může pohybovat v prostřední části obrazovky a kamera se pohne teprve když dojde blíž k některému okraji.

func NastavPozadi

func NastavPozadi(cesta_k_obrazku string)

NastavPozadi nastaví obrázek pozadí hry. Zadej cestu k obrázku, který chceš použít jako pozadí – například "pozadi.png". Pozadí se zobrazí za všemi ostatními věcmi ve hře.

func NastavPozici

func NastavPozici(blok *Blok, x float64, y float64)

NastavPozici přesune blok na zadané souřadnice na obrazovce. Souřadnice x udává vzdálenost od levého okraje, y od horního okraje (v pixelech).

func NastavRezimPozadi

func NastavRezimPozadi(rezim RezimPozadi)

NastavRezimPozadi nastaví, jak se obrázek pozadí přizpůsobí velikosti okna. Můžeš použít: Roztahnout, Vyplnit, Prizpusobit nebo Puvodni.

func NastavRychlostAnimace

func NastavRychlostAnimace(postava *Postava, rychlost_animace float64)

func NastavRychlostAnimaceProAnimovanyBlok

func NastavRychlostAnimaceProAnimovanyBlok(animovany_blok *AnimovanyBlok, rychlost_animace float64)

func NastavRychlostPohybu

func NastavRychlostPohybu(postava *Postava, rychlost_pohybu float64)

NastavRychlostPohybu nastaví, jak rychle se postava pohybuje. Výchozí rychlost je 1.0. Větší číslo = rychlejší pohyb, menší číslo = pomalejší pohyb.

func NastavSiluSkoku

func NastavSiluSkoku(postava *Postava, sila_skoku float64)

NastavSiluSkoku nastaví, jak vysoko postava skáče. Větší číslo znamená vyšší skok.

func NastavSlozkuSObrazky

func NastavSlozkuSObrazky(slozka *embed.FS)

Nastaví složku s obrázky, která je vložená přímo do programu pomocí go:embed. Zavolej tuto funkci na začátku programu, pokud chceš obrázky zabalit do spustitelného souboru.

func NastavSouradnicivouMrizku

func NastavSouradnicivouMrizku(rozestup float64)

NastavSouradnicivouMrizku zapne zobrazení souřadnicové mřížky s daným rozestupem mezi čarami (v pixelech).

func NastavUrovenLogovani

func NastavUrovenLogovani(uroven LogLevel)

NastavUrovenLogovani nastaví, jak moc podrobné zprávy se budou vypisovat do terminálu. Můžeš použít: LogDebug (nejvíce zpráv), LogInfo, LogWarning, LogError (pouze chyby).

func NastavZvetseni

func NastavZvetseni(blok *Blok, zvetseni float64)

NastavZvetseni změní velikost bloku. Hodnota 1.0 znamená původní velikost, 2.0 znamená dvakrát větší, 0.5 znamená poloviční.

func PridejBlokyPlosinuZBloku

func PridejBlokyPlosinuZBloku(cesta_k_obrazku string, opakovani int, x, y float64)

func PridejBlokyPlosinuZBlokuSVyrezem

func PridejBlokyPlosinuZBlokuSVyrezem(cesta_k_obrazku string, vyrez Vyrez, opakovani int, x, y float64)

func SpustHru

func SpustHru()

SpustHru spustí hru! Tuhle funkci zavolej jako poslední, až budeš mít vše připraveno. Po jejím zavolání se otevře okno hry a hra začne běžet.

func VypniKameru

func VypniKameru()

VypniKameru vypne posouvání obrazovky – kamera zůstane na místě.

func ZapniKameru

func ZapniKameru()

ZapniKameru zapne posouvání obrazovky za postavou.

func ZjistiKontaktSHratelnouPostavou

func ZjistiKontaktSHratelnouPostavou(postava *Postava) bool

func ZjistitKontakt

func ZjistitKontakt(a *Postava, b *Postava) bool

ZjistitKontakt zjistí, zda se dvě postavy navzájem dotýkají (překrývají). Vrátí true, pokud se postavy překrývají, jinak false.

func ZjistitPoziciX

func ZjistitPoziciX(blok *Blok) float64

ZjistitPoziciX vrátí aktuální souřadnici X (vodorovnou polohu) bloku v pixelech.

func ZjistitPoziciY

func ZjistitPoziciY(blok *Blok) float64

ZjistitPoziciY vrátí aktuální souřadnici Y (svislou polohu) bloku v pixelech.

Types

type Akce

type Akce int

type AnimovanyBlok

type AnimovanyBlok struct {
	Blok
	// contains filtered or unexported fields
}

func PridejAnimovanyBlokAnim

func PridejAnimovanyBlokAnim(cesta_k_obrazku string, vyrezy ...Vyrez) *AnimovanyBlok

PridejAnimovanyBlok přidá do hry animovaný blok – obrázek, který se pohybuje jako animace. Zadej cestu k obrázku (spritesheetu), rychlost animace (např. 0.1 = pomalá, 1.0 = rychlá) a libovolný počet výřezů, které tvoří jednotlivé snímky animace. Vrátí ukazatel na blok.

func PridejAnimovanyBlokRada

func PridejAnimovanyBlokRada(cesta_k_obrazku string, zacatek, konec int) *AnimovanyBlok

TODO doc comment

func PridejAnimovanyBlokSnimky

func PridejAnimovanyBlokSnimky(cesta_k_obrazku string, indexy ...int) *AnimovanyBlok

TODO doc comment

func PridejAnimovanyBlokVsechnySnimky

func PridejAnimovanyBlokVsechnySnimky(cesta_k_obrazku string) *AnimovanyBlok

TODO doc comment

type Blok

type Blok struct {
	// contains filtered or unexported fields
}

func PridejAnimovanyBlok

func PridejAnimovanyBlok(cesta_k_obrazku string, rychlost_animace float64, vyrezy ...Vyrez) *Blok

PridejAnimovanyBlok přidá do hry animovaný blok – obrázek, který se pohybuje jako animace. Zadej cestu k obrázku (spritesheetu), rychlost animace (např. 0.1 = pomalá, 1.0 = rychlá) a libovolný počet výřezů, které tvoří jednotlivé snímky animace. Vrátí ukazatel na blok.

func PridejBlok

func PridejBlok(cesta_k_obrazku string) *Blok

PridejBlok přidá do hry nový blok (obrázek). Zadej cestu k obrázku bloku – například "kamen.png". Blok se zobrazí na obrazovce a můžeš s ním dále pracovat pomocí dalších funkcí. Vrátí ukazatel na blok, který pak můžeš předávat jiným funkcím.

func PridejBlokSVyrezem

func PridejBlokSVyrezem(cesta_k_obrazku string, vyrez Vyrez) *Blok

PridejBlokSVyrezem přidá do hry blok, ale zobrazí jen část obrázku – výřez. Hodí se, když máš jeden velký obrázek s více věcmi (tzv. spritesheet) a chceš vybrat jen jednu z nich. Výřez zadáš jako souřadnice rohů obdélníku (X1, Y1) a (X2, Y2). Vrátí ukazatel na blok.

func PrijdejAnimovanyBlok

func PrijdejAnimovanyBlok(cesta_k_obrazku string, vyrezy ...Vyrez) *Blok

type Coords

type Coords struct {
	// contains filtered or unexported fields
}

type HratelnaPostava

type HratelnaPostava struct {
	Postava
	// contains filtered or unexported fields
}

type LogLevel

type LogLevel slog.Level

type Mriezka

type Mriezka struct {
	// contains filtered or unexported fields
}

Mriezka popisuje rovnoměrnou mřížku snímků ve spritesheetu.

func NactiMriezku

func NactiMriezku(cesta_k_obrazku string, nazev ...string) *Mriezka

NactiMriezku načte mřížku snímků pro obrázek na dané cestě. Volitelný parametr nazev umožňuje mít více různých mřížek pro jeden obrázek – například gke.NactiMriezku("./postava.png", "stani") a gke.NactiMriezku("./postava.png", "beh"). Pokud soubor s nastavením ještě neexistuje, otevře se okno pro konfiguraci mřížky. Po nastavení se konfigurace uloží – příště se načte automaticky.

func UpravMriezku

func UpravMriezku(cesta_k_obrazku string, nazev ...string) *Mriezka

func (*Mriezka) Rada

func (m *Mriezka) Rada(zacatek, konec int) []Vyrez

Rada vrátí výřezy pro snímky v rozsahu [zacatek, konec).

func (*Mriezka) Snimky

func (m *Mriezka) Snimky(indexy ...int) []Vyrez

Snimky vrátí výřezy pro zadané indexy snímků (číslované od 0).

func (*Mriezka) VsechnySnimky

func (m *Mriezka) VsechnySnimky() []Vyrez

VsechnySnimky vrátí výřezy pro všechny snímky v mřížce.

type Postava

type Postava struct {
	Blok
	// contains filtered or unexported fields
}

func PridejHratelnouPostavu

func PridejHratelnouPostavu(cesta_k_obrazku string, rychlost_animace float64, akce_pohybu map[ebiten.Key]Akce) *Postava

PridejHratelnouPostavu přidá do hry postavu, kterou může hráč ovládat klávesnicí. Zadej cestu k obrázku postavy, rychlost animace a mapu kláves na akce pohybu – například klávesa šipka doleva způsobí, že postava půjde doleva. Vrátí ukazatel na postavu, se kterou pak můžeš pracovat pomocí dalších funkcí.

func PridejNepritele

func PridejNepritele(cesta_k_obrazku string, strategie_pohybu func(*Postava) []Akce) *Postava

func PrijdejHratelnouPostavu

func PrijdejHratelnouPostavu(cesta_k_obrazku string, rychlost_animace float64, akce_pohybu map[ebiten.Key]Akce) *Postava

type PostavaAnimation

type PostavaAnimation struct {
	// contains filtered or unexported fields
}

type RezimPozadi

type RezimPozadi int

RezimPozadi určuje, jak se obrázek pozadí přizpůsobí velikosti okna.

const (
	// Roztahnout roztáhne obrázek přesně na velikost okna (může zkreslit poměr stran).
	RezimPozadiRoztahnout RezimPozadi = iota
	// Vyplnit zvětší obrázek tak, aby zaplnil celé okno – část obrázku může být oříznutá.
	RezimPozadiVyplnit
	// Prizpusobit zmenší nebo zvětší obrázek tak, aby byl celý vidět – mohou vzniknout okraje.
	RezimPozadiPrizpusobit
	// Puvodni zobrazí obrázek v jeho původní velikosti bez jakéhokoli škálování.
	RezimPozadiPuvodni
)

type Scale

type Scale struct {
	// contains filtered or unexported fields
}

type StatickyBlok

type StatickyBlok struct {
	Blok
	// contains filtered or unexported fields
}

type Vyrez

type Vyrez struct {
	X1 int
	X2 int
	Y1 int
	Y2 int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL