[c++/opengl] dammen

Pagina: 1
Acties:
  • 176 views sinds 30-01-2008
  • Reageer

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

Topicstarter
Hallo allemaal

Nu de kerstvakantie eraan komt en ik een groot fan van het spel dammen ben dacht ik van laat ik er maar eens zelf eentje maken: als Microsoft het kan, kan ik het ook >:)

Nu is het programmeren van het spel zelf niet zo een groot probleem maar het bedenken ervan is toch ietsje lastiger dan ik dacht.

Ik ben redelijk bekend met C++, OpenGL, ed., maar heb nog nooit echt een 'spel' geprogrammeerd.

Mijn doel is om een beetje (/meer) bekend te raken met zaken als OpenGL, sockets (jaja, ben van plan om network-play toe te voegen :p), en het leukste van alles: A.I!

Als jij een damspel zou ontwerpen, wat voor zaken zou jij dan zo een beetje in je achterhoofd houden? Bijvoorbeeld het gebruik van een bepaalde datastructuur om de huidige spelsituatie in op te slaan (trees/linked-lists/?), of zal een simpele 2d-array genoeg zijn?

In principe is dit een beetje een open vraag. Dus barst maar los :)

Alvast bedankt

ps./ot.:
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
#include <iostream.h>
#include <string.h>

const int MAX_X = 3;
const int MAX_Y = 3;

// prototype
void print (int& bord[][]);

int main(int argc, char* argv[]) {
    int bord[MAX_X][MAX_Y];
    
    // initialize array with 0's
    memset ((void*) bord, 0, sizeof(bord));
    
    print (bord);   

    return 0;
}

void print(int& bord[][]) {
    for (int i = 0; i < MAX_X; i++) {
        for (int j = 0; j < MAX_Y; j++) {
            cout << bord[i][j] << " ";
        }
        cout << endl;
    } 
}

Waarom kan ik hier bord** niet meegeven aan print als reference? Vergeef me deze RTFM vraag, want op de plek waar ik nu zit heb ik simpelweg geen FM :+

Verwijderd

Tsja, een damspel :-)

Ikke heb ooit is een paar artikelen gedownd over het schrijven van de AI voor een schaakspel.

Daar sloegen ze voor 1 vakje bv dingen op als: bezet of niet, welke stukken kunnen er allemaal komen, waar kan je allemaal komen vanaf dat plekje. En daar gingen ze dan mee redeneren.

Dat is gelukkig met een damspel alweer een stuk simpeler :-)

Ik geloof dat die serie op gamedev.net staat. Moet je daar maar is goed zoeken..

Verwijderd

Op zaterdag 22 december 2001 15:28 schreef Scheermesje het volgende:
Tsja, een damspel :-)

Ikke heb ooit is een paar artikelen gedownd over het schrijven van de AI voor een schaakspel.

Daar sloegen ze voor 1 vakje bv dingen op als: bezet of niet, welke stukken kunnen er allemaal komen, waar kan je allemaal komen vanaf dat plekje. En daar gingen ze dan mee redeneren.

Dat is gelukkig met een damspel alweer een stuk simpeler :-)

Ik geloof dat die serie op gamedev.net staat. Moet je daar maar is goed zoeken..
http://www.gamedev.net/reference/articles/article1014.asp
http://www.gamedev.net/reference/articles/article1046.asp
http://www.gamedev.net/reference/articles/article1126.asp
http://www.gamedev.net/reference/articles/article1171.asp
http://www.gamedev.net/reference/articles/article1197.asp
http://www.gamedev.net/reference/articles/article1208.asp

Hier is de 6-delige serie van hoe je een schaakspel moet maken

Verwijderd

Dubbelpost :(

Verwijderd

Op zaterdag 22 december 2001 15:17 schreef stylee het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <string.h>

const int MAX_X = 3;
const int MAX_Y = 3;

// prototype
void print (int& bord[][]);

int main(int argc, char* argv[]) {
    int bord[MAX_X][MAX_Y];
    
    // initialize array with 0's
    memset ((void*) bord, 0, sizeof(bord));
Dit gaat niet goed, bord is een verzameling ints. beter is:
memset(int **)bord, 0, MAX_X * MAX_Y * sizeof(int));
code:
1
    print (bord);
Ik ben geen human c compiler, maar volgens mij geef je hier bord by value mee. Lijkt me niet praktisch.
Waarom kan ik hier bord** niet meegeven aan print als reference? Vergeef me deze RTFM vraag, want op de plek waar ik nu zit heb ik simpelweg geen FM :+
Wellicht omdat je beter kunt doen:

int *bord;

bord = (int *)malloc(MAX_X * MAX_Y * sizeof(int));

print (bord);

en dan in je print functie header:

print ( int *bord)
{
}

benadering bord[2,4] -> bord[2 * MAX_X + 4]; (waarbij 2,4 al indices waren in een 0 based array)