Gå til innhold

Er det noen som kan fortelle meg hvorfor dette programmet ik


Anbefalte innlegg

Code:

#include <iostream.h>

int main()
{
cout << "Hello World!n";
return 0;
}

 

..hvis du dobbeltklikker på dette programmet så bare blinker det, fordi det kjøres så fort. Man kan selvfølgelig unngå det ved å legge på en cin >> på slutten, men hvordan skal/kan man EGENTLIG gjøre det?

 

Jeg kan klasser og, til en viss grad. Ikke arv og slik enda, men de litt mer grunnleggende tingene kan jeg. Jeg lærer fra Teach yourself C++ in 21 days, og har kommet til Arrays. Akkurat nå programmerer jeg mest utenom, da.

 

Installerte forresten SuSE Linux 8.0 i dag.. Forelska, jeg! :grin:

 

Mvh.,

Myubi

Lenke til kommentar
Videoannonse
Annonse

Hvis du inkluderer conio.h kan du bruke getch(), slik at brukeren må trykke en tast for å fortsette. Og btw, hvis du putter en variabel av typen char inne i parentesene, lagres taste-trykket i variabelen. Jeg tror dette skal fungere i linux også. Forresten så lurer jeg på om du av og til må bruke cout.flush() før getch(), for at ting du har printet til skjermen med cout skal vises før du har trykket på tasten.

 

Jeg har så vidt startet på AI-greiene, forresten. Jeg har idéen klar, men jeg skal bare prøve å få det til i praksis først, ettersom det er noe komplisert å forklare.

 

Mvh.

THX 1138

 

 

[ Denne Melding var redigert av: THX 1138 på 2002-07-04 18:08 ]

Lenke til kommentar

Hva er det du ikke kan?? *imponert* :wink:

Redigert:

Funka som bare det, det der (GET CHharacter'n)! Skal sjekke det i Linux nå.

 

Sjekka ut KDeveloper 2.1 (IDE i Linux). Virka veldig bra! Har fortsatt windows på denne maskina her, forresten (for den er ikke min).

 

_________________

Linux inside.

 

[ Denne Melding var redigert av: Myubi på 2002-07-04 19:47 ]

Lenke til kommentar

Halla! Bare en kjapp progress update:

 

Har laget en greie som gir de tomme feltene poeng etter hvor lurt det er å sette en brikke i dem. Foreløpig får feltene bare poeng etter hvor mye dette vil blokkere for motspilleren, men jeg tror det blir ganske enkelt å gjøre noen små modifikasjoner slik at de også for poeng ettersom hvor strategisk lurt det er å plassere en brikke der, med tanke på å få tre på rad. Når dette er gjort, blir det enkelt å lage noe som velger det feltet med høyest poengsum.

Quote:


Hva er det du ikke kan?? *imponert* :wink:


Takk, takk :smile:

Nå er vel dette egentlig ikke så veldig imponerende, i og med at AI-en (hvis det kan kalles AI, da) ikke trenger å tenke mange trekk framover. Faktisk tenker den ikke noen trekk framover (bortsett fra ett da selvsagt). Jeg har bare plusset på noen ekstra poeng for de feltene som det er lurt å velge når det ikke er noen felter du velge, for å hindre at motstanderen får tre på rad. Det er noen få situasjoner der du kan få to muligheter til å få tre på rad samtidig, og det er disse situasjonene ekstrapoengene er ment å forebygge.

 

Redigert:

Skumleste noen av postene, og kom til å tenke på at du i sitatet ovenfor sannsynligvis ikke mente AI-en, ettersom du ikke visste noe særlig om den ennå :roll:

 

Nå skal jeg bare varme meg en pizza, og så tenker jeg ikke det tar så veldig lang tid før det er ferdig. Hvis du har lyst på en utfordring da, kan jeg poste en mer detaljert beskrivelse av hvordan AI-en virker, i stedet for å poste hele kildekoden. Men det velger du selv.

 

Mvh.

THX 1138

 

 

[ Denne Melding var redigert av: THX 1138 på 2002-07-04 22:52 ]

Lenke til kommentar

It works!!! :grin:

 

Jeg poster likegodt hele kildekoden nå, så du også kan prøve det. Jeg kommer til å poste en ganske detaljert beskrivelse av AI-en senere.

 

Btw, kildekoden er vanvittig messy akkurat nå. AI-delen er omtrent ikke kommentert, og jeg har ikke prøvd å "rydde opp" i koden ennå. Det er sannsynligvis mye rart der...

Resten av kildekoden er den du postet da du akkurat var ferdig med spillet, bortsett fra at jeg la til en liten system("cls") et sted, husker ikke hvor, og denne virker bare etter at begge spillerne har gjort sine trekk. Aner ikke hvorfor :razz:, men har ikke prøvd å finne det ut heller. Jeg tror forresten at det er en funksjon der også, som jeg pastet inn fordi du lurte på hvorfor den ikke virket. Dessuten er det sannsynligvis mange for-løkker der du må paste på en int foran variabelen i, for å kunne kompilere herligheten med Borland-greiene dine. Men uansett, det virker! Du kan bare spille som rød, og du begynner hver gang, men dette skulle være enkelt å fikse. Du kan forresten heller ikke velge multiplayer lenger. Jaja, disse tingene regner jeg med at du får til selv. Når jeg får postet beskrivelsen (ikke forvent den de aller nærmeste timene) kan du jo se om du får til å programmere AI-delen selv. Det kan jo til og med hende at du finner ut en bedre måte å gjøre det på.

 

Du får ha det gøy med å spille mot PC-en! Du kommer aldri til å vinne, men det kan jo hende du får til å tape! :razz:

 

Mvh.

THX 1138

 

Redigert:

Oisann, glemte visst kildekoden :grin:

Code:

// --------------------------------------------------------
// Tic tac toe
//
// Author: Lars ... (LS)
// Created (Start): 01/07/2002 (LS)
// Created (Finish): 02/07/2002 (LS)
//
// Version: 1.0
//
// A simple Tic tac toe-game.
// --------------------------------------------------------

#include <iostream.h>
#include <windows.h>
#include <conio.h>



// Enumerations

enum Piece { none, blue, red }; // Enumerates pieces, to tell
// what is on a square by it's
// value.

int TestIfFull(Piece gameBoard[3][3]);




// Main thing
int main()
{

// Initializes gameBoard with all empty squares.
Piece gameBoard[3][3] = { none,none,none, none,none,none, none,none,none };


// Other initializations
int tempX, tempY; // Co-ords input

// The AI uses these
int allPoints[3][3];
int attackPoints[3][3];
int defendPoints[3][3];
int verticalPoints[3][3];
int horizontalPoints[3][3];
int diagonal1Points[3][3];
int diagonal2Points[3][3];
int multiplier, highest;

// Various flags
int run = TRUE, turn = red, error = FALSE;
int Winner = none;
int finished = 0, inRow = 0;


// Instructions
cout << "nWelcome to Tic tac toe!nn";
cout << "There are two players, blue and red.n";
cout << "You are playing as them both (or you n";
cout << "could be joined by a friend, consider itn";
cout << "multiplayer nn";

cout << "Note that: n";
cout << "0 = No piecen";
cout << "1 = Blue piecen";
cout << "2 = Red piecenn";

// Gameplay
while (run)
{
system("cls");

finished = TestIfFull(gameBoard);


// Ends game if board is full
if (0 == finished)
{
run = FALSE;
cout << "nBoard: n";
for (int i = 0; i < 3; i++) // Prints board to screen
{
for (int j = 0; j < 3; j++)
cout << gameBoard[i][j] << " ";
cout << "n";
}

cout << "Draw!n";
break;
}
finished = 0;


// CHECKING FOR WINNER
// Checks the combinations, to see if
// there are three equal-coloured pieces in a row.

// Red winner?
for (int i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (red == gameBoard[i][j])
inRow++;
}

if (3 == inRow)
{
Winner = red;
break;
}
inRow = 0;
}

for (i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (red == gameBoard[i][j])
inRow++;
}

if (3 == inRow)
{
Winner = red;
break;
}
inRow = 0;
}

// First diagonal
for (i = 0; i < 3; i++)
{
if (red == gameBoard[i][i])
inRow++;
}

if (3 == inRow)
Winner = red;

inRow = 0;


// Second diagonal
for (i = 0; i < 3; i++)
{
if (red == gameBoard[i][2-i])
inRow++;
}

if (3 == inRow)
Winner = red;

inRow = 0;


// Blue winner?
for (i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[i][j])
inRow++;
}

if (3 == inRow)
{
Winner = blue;
break;
}
inRow = 0;
}

for (i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[j][i])
inRow++;
}

if (3 == inRow)
{
Winner = blue;
break;
}
inRow = 0;
}

// First diagonal
for (i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[j][j])
inRow++;
}

if (3 == inRow)
{
Winner = blue;
break;
}
inRow = 0;
}

// Second diagonal
for (i = 0; i < 3; i++)
{

for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[j][2-j])
inRow++;
}

if (3 == inRow)
{
Winner = blue;
break;
}
inRow = 0;
}



// Checks the winner-flag, and if it is blue or red it will end the game.
if (blue == Winner)
{
cout << "nBoard: n";
for (int i = 0; i < 3; i++) // Prints board to screen
{
for (int j = 0; j < 3; j++)
cout << gameBoard[i][j] << " ";
cout << "n";
}

cout << "Blue wins!n";
break;
}

if (red == Winner)
{
cout << "nBoard: n";
for (int i = 0; i < 3; i++) // Prints board to screen
{
for (int j = 0; j < 3; j++)
cout << gameBoard[i][j] << " ";
cout << "n";
}

cout << "Red wins!n";
break;
}

// END CHECKING FOR WINNER


do // Enter co-ords and check if square is occupied
{
cout << "nBoard: n";
for (int i = 0; i < 3; i++) // Prints board to screen
{
for (int j = 0; j < 3; j++)
cout << gameBoard[i][j] << " ";
cout << "n";
}

if (blue == turn)
{
cout << "nBlue's turn.";

// *****************************************************************************************
// *****************************************************************************************




// Tries to get 3 pieces in row

// BEGIN --------------------------------------------------------------

multiplier = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
horizontalPoints[i][j] = 0;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[i][j])
multiplier++;
if (!gameBoard[i][j])
horizontalPoints[i][j] = 1;
}

if (2 == multiplier)
multiplier = 100;
for (j = 0; j < 3; j++)
{
horizontalPoints[i][j] *= multiplier;
}
multiplier = 0;
}



multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
verticalPoints[i][j] = 0;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (blue == gameBoard[j][i])
multiplier++;
if (!gameBoard[j][i])
verticalPoints[j][i] = 1;
}

if (2 == multiplier)
multiplier = 100;
for (j = 0; j < 3; j++)
{
verticalPoints[j][i] *= multiplier;
}
multiplier = 0;
}






// First diagonal


multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal1Points[i][j] = 0;
}
}


for (i = 0; i < 3; i++)
{
if (blue == gameBoard[i][i])
multiplier++;
if (!gameBoard[i][i])
diagonal1Points[i][i] = 1;
}

if (2 == multiplier)
multiplier = 100;
for (i = 0; i < 3; i++)
{
diagonal1Points[i][i] *= multiplier;
}






// Second diagonal

multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal2Points[i][j] = 0;
}
}


for (i = 0; i < 3; i++)
{
if (blue == gameBoard[i][2-i])
multiplier++;
if (!gameBoard[i][2-i])
diagonal2Points[i][2-i] = 1;
}

if (2 == multiplier)
multiplier = 100;
for (i = 0; i < 3; i++)
{
diagonal2Points[i][2-i] *= multiplier;
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
attackPoints[i][j] = verticalPoints[i][j]
+ horizontalPoints[i][j]
+ diagonal1Points[i][j]
+ diagonal2Points[i][j];
}
}


// END ----------------------------------------------------------------








// Tries to prevent the other player from getting 3 pieces in row

// BEGIN --------------------------------------------------------------

multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
horizontalPoints[i][j] = 0;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (red == gameBoard[i][j])
multiplier++;
if (!gameBoard[i][j])
horizontalPoints[i][j] = 1;
}

if (2 == multiplier)
multiplier = 20;
for (j = 0; j < 3; j++)
{
horizontalPoints[i][j] *= multiplier;
}
multiplier = 0;
}



multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
verticalPoints[i][j] = 0;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (red == gameBoard[j][i])
multiplier++;
if (!gameBoard[j][i])
verticalPoints[j][i] = 1;
}

if (2 == multiplier)
multiplier = 20;
for (j = 0; j < 3; j++)
{
verticalPoints[j][i] *= multiplier;
}
multiplier = 0;
}






// First diagonal


multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal1Points[i][j] = 0;
}
}


for (i = 0; i < 3; i++)
{
if (red == gameBoard[i][i])
multiplier++;
if (!gameBoard[i][i])
diagonal1Points[i][i] = 1;
}

if (2 == multiplier)
multiplier = 20;
for (i = 0; i < 3; i++)
{
diagonal1Points[i][i] *= multiplier;
}






// Second diagonal

multiplier = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal2Points[i][j] = 0;
}
}


for (i = 0; i < 3; i++)
{
if (red == gameBoard[i][2-i])
multiplier++;
if (!gameBoard[i][2-i])
diagonal2Points[i][2-i] = 1;
}

if (2 == multiplier)
multiplier = 20;
for (i = 0; i < 3; i++)
{
diagonal2Points[i][2-i] *= multiplier;
}






for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
defendPoints[i][j] = verticalPoints[i][j]
+ horizontalPoints[i][j]
+ diagonal1Points[i][j]
+ diagonal2Points[i][j];
}
}



// END ----------------------------------------------------------------



// Adds attack points, defend points and bonus points together

for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
allPoints[i][j] = attackPoints[i][j] + defendPoints[i][j];
}
}
// Bonus points
if (allPoints[1][1])
allPoints[1][1] += 2;
if (allPoints[0][0])
allPoints[0][0] += 1;
if (allPoints[0][2])
allPoints[0][2] += 1;
if (allPoints[2][0])
allPoints[2][0] += 1;
if (allPoints[2][2])
allPoints[2][2] += 1;




// Picks the square with the highest score

highest = 0;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (allPoints[i][j] > highest)
{
highest = allPoints[i][j];
tempX = j + 1;
tempY = i + 1;
}
}
}






// *****************************************************************************************
// *****************************************************************************************


}
else
{
cout << "nRed's turn.";
cout << "nEnter co-ords (1-3):n";
cout << "X: ";
cin >> tempX;
cout << "Y: ";
cin >> tempY;
}

if (gameBoard[tempY-1][tempX-1] == red || gameBoard[tempY-1][tempX-1] == blue)
{
error = TRUE;
cout << "This square is occupied!n";
}
else
error = FALSE;
} while (error);

if (tempX > 3 || tempY > 3) // Tests if value is legal. (Exits if not)
{
cout << "Illegal value! Must be 1-3!n";
run = FALSE;
return 0;
}

// Test whose turn it is, place piece accordingly and change turn.
if (blue == turn)
{
gameBoard[tempY-1][tempX-1] = blue;
turn = red;
}
else
{
gameBoard[tempY-1][tempX-1] = red;
turn = blue;
}

}
cout.flush();
getch();
return 0;
}




int TestIfFull(Piece gameBoard[3][3])
{
int finished = 0;
// Testing if board is filled.
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (none == gameBoard[i][j])
finished++;
}
}
return finished;
}

Redigert igjen:

Bare noen skrivefeil i kildekoden. Ikke noe viktig.

 

[ Denne Melding var redigert av: THX 1138 på 2002-07-04 23:29 ]

Lenke til kommentar

Jeg lagde ett lignende spill en gang til Windows, husker jeg. Selve grafikk delen er jo bare en formalitet å få til, men jeg ser at du har gjort tingene litt annerledes enn meg på selve spill siden.

 

Jeg husker også at jeg aldri forstod hvordan man kunne bruke en spillerdefinert rute oppdeling. Ble for mye tull med diagonal sjekkingen. Kanskje du kan prøve å få til dette.

Lenke til kommentar

Nå har jeg forbedret AI-en litt, og lagt den i en egen funksjon. For å kunne bruke denne, må du deklarere tempX og tempX globalt, og dessuten føye til variabelen begin, som sier om det er red eller blue som begynner. Jeg kan dessverre ikke forklare AI-en nå, fordi jeg skal reise på en båttur akkurat nå. Kommer tilbake om 4-5 dager. Hvis du trenger mer hjelp, Myubi, bør du spørre på http://www.cprogramming.com. Der får du nok mer hjelp enn her.

Uansett, her er den nye AI-funksjonen:

Code:

void ai(Piece gameBoard[3][3], int begin, int turn)
{

// **********************************************************************
// **********************************************************************

int allPoints[3][3];
int attackPoints[3][3];
int defendPoints[3][3];
int verticalPoints[3][3];
int horizontalPoints[3][3];
int diagonal1Points[3][3];
int diagonal2Points[3][3];
int multiplier, highest, computer, player;


computer = turn;
if (computer == red)
player = blue;
else
player = red;



// Tries to get 3 pieces in row

// BEGIN --------------------------------------------------------------

multiplier = 1;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
horizontalPoints[i][j] = 1;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (computer == gameBoard[i][j])
multiplier++;
if (player == gameBoard[i][j])
{
multiplier = 1;
break;
}
if (!gameBoard[i][j])
horizontalPoints[i][j] += 1;
}

if (3 == multiplier)
multiplier = 100;
for (j = 0; j < 3; j++)
{
horizontalPoints[i][j] *= multiplier;
}
multiplier = 1;
}



multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
verticalPoints[i][j] = 1;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (computer == gameBoard[j][i])
multiplier++;
if (player == gameBoard[j][i])
{
multiplier = 1;
break;
}
if (!gameBoard[j][i])
verticalPoints[j][i] += 1;
}

if (3 == multiplier)
multiplier = 100;
for (j = 0; j < 3; j++)
{
verticalPoints[j][i] *= multiplier;
}
multiplier = 1;
}






// First diagonal


multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal1Points[i][j] = 1;
}
}


for (i = 0; i < 3; i++)
{
if (computer == gameBoard[i][i])
multiplier++;
if (player == gameBoard[i][i])
{
multiplier = 1;
break;
}
if (!gameBoard[i][i])
diagonal1Points[i][i] += 1;
}

if (3 == multiplier)
multiplier = 100;
for (i = 0; i < 3; i++)
{
diagonal1Points[i][i] *= multiplier;
}






// Second diagonal

multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal2Points[i][j] = 1;
}
}


for (i = 0; i < 3; i++)
{
if (computer == gameBoard[i][2-i])
multiplier++;
if (player == gameBoard[i][2-i])
{
multiplier = 1;
break;
}
if (!gameBoard[i][2-i])
diagonal2Points[i][2-i] += 1;
}

if (3 == multiplier)
multiplier = 100;
for (i = 0; i < 3; i++)
{
diagonal2Points[i][2-i] *= multiplier;
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
attackPoints[i][j] = verticalPoints[i][j]
+ horizontalPoints[i][j]
+ diagonal1Points[i][j]
+ diagonal2Points[i][j];
}
}


// END ----------------------------------------------------------------








// Tries to prevent the other player from getting 3 pieces in row

// BEGIN --------------------------------------------------------------

multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
horizontalPoints[i][j] = 1;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (player == gameBoard[i][j])
multiplier++;
if (computer == gameBoard[i][j])
{
multiplier = 1;
break;
}
if (!gameBoard[i][j])
horizontalPoints[i][j] += 1;
}

if (3 == multiplier)
multiplier = 20;
else
multiplier = 1;
for (j = 0; j < 3; j++)
{
horizontalPoints[i][j] *= multiplier;
}
multiplier = 1;
}



multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
verticalPoints[i][j] = 1;
}
}



for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (player == gameBoard[j][i])
multiplier++;
if (computer == gameBoard[j][i])
{
multiplier = 1;
break;
}
if (!gameBoard[j][i])
verticalPoints[j][i] += 1;
}

if (3 == multiplier)
multiplier = 20;
else
multiplier = 1;
for (j = 0; j < 3; j++)
{
verticalPoints[j][i] *= multiplier;
}
multiplier = 1;
}






// First diagonal


multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal1Points[i][j] = 1;
}
}


for (i = 0; i < 3; i++)
{
if (player == gameBoard[i][i])
multiplier++;
if (computer == gameBoard[i][i])
{
multiplier = 1;
break;
}
if (!gameBoard[i][i])
diagonal1Points[i][i] += 1;
}

if (3 == multiplier)
multiplier = 20;
else
multiplier = 1;
for (i = 0; i < 3; i++)
{
diagonal1Points[i][i] *= multiplier;
}






// Second diagonal

multiplier = 1;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
diagonal2Points[i][j] = 1;
}
}


for (i = 0; i < 3; i++)
{
if (player == gameBoard[i][2-i])
multiplier++;
if (computer == gameBoard[i][2-i])
{
multiplier = 1;
break;
}
if (!gameBoard[i][2-i])
diagonal2Points[i][2-i] += 1;
}

if (3 == multiplier)
multiplier = 20;
else
multiplier = 1;
for (i = 0; i < 3; i++)
{
diagonal2Points[i][2-i] *= multiplier;
}






for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
defendPoints[i][j] = verticalPoints[i][j]
+ horizontalPoints[i][j]
+ diagonal1Points[i][j]
+ diagonal2Points[i][j];
}
}



// END ----------------------------------------------------------------



// Adds attack points, defend points and bonus points together

for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
allPoints[i][j] = attackPoints[i][j] + defendPoints[i][j];
}
}
// Bonus points
if (begin == blue)
{
if (!gameBoard[1][1])
allPoints[1][1] += 2;
if (!gameBoard[0][1])
allPoints[0][1] += 1;
if (!gameBoard[1][0])
allPoints[1][0] += 1;
if (!gameBoard[1][2])
allPoints[1][2] += 1;
if (!gameBoard[2][1])
allPoints[2][1] += 1;
}
else
{
if (!gameBoard[1][1])
allPoints[1][1] += 2;
if (!gameBoard[0][0])
allPoints[0][0] += 1;
if (!gameBoard[0][2])
allPoints[0][2] += 1;
if (!gameBoard[2][0])
allPoints[2][0] += 1;
if (!gameBoard[2][2])
allPoints[2][2] += 1;
}





// Picks the square with the highest score

highest = 0;
tempX = 2;
tempY = 2;
for (i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (allPoints[i][j] > highest)
{
highest = allPoints[i][j];
tempX = j + 1;
tempY = i + 1;
}
}
}



// **********************************************************************
// **********************************************************************

}

Tar også med en ny funksjon som tegner spilebrettet på en litt annen måte. Enjoy!

Code:

void printBoard(Piece gameBoard[3][3])
{
char ch;

cout << "nn 1 2 3n " << (char)201 << (char)205 << (char)205 << (char)205
<< (char)203 << (char)205 << (char)205 << (char)205 << (char)203 << (char)205
<< (char)205 << (char)205 << (char)187 << "n";
for (int i = 0; i < 3; i++) // Prints board to screen
{
cout << " " << i + 1 << (char)186;
for (int j = 0; j < 3; j++)
{
switch(gameBoard[i][j])
{
case 0:
ch = ' ';
break;
case 1:
ch = 'X';
break;
case 2: ch = 'O';
}
cout << " " << ch << " " << (char)186;
}
if (2 != i)
cout << "n " << (char)204 << (char)205 << (char)205 << (char)205
<< (char)206 << (char)205 << (char)205 << (char)205 << (char)206 << (char)205
<< (char)205 << (char)205<< (char)185 << "n";
else
cout << "n " << (char)200 << (char)205 << (char)205 << (char)205
<< (char)202 << (char)205 << (char)205 << (char)205 << (char)202 << (char)205
<< (char)205 << (char)205<< (char)188 << "n";

}
}

 

Jaja, da sier jeg takk for meg, i hvert fall for de neste 4-5 dagene. God sommerferie!

 

Mvh.

THX 1138

Lenke til kommentar

Heh... Korte posts her?! Link heller til eksterne .c filer eller hva ??

 

Uansett, ser du har en rekke for-looper for å sjekk om noen har vunnet og at du bruker det ifbm med AI'et..

 

Hva med å ha

Code:

int PossibleWins[][6] = {
{ 1,1, 1,2, 1,3 },
{ 2,1, 2,2, 2,3 },
....
{ 1,2, 2,2, 3,3 },
....
}

Altså, en liste av mulige wins som du kan gå igjennom med en for løkke:

 

Code:

// pw = PossibleWins (kortere å skrive)
for( int i = 0; i < ARRAY_ELEMS(pw); i++ ) {
if ( (board[pw[i][0]][pw[i][1] ==
board[pw[i][2]][pw[i][2]) &&
( board[pw[i][3]][pw[i][4] ==
( board[pw[i][5]][pw[i][6] ) ) {
PlayerWins( board[pw[i][0]][pw[i][1]] );
break;
}
}
if ( i == ARRAY_ELEMS(pw) )
NooneWinsNow();

Ellerno? Mye mere kompakt kode.. :smile:

Lenke til kommentar

I'm back :cool:

 

Jeg kom egentlig hjem for to dager siden, men gadd ikke begynne å skrive en beskrivelse av AI-en, slik som jeg lovte, før jeg for et par timer siden, i et inspirert øyeblikk, satte igang. Jeg satte meg da ned i sjefs-stolen min, med en iskald cola og med en playlist som bl.a. inneholdt Mozarts "Requiem", Händels "Messias", Wagners "Ride of The Valkyries" og Beethovens 9. symfoni. Etter å ha sittet og skrevet i nesten 2 timer følte jeg at jeg hadde fått dekket det meste. Jeg hadde dessuten oppdaget et par underfundigheter, som definitivt burde vært gjort på en annen måte. Så trykte jeg på "Send", og ble møtt med meldingen "Fyll inn brukernavn og passord". No problem, tenkte jeg, og trykte på "Back". Jeg fylte inn brukernavnet, trykte på TAB, og skulle akkurat til å fylle inn passordet, da det slo meg.....

Hvor hadde det blitt av meldingen min?!

Jeg har jo glemt brukernavn og passord før, og da var det bare å trykke "Back", og meldingen var der fremdeles. Kan det ha noe med lengden på meldingen å gjøre? Jeg lette forresten igjennom "Temporary Internet Files" i håp om at den kunne være lagret i en eller annen fil der, men neida. Jeg tror nok jeg får skrive et rasende innlegg om dette under "Tilbakemeldinger". Men ikke nå. Akkurat nå er jeg lei av å skrive. Jeg tror derfor jeg setter punktum nøyaktig her. :smile:

 

Mvh.

THX 1138

 

Redigert:

Bare en liten feil med bruk av bold.

 

[ Denne Melding var redigert av: THX 1138 på 2002-07-13 08:10 ]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...