[C++] Mijn mini-game werkt niet correct

Pagina: 1
Acties:
  • 40 views sinds 30-01-2008

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01-2025
Voor school moet ik een zelf verzonnen console game-pje maken en ik heb dit dus bedacht.(zie code en compile eventueel als je wilt)

Echter er is iets mis...
De Bij bevindt zich altijd in vakje 3,3, maar als ik 3,3 als coordinaten invoer dan verandert het vakje
gewoon in een 1, terwijl dit een 8 moet worden...ik dacht dat ik dit toch duidelijk in de functie kenbaar heb gemaakt.

En dan een 2e probleem.
Namelijk, vakje 3,4 is altijd 15!
En als ik dan als coordinaten 3,4 invoer dan crashed de game.
Waarom is vakje 3,4 altijd 15? Ik heb cArray[3][4] toch op 0 gezet?
Omdat dit ook vakje nr15 is lijkt het wel alsof de variabele i in de 15e for-loop in vakje 3,4 verschijnt.
En i is op het moment dat vakje 3,4 wordt ge-cout precies 15.
Maar waarom?

Hoe kan ik deze 2 problemen oplossen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>

using namespace std;

void tekenHetHoninggraatVeld(int xBij, int yBij, int cInvoerX, int cInvoerY); 


main()
{   
    cout << "Het BijenSpel" << endl;

      cout << "      ,-.  " << endl; 
      cout << "      `_/  " << endl; 
      cout << "    >{|||}    " << "Vind de Bij in zijn honinggraat!" << endl;
      cout << "      / `  " << endl; 
      cout << "      `-^  " << endl << endl << endl;
      cout << "Typ de x en y coordinaten in van een vakje in de honinggraat om het te openen." << endl;
      cout << "Men begint met 15 punten." << endl;
      cout << "Voor elk vakje dat men opent waar de Bij zich niet bevindt gaat er 1 punt af." << endl;
      cout << "De bedoeling is om een zo hoog mogelijke score over te houden." << endl;
      cout << "Een 0 is een ongeopend vakje, een 1 is een geopend vakje zonder Bij." << endl;
      cout << "En een 8-vakje is een vakje met de Bij erin...deze moet je dus vinden!" << endl;
      cout << "Kies je vakjes dus tactisch!" << endl << endl;
    
    int xCoorBij = 3;
    int yCoorBij = 3;

    int gebruikersInvoerX;
    int gebruikersInvoerY;
    
    cout << "Typ een X-Coordinaat in, kies uit 1 t/m 4: ";
    cin >> gebruikersInvoerX;
    cout << endl << "Typ een Y-Coordinaat in, kies uit 1 t/m 4: ";
    cin >> gebruikersInvoerY;

    cout << "   1  2  3  4" << endl; //print de horizontale x-coordinaten boven de grid
    
    tekenHetHoninggraatVeld(xCoorBij, yCoorBij, gebruikersInvoerX, gebruikersInvoerY);
}


void tekenHetHoninggraatVeld(int xBij, int yBij, int cInvoerX, int cInvoerY)  //Deze functie tekent het honingsgraatveld en gebruikt de invoer van de gebruiker om een geopend vakje te tonen
{   
    int cArray[4][4]={0};

    int x = 1;
    int y = 1;

    cArray[1][1] = 0; cArray[2][1] = 0; cArray[3][1] = 0; cArray[4][1] = 0;
    cArray[1][2] = 0; cArray[2][2] = 0; cArray[3][2] = 0; cArray[4][2] = 0;
    cArray[1][3] = 0; cArray[2][3] = 0; cArray[3][3] = 0; cArray[4][3] = 0;
    cArray[1][4] = 0; cArray[2][4] = 0; cArray[3][4] = 0; cArray[4][4] = 0;
    
    for(int i = 1; i <= 16; i++)
    {
        

        if(x==1 && y==1)
            cout << "1 ";
        if(x==1 && y==2)
            cout << "2 ";
        if(x==1 && y==3)
            cout << "3 ";
        if(x==1 && y==4)
            cout << "4 ";
        
        //cArray[x][y] = 0;

        if((xBij == cInvoerX) && (yBij == cInvoerY))
        {
            cArray[xBij][yBij] = 8;
            cout << endl << "Je hebt de bij gevonden!" << endl;
            cout << "Je hebt " << (15 - i) << "punten over." << endl << endl;
        }
        else
        {
            cArray[cInvoerX][cInvoerY] = 1;
        }
        
        
        cout << "|" << cArray[x][y] << "|";
        

        if(x==4 && y<5)
        {
            cout << endl;
            y++;
        }
        
        x++;

        if(x==5 && y<5)
        {
            x = 1;                      
        }
                    
    }
}



ps: De game is nog niet af, immers de Bij zit altijd in 3,3...maar dit wil ik later bepaald laten worden door rand().
Maar zoals het nu opgezet is het vo0r testdoeleinden, om die bugs eruit te krijgen.

[ Voor 41% gewijzigd door Arcane Apex op 25-01-2005 00:54 ]


  • Semyon
  • Registratie: April 2001
  • Laatst online: 22:58
Als je
int cArray[4][4]={0};
declareert gaat dat van [0][0] tot [3][3] al je coordinaten zitten er dus een naast. Als je vervolgens aan [4][4] zit je aan geheugen buiten je bereik.

Verder kan dit:
if(x==1 && y==1)
cout << "1 ";
if(x==1 && y==2)
cout << "2 ";
if(x==1 && y==3)
cout << "3 ";
if(x==1 && y==4)
cout << "4 ";

natuurlijk veel handig met
if (x==1) cout << y;

Weet niet of er nog meer fouten in zitten, maar begin eens met je array indices goed te zetten :)

Only when it is dark enough, can you see the stars


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Probleem 1: Je output je spul voordat je de waarde in 8 verandert. Niet slim. 8)7
Probleem 2: Je declareert een array als [4][4], wat wil zeggen dat de indexen van 0 tot 3 lopen, niet van 1 tot 4. array[3][4] bestaat dus niet, zoals Semyon al zegt. :)

Normaal gesproken is het ook niet zo dat je hier krap 100 regels aan code neerplempt in de hoop dat wij het voor je oplossen. Debuggen is iets wat je zelf mag doen. Je kan beter proberen het probleem te isoleren, en alleen relevante code te posten. In dit geval had je om te beginnen de main funtie al weg kunnen laten. :)

[ Voor 45% gewijzigd door NMe op 25-01-2005 01:08 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01-2025
Bedankt Semyon en -NME-,

Dat heeft me al een stuk op weg geholpen.

[ Voor 14% gewijzigd door Arcane Apex op 25-01-2005 01:10 ]


  • Akerboom
  • Registratie: Juni 2001
  • Laatst online: 25-04 19:35

Akerboom

Codito, ergo sum

Met "int cArray[4][4]={0};" zet je alle 16 elementen al op 0 en hoef je dat niet nog eens achteraf handmatig te doen...

my 2 cents

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01-2025
Bedankt voor alle hulp in deze thread.
Ik heb de mini-game af en hij werkt nu naar behoren.
Hopelijk genoeg voor een voldoende.

Thanks!

[ Voor 130% gewijzigd door Arcane Apex op 25-01-2005 04:20 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:05

Creepy

Tactical Espionage Splatterer

-NMe- schreef op dinsdag 25 januari 2005 @ 01:05:

Normaal gesproken is het ook niet zo dat je hier krap 100 regels aan code neerplempt in de hoop dat wij het voor je oplossen. Debuggen is iets wat je zelf mag doen. Je kan beter proberen het probleem te isoleren, en alleen relevante code te posten. In dit geval had je om te beginnen de main funtie al weg kunnen laten. :)
[mosterd na de maaltijd]
Lees ook P&W FAQ - Leer **** debuggen!! en P&W FAQ - De "quickstart" eens door ;)

Als je in staat bent om een mini game te maken in C dan mag je toch wel veronderstellen dat je zelf in staat bent om te zien dat je array declaratie/indexerig niet helemaal klopt? :)
[/mosterd na de maaltijd]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.