C++ -kysymykset
Re: C++ -kysymykset
Mites SDL:n saa tyhjentämään ruudun ennen uutta SDL_Flip():ä? Tuo sorsa jonka kanssa opettelen käyttäytyy kuin cb-sorsa jonka pääloopin drawscreen olisi muoto "DrawScreen OFF,OFF"
Danke, Grandi!
Danke, Grandi!
Last edited by Feuer on Sat Dec 12, 2009 5:25 pm, edited 2 times in total.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Blogi - Peräpohjola - MERPG
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Code: Select all
SDL_FillRect (SDL_GetVideoSurface(), 0L, 0);
-
- Active Member
- Posts: 170
- Joined: Mon Jun 23, 2008 9:04 pm
Re: C++ -kysymykset
Aloin tutkiskella C++ tässä pari päivää sitten, ja nyt olen päätynyt hieman kinkkiseen tilanteeseen. Nimittäin, kumpi näistä koodeista on oikein:
Kun taas tälläinen koodinpätkä takertui mukaan jostain C++ oppaasta:
Kummatkin näyttäisivät toimivan, eli tuskin kumpikaan on varsinaisesti väärä, kenties vanhentunut tai jotain? Kumpi tapa olisi parempi? Vai onko mitään väliä?
Code: Select all
//ohjelmointiputkan C++ oppaasta napattu koodinpätkä
#include <iostream>
int main ()
{
std::cout <<"Hei maailma!"<< std::endl;
}
Code: Select all
#include <iostream>
using namespace std;
void main()
{
cout<<" Hello, world \n";
}
Väsyttää niin ettei jaksa edes mennä lepäämään.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Joo, tuo alempi on vanhentunut tapa. C++:n main-funktiohan on muotoa
Code: Select all
int main ([int [, char**]])
Re: C++ -kysymykset
Grandi jeps. Ja vielä hieman lisää Infoa: kun käytät standardi kirjaston juttuja (cin, cout, #include <iostream>, cmath jne..) kannattaa vain kirjoittaa esikääntäjän komentojen jälkeen "using namespace std;" mikä ottaa "std" nimiavaruuden käyttöön. Säästyt monilta virheiltä kun jokaisen tulostuskomenon eteen ei tarvitse kirjoittaa nimiavaruutta jossa cout sijaitsee.. Jälkeen päin kannattaa (varsinkin isojen sorsien kanssa) ottaa vain yksittäisiä nimiä tyyliin: "using std:cout;"
Ja, jos näyttää että koodi on oiken, mutta kääntäjä buklaa biljoona eri virhettä, vika on linkkerille tai kääntäjälle annetuissa poluissa. Koeta tällöin säätää editorista prohektin asetuksia. Viimeinen vinkki: \ toimii merkkijoinoissa "escapechater":na. Niimpä cout<<"\\"; tulostaa: \ ja cout<<"\""; tulostaa kaksoisheittomerkin. "\n" on rivin vaihto.
Ja, jos näyttää että koodi on oiken, mutta kääntäjä buklaa biljoona eri virhettä, vika on linkkerille tai kääntäjälle annetuissa poluissa. Koeta tällöin säätää editorista prohektin asetuksia. Viimeinen vinkki: \ toimii merkkijoinoissa "escapechater":na. Niimpä cout<<"\\"; tulostaa: \ ja cout<<"\""; tulostaa kaksoisheittomerkin. "\n" on rivin vaihto.
-On selkeästi impulsiivinen koodaaja joka...
Re: C++ -kysymykset
std::endl flushaa ulostulovirran, suosittelen käyttämään sitä.KankiKalle wrote:Aloin tutkiskella C++ tässä pari päivää sitten, ja nyt olen päätynyt hieman kinkkiseen tilanteeseen. Nimittäin, kumpi näistä koodeista on oikein:
Kun taas tälläinen koodinpätkä takertui mukaan jostain C++ oppaasta:Code: Select all
//ohjelmointiputkan C++ oppaasta napattu koodinpätkä #include <iostream> int main () { std::cout <<"Hei maailma!"<< std::endl; }
Kummatkin näyttäisivät toimivan, eli tuskin kumpikaan on varsinaisesti väärä, kenties vanhentunut tai jotain? Kumpi tapa olisi parempi? Vai onko mitään väliä?Code: Select all
#include <iostream> using namespace std; void main() { cout<<" Hello, world \n"; }
Sen lisäksi vaikka void main ei aiheutakaan mitään Windowsilla, muilla alustoilla se saattaa aiheuttaa selittämättömiä virheitä käyttöjärjestelmän tai shellin tasolla.
Re: C++ -kysymykset
Hyvin tyhmä kysymys: Minkä tyyppinen muuttuja on int*? Mistään en ole löytänyt tietoa, joten tuo on varmaankin asia joka minun pitäisi tietää...
Re: C++ -kysymykset
Integer eli kokonaisluku.Pyromanius wrote:Hyvin tyhmä kysymys: Minkä tyyppinen muuttuja on int*? Mistään en ole löytänyt tietoa, joten tuo on varmaankin asia joka minun pitäisi tietää...
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Kannattaa myös huomata, että kyseessä on osoitin.
http://fi.wikipedia.org/wiki/Osoitin_(ohjelmointi)
http://www.cplusplus.com/doc/tutorial/pointers/
http://fi.wikipedia.org/wiki/Osoitin_(ohjelmointi)
http://www.cplusplus.com/doc/tutorial/pointers/
Re: C++ -kysymykset
Optimointiin juttua. Teen (yllätys uusi projekti!) luokkaa bittikartta törmäyksille, eli ns. pixel-perfect tarkistuksia. Heräsi kysymys että miten kannattaa toteuttaa 2D-taulukko joka sisältää tuon bittikartan. Dataa tulee siis olemaan paljon, koska törmäyskartta voi olla minkä kokoinen tahansa. (eli hyvin iso) Tärkeintä on että taulukkoa luettaisiin mahdollisimman nopeasti silloin, kun bittejä selataan ylös/alas tai oikealle/vasemmalle paljon esim. vektorin sunnassa. Sanokaapas mikä on nopein:
Pseudoa:
Itse veikkaan Tapa kolmea.
Pseudoa:
Code: Select all
Tapa 1:
// Taulukon varaus:
char * table = new char[width*height]
// Taulukon Solunhaku:
data = table[y*width+x]
Tapa 2:
// Taulukon varaus:
char ** table = new char * [height]
for i = 0 to height
table[i] = new char[width]
next
// Taulukon Solunhaku:
data = table[y][x];
Tapa 3:
// Taulukon varaus:
char * table = new char[width*height]
char ** helptable = new char * [height]
for i = 0 to height
helptable[i] = table + i*width
next
// Taulukon Solunhaku:
data = helptable[y]+x
-On selkeästi impulsiivinen koodaaja joka...
Re: C++ -kysymykset
Mihin tapa 3 perustuu o_OJATothrim wrote:Optimointiin juttua. Teen (yllätys uusi projekti!) luokkaa bittikartta törmäyksille, eli ns. pixel-perfect tarkistuksia. Heräsi kysymys että miten kannattaa toteuttaa 2D-taulukko joka sisältää tuon bittikartan. Dataa tulee siis olemaan paljon, koska törmäyskartta voi olla minkä kokoinen tahansa. (eli hyvin iso) Tärkeintä on että taulukkoa luettaisiin mahdollisimman nopeasti silloin, kun bittejä selataan ylös/alas tai oikealle/vasemmalle paljon esim. vektorin sunnassa. Sanokaapas mikä on nopein:
Pseudoa:Itse veikkaan Tapa kolmea.Code: Select all
Tapa 1: // Taulukon varaus: char * table = new char[width*height] // Taulukon Solunhaku: data = table[y*width+x] Tapa 2: // Taulukon varaus: char ** table = new char * [height] for i = 0 to height table[i] = new char[width] next // Taulukon Solunhaku: data = table[y][x]; Tapa 3: // Taulukon varaus: char * table = new char[width*height] char ** helptable = new char * [height] for i = 0 to height helptable[i] = table + i*width next // Taulukon Solunhaku: data = helptable[y]+x
Re: C++ -kysymykset
Kiitos illan parannuksesta. No selitämpäs asian: taulukko varataan dynaamisesti yhtenä pötkönä kuten tapa 1:ssä, mutta lisäksi varataan osoitin taulukko rivien aluille. For loopissa asetetaan aputaulukon osoittimet sojottamaan jokaisen "rivin" alkuun pötkössä varattuun muistiin. Nyt kun helptable[y] palauttaa osoittimen rivin alkuun, ja lisäämällä tähän vielä x saadaan (tada!) oikea indeksi. Huomaa että helptable on taulukollinen osoittimia. Muina Plussina on että "delete[] table" poistaa koko roskan kerralla, toisin kuin tapa 2:ssa.esa94 wrote:...
Mihin tapa 3 perustuu o_O
-On selkeästi impulsiivinen koodaaja joka...
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: C++ -kysymykset
Veikkaan että on huomattavasti halvempaa tehdä yksi kertolasku kuin lähteä kaivamaan taulun arvoa RAMista tai edes välimuistista. Etenkin kun muistelisin jostain lukeneeni, että tämä pitää paikkansa jopa trigonometrisillä funktioilla, jotka ovat huomattavasti hitaampia kuin kertolasku.
Tiedä sitten kun en ole millään muotoa testannut (ja näin pienet erot eivät kovin oleellisia yleensä ole, jos nyt ei jotain muutenkin ultimaattisen raskasta väännä ;3 )
Tiedä sitten kun en ole millään muotoa testannut (ja näin pienet erot eivät kovin oleellisia yleensä ole, jos nyt ei jotain muutenkin ultimaattisen raskasta väännä ;3 )
Re: C++ -kysymykset
Enää en veikkaile vaan tutkin, pilkun tarkkaa optimointia tiedossa. olkoon pieni harjoutus minulle.
Tapa 3:n tuottama asm-koodi:Tapa 1: tuottama asm-koodi: Analyysi:
Tapa 1:n on enemmän komentoja kuin tapa 3:ssa. Tapa 3 siirtää vähemmän dataa. (9 mov kutsua vs. 10kpl) Molemmat käyttävät saman verran laskuoperaatiota. (4kpl) (add, sub, imul, lea) Näin ollen tapa 3 on nopeampi. koetin etsiä komentojen "clock-cycle" tietoja mutta ei tärpännyt. : / jos löydän ne, edittaan sitten tähän viestiin..
Tapa 3:n tuottama asm-koodi:
Code: Select all
0040F1C0 push ebp
0040F1C1 mov ebp,esp
0040F1C3 sub esp,0x8
0040F1C6 mov DWORD PTR [ebp-0x4],ecx
0040F1C9 mov DWORD PTR [ebp-0x8],edx
0040F1CC mov eax,DWORD PTR [ebp-0x4]
0040F1CF mov eax,DWORD PTR [eax]
0040F1D1 mov edx,DWORD PTR [ebp+0x8]
0040F1D4 shl edx,0x2
0040F1D7 add eax,edx
0040F1D9 mov edx,DWORD PTR [eax]
0040F1DB mov eax,DWORD PTR [ebp-0x8]
0040F1DE lea eax,[edx+eax*1]
0040F1E1 mov al,BYTE PTR [eax]
0040F1E3 leave
0040F1E4 ret 0x4
Code: Select all
0040F1C0 push ebp
0040F1C1 mov ebp,esp
0040F1C3 sub esp,0x8
0040F1C6 mov DWORD PTR [ebp-0x4],ecx
0040F1C9 mov DWORD PTR [ebp-0x8],edx
0040F1CC mov eax,DWORD PTR [ebp-0x4]
0040F1CF mov edx,DWORD PTR [eax+0x4]
0040F1D2 mov eax,DWORD PTR [ebp-0x4]
0040F1D5 mov ecx,DWORD PTR [eax+0x8]
0040F1D8 mov eax,DWORD PTR [ebp+0x8]
0040F1DB imul ecx,eax
0040F1DE mov eax,DWORD PTR [ebp-0x8]
0040F1E1 lea eax,[ecx+eax*1]
0040F1E4 lea eax,[edx+eax*1]
0040F1E7 mov al,BYTE PTR [eax]
0040F1E9 leave
0040F1EA ret 0x4
Tapa 1:n on enemmän komentoja kuin tapa 3:ssa. Tapa 3 siirtää vähemmän dataa. (9 mov kutsua vs. 10kpl) Molemmat käyttävät saman verran laskuoperaatiota. (4kpl) (add, sub, imul, lea) Näin ollen tapa 3 on nopeampi. koetin etsiä komentojen "clock-cycle" tietoja mutta ei tärpännyt. : / jos löydän ne, edittaan sitten tähän viestiin..
-On selkeästi impulsiivinen koodaaja joka...
- Dibalo
- Advanced Member
- Posts: 298
- Joined: Mon Aug 27, 2007 8:12 pm
- Location: Espoo, Finland
- Contact:
Re: C++ -kysymykset
Näytäppä huvin vuoksi noita ASM-koodeja vastaavat C++-ohjelmakoodit (ja mieluiten vielä kutsuva osa, mikäli (kun) kyseessä on funktio).
-
- Tech Developer
- Posts: 650
- Joined: Mon Aug 27, 2007 9:51 pm
- Location: Helsinki, Finland
- Contact:
Re: C++ -kysymykset
Käyttäessäsi ilmausta "clock-cycle" -tiedot tarkoittanet tietoja siitä, kuinka monta kellojaksoa prosessori kutakin käskyä nysvää? En ole mikään ASM-ex-pertti, mutta ainakin sen tiedon perusteella, mitä minulla konekielestä ja tietokoneen arkkitehtuurista on, väittäisin, että kyseiset tiedot riippuvat arkkitehtuurista. Ja kaikki, mikä ei tapahdu prosessorin sisällä (rekistereissä), on riippuvaista muistakin rakenteista. Esimerkiksi MOV-käskyn operoidessa keskusmuistiin riippuu sen suoritusaika emolevyn muistiväylästä, muisteista ja Intelin vanhemman suoritinarkkitehtuurin tapauksessa myös piirisarjasta.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES
CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Tech-kehittäjä
CoolBasic Classic, Cool VES
CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Re: C++ -kysymykset
Dev-c++ kääntää projektin, mutta valmista exeä ei voi suorittaa. Was ist? Ei tule minkäänlaista virheilmoitusta, ja testattu on sekä 32-bit - vistassa että 64bitvistassa. Ja IDE:n versio on 4.9.9.2
Ja tämä siis yhden ainoan projektin kanssa, perushelloworldeissä ei ole mitään ongelmaa.
Ja tämä siis yhden ainoan projektin kanssa, perushelloworldeissä ei ole mitään ongelmaa.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Blogi - Peräpohjola - MERPG
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Ei se IDE niitä sinun koodejasi käännä.
Millä tavalla ilmenee, ettei EXEä voi suorittaa? Jos se on komentoriviohjelma niin sinun on ajettava se komentoriviltä tai lisättävä ohjelmaan jokin asia joka estää sitä suorittamisensa lopettamisen kunnes ollaan varmistuttu käyttäjän saaneen tietoisuuteensa ohjelman käyttäjälle välitettävät asiat, tässä tapauksessa lähinnä tulostukset.
Millä tavalla ilmenee, ettei EXEä voi suorittaa? Jos se on komentoriviohjelma niin sinun on ajettava se komentoriviltä tai lisättävä ohjelmaan jokin asia joka estää sitä suorittamisensa lopettamisen kunnes ollaan varmistuttu käyttäjän saaneen tietoisuuteensa ohjelman käyttäjälle välitettävät asiat, tässä tapauksessa lähinnä tulostukset.
Re: C++ -kysymykset
Kääntäjä, joka tulee yllämainitun IDE:n mukana, ja jonka nimi ei satu juuri tulemaan mieleen.
Ja kun tarkemmin tuota tutkin niin kävi ilmi ettei kyse tosiaan ole mistään Coolbasicista, jolla tehdyt ohjelmat huutavat suureen ääneen ettei homma toimi Kyllä tuo ohjelma suorittuu, mutta ainoa mitä se tekee on että luo suoritushakemistoon kaksi (tyhjää ) tiedostoa osoituksena siitä että SDL kohtasi jonkin virheen. Nyt herää jo kysymys että kannattaisiko iskeä koodi tänne ja kärsiä "copypastea!" - valitukset, kun tuo on ohjelmointiputkan SDL-esimerkin päälle kasattu...
Ja kun tarkemmin tuota tutkin niin kävi ilmi ettei kyse tosiaan ole mistään Coolbasicista, jolla tehdyt ohjelmat huutavat suureen ääneen ettei homma toimi Kyllä tuo ohjelma suorittuu, mutta ainoa mitä se tekee on että luo suoritushakemistoon kaksi (tyhjää ) tiedostoa osoituksena siitä että SDL kohtasi jonkin virheen. Nyt herää jo kysymys että kannattaisiko iskeä koodi tänne ja kärsiä "copypastea!" - valitukset, kun tuo on ohjelmointiputkan SDL-esimerkin päälle kasattu...
Code: Select all
#include "SDL/SDL.h"
#include <string>
//luokillaharrastelua
using namespace std;
using std::string;
SDL_Surface * naytto;
//tästä alkaa luokat
class pelihahmo
{
public:
int x;
int y;
double health;
char tiedostonimi[11];
SDL_Surface * hahmo;
void PiirraItsesi(int x,int y);
// int Siirry(int x_akseli,int y_akseli);
pelihahmo();
~pelihahmo();
};
class ammukset: public pelihahmo
{
public:
ammukset();
~ammukset();
};
ammukset::ammukset()
{hahmo=SDL_LoadBMP("pati.bmp");SDL_SetColorKey(hahmo, SDL_SRCCOLORKEY, SDL_MapRGB(hahmo->format,0,0,0));y=400; }
ammukset::~ammukset()
{SDL_FreeSurface(hahmo);}
pelihahmo::~pelihahmo()
{SDL_FreeSurface(hahmo);}
pelihahmo::pelihahmo()
{
hahmo = SDL_LoadBMP("jamppa.bmp");
SDL_SetColorKey(hahmo, SDL_SRCCOLORKEY, SDL_MapRGB(hahmo->format,0,0,0));
health=100;
}
void pelihahmo::PiirraItsesi(int x,int y)
{ if ( hahmo == NULL ) {
fprintf(stderr, "Kuvannäyttö ei onnistunu: %s\n", SDL_GetError());
return;
}
// mihin näytöllä
SDL_Rect alue;
alue.x = x;
alue.y = y;
// näytölle
SDL_BlitSurface(hahmo, NULL, naytto, &alue); // koska toinen parametri on NULL, piirretään koko kuva
}
//tähän loppuu luokat
Code: Select all
//main
int main(int argc, char *argv[]) {
if( SDL_Init(SDL_INIT_VIDEO) < 0 ) // paluuarvon ollessa pienempi kuin 0, tapahtui virhe
{
fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError()); // virheestä tiedot tiedostoon
return 0; // lopetetaan ohjelma
}
ammukset ammus[10];
for(int i=0;i<10;i++) {ammus[i]=ammukset();} //luodaan fyysinen olio kutsumalla constructoria
pelihahmo jamppa;
// SDL_Surface * jamppa; //turhia luokan vuoksi
// SDL_Surface * pati;
Uint8* nappi;
naytto = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE|SDL_RESIZABLE);
//jamppa = SDL_LoadBMP("Jamppa.bmp");
//pati = SDL_LoadBMP("Pati.bmp");
bool pelissa=true;
int rottax, rottay; //hiiren koordinaatit
// SDL_SetColorKey(jamppa, SDL_SRCCOLORKEY, SDL_MapRGB(jamppa->format,0,0,0));
// SDL_SetColorKey(pati, SDL_SRCCOLORKEY, SDL_MapRGB(pati->format,0,0,0));
for(int i=0;i<10;i++) {
ammus[i].y=400+(i*4);
ammus[i].x=0;}
while(pelissa)
{
SDL_FillRect (naytto, 0, 0);
SDL_GetMouseState(&rottax, &rottay);
SDL_Event tapahtuma; // tapahtumat
SDL_PollEvent(&tapahtuma);
//if(nappi[SDLK_RIGHT]) ammus.x++;
for(int i=0;i<10;i++) {
ammus[i].x += 2;
if(ammus[i].x>1024) ammus[i].x=-20;
ammus[i].PiirraItsesi(ammus[i].x,ammus[i].y);
}
jamppa.PiirraItsesi(rottax,rottay);
nappi = SDL_GetKeyState(NULL);
if(nappi[SDLK_ESCAPE]) pelissa=false;
SDL_Flip(naytto);
}
// SDL_FreeSurface(jamppa);
SDL_FreeSurface(naytto);
SDL_FreeSurface(jamppa.hahmo);
SDL_Quit(); // "suljetaan" SDL
return 0;
}
EDIT:
Kiitos, Dibalo ja Zero! Miten_voisi_toteuttaa - ajatukset muilta helpottavat tätä puuhaa melkoisesti!
Last edited by Feuer on Thu Jan 07, 2010 11:22 am, edited 1 time in total.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Blogi - Peräpohjola - MERPG
- Dibalo
- Advanced Member
- Posts: 298
- Joined: Mon Aug 27, 2007 8:12 pm
- Location: Espoo, Finland
- Contact:
Re: C++ -kysymykset
Osoittimet ja perintä on hieman hakusessa. Suosittelen opettelemaan seuraavat asiat ja kokeilemaan sitten uudestaan:
Itse lähtisin toteuttamaan tuota ongelmaasi seuraavalla tavalla:
1) Luokka "kuva", joka sisältää halutun kuvan latauksen tiedostonimen perusteella ja piirto-operaatiot.
2) Panoksille luokka "Ammus", joka perii kuva-luokan ja laajentaa tätä niin, että panos on tietoinen omasta sijainnistaan, suunnastaan ja nopeudestaan ja näin ollen osaa itse päivittää paikkansa ja piirtää itsensä.
3) Pelaajalle luokka "Pelihahmo", joka perii kuva-luokan ja laajentaa tätä niin, että pelaaja on tietoinen sijainnistaan, suunnastaan (nopeudestaan) sekä esimerkiksi nimestään ja hipareistaan.
En kerro, miten edellä mainitut kannattaa toteuttaa, se sinun tulee keksiä itse.
Jos jaksan, niin saatan kirjoittaa jonkin pienen esimerkin. Vastuu asioiden opettelussa on kuitenkin sinulla!
Lisäksi kannattaa opetella std-kirjastoista ainakin seuraavien luokkien käyttö hyvin: merkkijonot (std::string), vektorit (std::vector) [ ja listat (std::list) ]
- osoittimet - http://www.cplusplus.com/doc/tutorial/pointers/
- luokat (ja perintä) - http://www.cplusplus.com/doc/tutorial/classes/ LUE LOPUT SAMAN KATEGORIAN KOHDAT!
Itse lähtisin toteuttamaan tuota ongelmaasi seuraavalla tavalla:
1) Luokka "kuva", joka sisältää halutun kuvan latauksen tiedostonimen perusteella ja piirto-operaatiot.
2) Panoksille luokka "Ammus", joka perii kuva-luokan ja laajentaa tätä niin, että panos on tietoinen omasta sijainnistaan, suunnastaan ja nopeudestaan ja näin ollen osaa itse päivittää paikkansa ja piirtää itsensä.
3) Pelaajalle luokka "Pelihahmo", joka perii kuva-luokan ja laajentaa tätä niin, että pelaaja on tietoinen sijainnistaan, suunnastaan (nopeudestaan) sekä esimerkiksi nimestään ja hipareistaan.
En kerro, miten edellä mainitut kannattaa toteuttaa, se sinun tulee keksiä itse.
Jos jaksan, niin saatan kirjoittaa jonkin pienen esimerkin. Vastuu asioiden opettelussa on kuitenkin sinulla!
Lisäksi kannattaa opetella std-kirjastoista ainakin seuraavien luokkien käyttö hyvin: merkkijonot (std::string), vektorit (std::vector) [ ja listat (std::list) ]