
%
% Licencia:
%  Materialy su chranene licenciou GPL
%                Juraj Michalek
%

%Dokumentaciu, ako previest slidy na
%format PDF, kde sa caka na stlacenie klavesy
%pri znaku %\pause je na:
%http://www.tp4.ruhr-uni-bochum.de/SoftwareDocs/pdfsc/pdfscr-doc.html

\documentclass[30pt,landscape]{foils} %da se zmanit velikost pisma ... 17, 20, 25 nebo 30

\usepackage[slovak]{babel}
\usepackage{t1enc}
%\usepackage[latin2]{inputenc}

\newcommand{\nadpisek}[1]
  {\begin{center} \textcolor{mgreen}{\bfseries #1 } \end{center} \medskip}

\ifx\pdfoutput\undefined
  \usepackage[monochrome]{color}
  \usepackage[dvips]{graphicx}
\else
  \usepackage[pdftex]{color}
  \usepackage[pdftex]{graphicx}
\fi

  \usepackage{pause}
  \usepackage{background}
  \usepackage{pp4slide}
    \definecolor{dgreen}{rgb}{0,0.5,0}  % hodilo by se nadefinovat hezci
    \definecolor{mgreen}{rgb}{0,0.7,0}  % i kdyz... "ZELENA UKLIDNUJE A TICHO LECI"
    \definecolor{lgreen}{rgb}{0,0.9,0}
    \renewcommand\Black{\color{black}}  % undo pp4slide
    \renewcommand\normalcolor{\color{dgreen}}
    \renewcommand{\labelitemi}{\textcolor{mgreen}{$\bullet$}} 
% jako odrazka se muze dat jakykoliv mat. symbol (normalni tucka je \bullet)

\ifx\pdfoutput\undefined
\else
  \definecolor{bggreen}{rgb}{1,1,1} % barvicka na pozadi
  \color{black}
  \vpagecolor{bggreen}
\fi

%\usepackage{fullpage}
\usepackage{graphicx}

\begin{document}



\foilhead{Programovanie a portovanie hier}
\begin{itemize}
	\item 	Juraj Michálek
	\item 	georgik@host.sk
	\item 	http://kota543.host.sk

\end{itemize}


\foilhead{Čo nás čaká}
\begin{itemize}
	\item 	výlet do histórie
	\item 	trocha teórie k prenosu aplikácií
	\item 	programovanie hier (C a C++)

\end{itemize}


\foilhead{História -- prvá hra}
\begin{itemize}
	\item 	Starwars (Stephen Russell)
	\item 	dokončená v roku 1962
	\item 	počítač DEC PDP-1

\end{itemize}


\foilhead{História -- OS}
\begin{itemize}
	\item 	Multics -- Ken Thompson, Dennisom Ritchiem
	\item 	povrávalo sa, že Thomson programoval Multics 
	\item 	iba preto, aby mal kde spustiť svoje hry

\end{itemize}


\foilhead{História -- Home computer}
\begin{itemize}
	\item 	domáce počítače (HC)
	\item 	PMD, Spectrum, Didaktik, Amiga, Comodore
	\item 	hry mali nízke hadvérove nároky
	\item 	prenositeľnosť medzi počítačmi rovnakej kategórie

\end{itemize}


\foilhead{Súčastnosť -- Personal Computer}
\begin{itemize}
	\item 	osobné počítače (PC)
	\item 	prevažne založené na architektúre Intel
	\item 	nejednotnosť hardvérových konfigurácií
	\item 	rôzne operačné systémy
	\item 	nie je možné použiť starý model vývoja

\end{itemize}


\foilhead{Riešenie}
\begin{itemize}
	\item 	platformovo nezávislé aplikácie
	\item 	aplikácie dokážu fungovať na rôznorodom železe
	\item 	aplikácie dokážu fungovať nad rôznymi OS

\end{itemize}


\foilhead{Zavedenie medzivrstvy}
\begin{itemize}
	\item 	program je nutné oddeliť od hardvéru
	\item 	riešené pomocou knižníc (združujú funkcie)
	\item 	pri prechode na novú platformu sa mení len medzivrstva
	\item 	nie je nutné modifikovať kód programu

\end{itemize}


\foilhead{Programovacie techniky}
\begin{itemize}
	\item 	dodržiavať programátorké normy
	\item 	dávať si pozor na platformovo závislé funkcie
	\item 	na prácu s hardvérom využívať funkcie z knižníc	

\end{itemize}


\foilhead{Knižnice}
\begin{itemize}
	\item 	nie je knižnica ako knižnica
	\item 	systémové knižnice sú silne platformovo závislé
	\item 	nutné používať multiplatformové knižnice
	\item 	\#include <conio.h>

\end{itemize}


\foilhead{Knižnice}
\begin{itemize}
	\item 	Simple DirectMedia Layer
	\item 	http://www.libsdl.org
	\item 	Allegro
	\item 	http://allegro.cc

\end{itemize}


\foilhead{Kompilácia}
\begin{itemize}
	\item 	program stačí skompilovať pre príslušný OS
	\item 	DOS, Windows: DJGPP (www.delorie.com)
	\item 	Linux: gcc, g++
	\item 	kompilácia pre inú platformu cross compiler

\end{itemize}


\foilhead{Programovanie hier}
\begin{center}
	\includegraphics*{tux_programming.jpg}
\end{center}




\foilhead{Časovač -- všeobecne}
\begin{itemize}
	\item 	určuje ako často je stav hry obnovovaný
	\item 	implementácia: počítadlo
	\item 	problém: viazaný na konkretnú frekvenciu procesora
	\item 	riešenie: obnovovaný v pravidelných intervaloch
	\item 	vhodný opakovanie: 30x za sekundu

\end{itemize}


\foilhead{Časovač -- implementácia I.}
\begin{itemize}
	\item 	sleep(int), usleep(int)
	\item 	proces je uspaný na určitú dobu
	\item 	problém je pri slabších počítačoch
	\item 	uspanie je konštatne dlhé

\end{itemize}


\foilhead{Časovač -- implementácia II.}
\begin{itemize}
	\item 	volatile int time\_counter;
	\item 	void update\_timer() \{
	\item 	~~~~~~~time\_counter++;

\end{itemize}


\foilhead{Časovač -- plánovanie}
\begin{itemize}
	\item 	nie je nutné pri čakaní vyťažovať procesor
	\item 	voľný čas je vhodné vrátiť systému
	\item 	void yield\_timeslice();
	\item 	usleep(1);

\end{itemize}


\foilhead{Časovač -- ukážka}
\begin{itemize}
	\item 	do \{
	\item 	~~~~~~~usleep(1);
	\item 	\} while( time\_counter < wait\_time );

\end{itemize}


\foilhead{Klávesnica}
\begin{itemize}
	\item 	štandardné funkcie načítavajú len jeden kláves
	\item 	knižnice majú vlastné funkcie na spracovávanie vstupu
	\item 	implementované ako pole príznakov
	\item 	int key[KEY\_ESC];

\end{itemize}


\foilhead{Spracovanie obrazu I.}
\begin{itemize}
	\item 	vykresľovanie priamo na obrazovku
	\item 	pomalé a zložité na implementáciu

\end{itemize}


\foilhead{Spracovanie obrazu II.}
\begin{itemize}
	\item 	virtual screen (buffer)
	\item 	obraz je vyreslený do virtuálnej obrazovky 
	\item 	po dokončení grafických úprav je obraz zobrazený
	\item 	operácie nad pamäťou sú veľmi rýchle
	\item 	blokový prenos grafiky je rýchly 

\end{itemize}


\foilhead{Spracovanie obrazu III.}
\begin{itemize}
	\item 	double buffering
	\item 	tripple buffering
	\item 	dirty rectangles
	\item 	Z buffer

\end{itemize}


\foilhead{Farby}
\begin{itemize}
	\item 	odporúčaná hĺbka 8 a 16 bit
	\item 	8 bit -- paleta -- všetky obrazy musia byť v palete
	\item 	16 bit -- obrazy nie sú zavislé

\end{itemize}


\foilhead{Transparentnosť}
\begin{itemize}
	\item 	obrázky sú zobrazované ako obdĺžniky
	\item 	okolie predmetu musí byť priehľadné
	\item 	8 bit -- farba (0, 0, 0) -- black
	\item 	16 bit -- farba (max R, zero G, max B)

\end{itemize}


\foilhead{Súbory}
\begin{itemize}
	\item 	animácie pozostávaju z veľkého množstva súborov
	\item 	súbory je vhodné integrovať do jedného veľkého
	\item 	jednoduhšia manipulácia a prenos
	\item 	Allegro -- datafile (grabber)

\end{itemize}


\foilhead{Platformovo nezávislá hra}
\begin{itemize}
	\item 	platformovo nezávislé funkcie
	\item 	platformovo nezávislé dáta
	\item 	Configure a Makefile
	\item 	zoznam knižníc potrebných na kompiláciu

\end{itemize}


\foilhead{Základné súbory}
\begin{itemize}
	\item 	AUTHORS
	\item 	INSTALL
	\item 	Changelog
	\item 	README

\end{itemize}


\foilhead{Tvorba balíku I.}
\begin{itemize}
	\item 	v hlavnom adresári configure/Makefile
	\item 	najvhodnejší postup:
	\item 	./configure
	\item 	make
	\item 	make install

\end{itemize}


\foilhead{Tvorba balíku II.}
\begin{itemize}
	\item 	tar cvzf hra-verzia.tar.gz hra-verzia
	\item 	balík so zdrojovými kódmi
	\item 	balík s binárkami

\end{itemize}


\foilhead{Najčastejšie problémy I.}
\begin{itemize}
	\item 	nedodržiavanie normy (void main)
	\item 	nedodržiavanie typových konverzií
	\item 	veľké, malé písmená súborov
	\item 	neexistencia Makefile

\end{itemize}


\foilhead{Najčastejšie problémy II.}
\begin{itemize}
	\item 	zlá správa pamäte
	\item 	kód -- štrúdľa
	\item 	neuvedené include (string.h)
	\item 	neokomentovaný kód

\end{itemize}


\foilhead{Špecifické funkcie}
\begin{itemize}
	\item 	vhodné ošetriť pomocou makier
	\item 	\#ifdef LINUX 
	\item 	... prog ... 
	\item 	\#endif

\end{itemize}


\foilhead{Ako začať}
\begin{itemize}
	\item 	nainštalovať príslušné knižnice
	\item 	pozrieť si hotovú hru
	\item 	http://games.linux.sk
	\item 	pokúsiť sa odportovať už existujúcu hru

\end{itemize}


\foilhead{Ako pokračovať}
\begin{itemize}
	\item 	pomôcť začiatočníkom pri písaní kódu
	\item 	všetcia sa dopúšťajú tých istých chýb
	\item 	otvoriť kód svojej hry

\end{itemize}


\foilhead{Rekapitulácia adries}
\begin{itemize}
	\item 	http://games.linux.sk
	\item 	http://allegro.cc
	\item 	http://www.libsdl.org

\end{itemize}


\foilhead{Ďakujem za pozornosť}
\begin{itemize}
	\item 	georgik@host.sk

\end{itemize}
\end{document}

