Probleem met tutorial van joost ronkers

Status
Niet open voor verdere reacties.

michaelvd12

Gebruiker
Lid geworden
30 mei 2008
Berichten
163
Hoi ik ben nu bij blokken en ik krijg het niet voor elkaar om de laaste stap te voltooien

Omdat Kick een parameter van het type Block meekrijgt, moet je Block.h includen. De parameter block kan in deze functie gewijzigd worden, maar de parameter player niet. We maken player dus constant door er het woord const voor te zetten. Neem de declaratie van de functie op in Player.h.

Mijn fout meldingen zijn :

foutmeldingen.png


Ik werk met dev C++

Alvast bedankt ,

Groetjes Michael van Dijk
 
Misschien zou je beter wat code kunnen posten. Mijn helderziendheid begint me in de steek te laten sinds ik de lotto gewonnen heb.
 
meer bepaald de eerste 50 regels van Main.cpp om te beginnen
 
oke donderdag zal ik meer code posten, ik heb nu wel alvast de link van de tutorial

Groetjes Michael van Dijk(ik kan niet eerder bij het project dan donderdag avond ;) )
 
even om te beginnen is dit mijn Main.cpp

Code:
#include <iostream>
#include "Console.h"
#include "Graphics.h"
#include "Player.h"
#include "Movement.h"
#include "Block.h"
#include <windows.h>


using namespace std;

/**
 * De toetsen voor de besturing van Pengo.
 */
 
const int PengoUp    = VK_UP;
const int PengoDown  = VK_DOWN;
const int PengoLeft  = VK_LEFT;
const int PengoRight = VK_RIGHT;
const int PengoStop  = VK_DELETE;
const int PengoStart = VK_END;
const int PengoKick  = VK_SPACE;
const int GameExit   = VK_ESCAPE;
 
 /**
  * Het ASCII-teken dat Pengo voorstelt.
  */
  const char PengoCharacter = '*';
  
  /**
  * De vertraging van de game in miliseconden.
  */
  
  const int GameDelay = 250;
  
  /************************************
       Globale functies 
  ************************************/

int main()
{   
    
    
    // maak blok aan
    Block myBlock = CreateBlock(30, 11);
    myBlock.IsMoving = true;
    myBlock.Direction = Left;
    
 
    
    // maak speler aan
    Player myPlayer = CreatePlayer();
  

    // laat speler Pengo besturen
    
    int myKey;
                        

    do
    {
    
    // vraag huidige tijd op
    
    DWORD myTime = timeGetTime();
    
    while (timeGetTime() < (myTime + GameDelay));
    
    // wacht op een toets
    
    myKey = PeekVirtualKey();
            
    // is er een toets ingedrukt ?
    if (myKey != 0)
    {
                         
        // ja, verwijder toets uit buffer
        GetVirtualKey();
    
    // welke toets is ingedrukt?
    switch (myKey)
    {
    case PengoUp:
	{
		// stel richting in
		myPlayer.Direction = Up;
		myPlayer.IsMoving = true;
	} break;
    case PengoDown:
	{
		// stel richting in
		myPlayer.Direction = Down;
		myPlayer.IsMoving = true;
	} break;
    case PengoLeft:
	{
		// stel richting in
		myPlayer.Direction = Left;
		myPlayer.IsMoving = true;
	} break;
    case PengoRight:
	{
		// stel richting in
		myPlayer.Direction = Right;
		myPlayer.IsMoving = true;
	} break;
	
	case PengoStop:
    {
         // stop Pengo
         myPlayer.IsMoving = false;
    } break;
    
    case PengoStart:
    {
         // start Pengo
         myPlayer.IsMoving = true;
    } break;
    
    case PengoKick:
         {
             // Laat speler schoppen
             Kick(myPlayer, myBlock);
             } break;
}


                    
                }

    // verwijder Pengo van het scherm

    MoveCursor(myPlayer.X, myPlayer.Y);
    cout << " ";
    
    // verwijder het blok van het scherm
    MoveCursor(myBlock.X, myBlock.Y);
    cout << " ";
    
    // verplaats het blok
    MoveBlock(myBlock);
    
    // teken blok
    DrawBlock(myBlock);
     
     // verplaats de speler
     MovePlayer(myPlayer);


                      

 
    // teken Pengo
    MoveCursor(myPlayer.X , myPlayer.Y);
    DrawPlayer(myPlayer);
                
} while (myKey != GameExit);
// wacht op enter    
cout << endl;
system("pause");

return 0;
}
als je andere codes wilt hebben moet je het maar even posten
 
Laatst bewerkt:
Kan je ook nog even de file geven die de 2de foutmelding geeft (die op lijn 16).
Het is op je SS nl niet te zien welke dat is :)
 
Kan je ook nog even de file geven die de 2de foutmelding geeft (die op lijn 16).
Het is op je SS nl niet te zien welke dat is :)

dat is graphics.h :

Code:
#ifndef __GRAPHICS_H__
#define __GRAPHICS_H__

#include "Player.h"

/*********************************
  Globale functies - definities
*********************************/

/**
 * Tekent de speler naar het scherm
 * 
 * @ param         player  De speler die getekend moet worden
 */
 
 void DrawPlayer(const Player& player);
 void DrawBlock(const Block& block);
 #endif
 
Ik vermoed dat je daar nog een include van Block.h mist (in graphics.h dus), aangezien je methode DrawBlock wel een parameter van het type Block neemt, maar dit type ongekend is.
 
Ik vermoed dat je daar nog een include van Block.h mist (in graphics.h dus), aangezien je methode DrawBlock wel een parameter van het type Block neemt, maar dit type ongekend is.

Nee dit is het probleem niet, Maar ik heb de moet al opgegeven en ben nu bezig met een opengl tutorial ;) Dus ik zal de vraag wel op opgelost zetten,

want dit is zon fout waar je nooit achterkomt
 
Even mijn persoonlijke mening uiten:
Moest ik altijd projecten links hebben laten liggen indien ik na een week geen oplossing had gevonden, had ik zo goed als zeker nooit deftig kunnen programmeren, was ik gebuisd geweest voor mijn stage, en word ik bij de helft van de informatica-bedrijven buitengebonjourd.

Als het voor mijn hobby is, gebeurd het ook wel eens dat ik een probleem/project enige tijd laat rusten (tot langer dan een jaar soms :rolleyes: ), maar opgeven hoor je imo echt nog niet te doen.

Jij denkt dat het zo'n fout is waar je nooit achterkomt, maar we hebben ook nog maar enkel het topje van de ijsberg onderzocht.
Indien je alsnog wil weten waar je fout zit, en er dus van kan leren, nodig ik je uit om je code als zip/tarbal beschikbaar te stellen. Ik wil gerust de tijd nemen om er even naar te kijken.
 
Oke, ik heb de code van je project bij mij proberen compileren, wat 4 errors en 1 warning gaf. Ik ben begonnen bij volgende error:

Error: Block.h line 31 `Directions' does not name a type
Directions is gedefiniëerd in Movement.h, maar deze is niet geïnclude. Voeg
Code:
#include "Movement.h"
toe na#define __BLOCK_H__ en voor struct Block en het probleem is opgelost.

Na opnieuw compileren bleven er nog steeds 3 errors en 1 warning over. 1 error ging over Graphics.h, de andere 2 over Graphics.cpp. Aangezien Graphics.h in Graphics.cpp geïnclude wordt, is het mogelijk dat de errors in de cpp het gevolg zijn van die in de headerfile, dus gaan we eerst naar de headerfile kijken.

Error: Graphics.h line 16 expected initializer before "void"
De error zegt dat er iets verwacht wordt voor 'void', hoewel dat de eerste declaratieregel in Graphics.h is... Logisch lijkt dit dus niet, of toch?
Want er is wel degelijk code die voor die void komt, die misschien slecht afgesloten is, waardoor deze foutmelding verschijnt. Graphics.h include namelijk 2 andere bestanden.
De grootste kans om de fout te vinden is in het laatst geïnclude bestand (Block.h), echter ziet het ernaar uit dat alle accolades, haakjes en puntkomma's hier correct zijn. Block.h heeft op zijn beurt ook een include (Movement.h), maar ook deze is in orde.

Dus moeten we het in de include ervoor gaan zoeken, Player.h. En Jawel, de laatste regel in die file is niet goed afgesloten (lijn48). De ; ontbreekt na de declaratie van Kick. Na deze toe te voegen, compileren we opnieuw.

Nu krijgen we 2 errors in Graphics.cpp, waarvan 1 zich opnieuw op de eerste lijn met 'echte code' bevindt. Dus gaan we opnieuw in de laatst geïnclude header kijken (Graphics.h) en ook daar zien we dat er een ; aan het einde van de laatste lijn ontbreekt (lijn 18)

Verbeteren en compileren geven nog 1 error en warning, die beiden over lijn 144 gaan in Main.cpp, en alletwee over MoveBlock. In de eerste plaats dienen we naar de error te kijken.
Error: Main.cpp line 144`MoveBlock' was not declared in this scope
Dit wil zeggen dat de compiler MoveBlock niet kent binnen de context waarin het gebruikt wordt. Wat niet zo onlogisch is, aangezien je de functie niet kenbaar hebt gemaakt :p

De functie MoveBlock staat wel in Block.cpp, maar niet in Block.h. Je bent waarschijnlijk iets te snel over deze regel van de tutorial gevlogen:
tutorial zei:
Nu nog de functie MoveBlock die het blok ook echt verplaatst. Vergeet niet de functie declaratie op te nemen in Block.h.

Dus in Block.h moet je volgende regel nog toevoegen (bvb na de declaratie van CreateBlock):
Code:
void MoveBlock(Block& block);

Compileer en Run ;)
 
Oke, ik heb de code van je project bij mij proberen compileren, wat 4 errors en 1 warning gaf. Ik ben begonnen bij volgende error:

Error: Block.h line 31 `Directions' does not name a type
Directions is gedefiniëerd in Movement.h, maar deze is niet geïnclude. Voeg
Code:
#include "Movement.h"
toe na#define __BLOCK_H__ en voor struct Block en het probleem is opgelost.

Na opnieuw compileren bleven er nog steeds 3 errors en 1 warning over. 1 error ging over Graphics.h, de andere 2 over Graphics.cpp. Aangezien Graphics.h in Graphics.cpp geïnclude wordt, is het mogelijk dat de errors in de cpp het gevolg zijn van die in de headerfile, dus gaan we eerst naar de headerfile kijken.

Error: Graphics.h line 16 expected initializer before "void"
De error zegt dat er iets verwacht wordt voor 'void', hoewel dat de eerste declaratieregel in Graphics.h is... Logisch lijkt dit dus niet, of toch?
Want er is wel degelijk code die voor die void komt, die misschien slecht afgesloten is, waardoor deze foutmelding verschijnt. Graphics.h include namelijk 2 andere bestanden.
De grootste kans om de fout te vinden is in het laatst geïnclude bestand (Block.h), echter ziet het ernaar uit dat alle accolades, haakjes en puntkomma's hier correct zijn. Block.h heeft op zijn beurt ook een include (Movement.h), maar ook deze is in orde.

Dus moeten we het in de include ervoor gaan zoeken, Player.h. En Jawel, de laatste regel in die file is niet goed afgesloten (lijn48). De ; ontbreekt na de declaratie van Kick. Na deze toe te voegen, compileren we opnieuw.

Nu krijgen we 2 errors in Graphics.cpp, waarvan 1 zich opnieuw op de eerste lijn met 'echte code' bevindt. Dus gaan we opnieuw in de laatst geïnclude header kijken (Graphics.h) en ook daar zien we dat er een ; aan het einde van de laatste lijn ontbreekt (lijn 18)

Verbeteren en compileren geven nog 1 error en warning, die beiden over lijn 144 gaan in Main.cpp, en alletwee over MoveBlock. In de eerste plaats dienen we naar de error te kijken.
Error: Main.cpp line 144`MoveBlock' was not declared in this scope
Dit wil zeggen dat de compiler MoveBlock niet kent binnen de context waarin het gebruikt wordt. Wat niet zo onlogisch is, aangezien je de functie niet kenbaar hebt gemaakt :p

De functie MoveBlock staat wel in Block.cpp, maar niet in Block.h. Je bent waarschijnlijk iets te snel over deze regel van de tutorial gevlogen:

Dus in Block.h moet je volgende regel nog toevoegen (bvb na de declaratie van CreateBlock):
Code:
void MoveBlock(Block& block);

Compileer en Run ;)


idd, hij start nu op ja , maar de werking is nog niet correct en geeft bij mij nog een warning aan , zou je voor mij dit ook op kunnen lossen ?

de warning is : no newline at end of file ( in de console.cpp die ik dus gewoon geincluded heb in het project maar niet zelf geschreven ;))
 
de warning is : no newline at end of file ( in de console.cpp die ik dus gewoon geincluded heb in het project maar niet zelf geschreven ;))

Letterlijk vertaald staat er: console.cpp heeft geen lege lijn op het einde van het bestand. Dit heeft te maken met een of andere afspraak rond de coderingsstandaarden en compilerinterpretaties.

Gewoon console.cpp openen, helemaal op het einde van de file gaan staan, op enter duwen, en opslaan :thumb:
 
Ik heb nog steeds fouten in de game.

niet compiler fouten,
maar fouten in het spel zelf zoals in
de code die jij hebt komen er 2 blokken,
en beweegt er een en de andere blijft staan,

nu hebt ik het voorelkaar gekregen er een weg
te halen ,

maar nu heb ik nog een bewegende en
in het begin draw die het niet naar het scherm,

alleen als ik op een pijltjes toets druk.

Groetjes Michael van Dijk
 
Het enige wat ik gedaan heb is de fouten uit jouw code gehaald.

Ik heb nu echter even de tutorial doorgelezen met jouw verbeterde code aan de hand, en zie dat je enkel stappen bent vergeten.
Zo wordt in de 2de les gezegd dat de code om een speler te verplaatsen naar Graphics.cpp moet verplaatst worden, maar dat heb jij niet gedaan. Ook hebben zij een waarde voor als Pengo stilstaat (const char PengoCharacterHold = 4;), opnieuw iets wat bij jou ontbreekt.

Evenzo staat in les 3 (waar jij zit) dat het tekenen van een Block in Graphics.cpp gebeurt, niet in Block.cpp, waar het bij jou staat.

Als je de tutorial niet goed doorneemt en stappen overslaat, is het ook niet zo verwonderlijk dat je een ander, incorrect, resultaat krijgt :rolleyes:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan