C/C++ Help
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
 
User Name:
Password:
Remember me
 
Go Back   Dev Articles Community ForumsProgrammingC/C++ Help

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Display Modes
 
Unread Dev Articles Community Forums Sponsor:
  #1  
Old August 7th, 2005, 02:49 PM
BloodlustShaman BloodlustShaman is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: in earth
Posts: 176 BloodlustShaman User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 Days 12 h 9 m 3 sec
Reputation Power: 4
Send a message via Yahoo to BloodlustShaman
a game

heres the game tic tac toe it does everything right and finally i fixed the problem i had with this program earlier so here is the code have fun i hope u have fun as i did
Code:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

//global constants
const char X = 'X';
const char O = 'O';
const char EMPTY = ' ';
const char TIE = 'T';
const char NO_ONE = 'N';



//function prototypes
void instructions();
char askYesNo(string question);
int askNumber(string question, int high, int low = 0);
char humanPiece();
char opponent(char piece);
void displayBoard(const vector<char>& board);
char winner(const vector<char>& board);
bool isLegal(const vector <char>& board, int move);
int humanMove(const vector <char>& board, char human);
int computerMove(vector<char> board, char computer);
void announceWinner(char winner, char computer, char human);

//main function

int main()
{
int move;
const int NUM_SQUARES = 9;
vector<char> board(NUM_SQUARES, EMPTY);

instructions();
char human = humanPiece();
char computer = opponent(human);
char turn = X;
displayBoard(board);

while (winner(board) == NO_ONE)
{
if (turn == human)
{
move = humanMove(board, human);
board[move] = human;
}
else
{
move = computerMove(board, computer);
board[move] = computer;
}
displayBoard(board);
turn = opponent(turn);
}
announceWinner(winner(board), computer, human);

return 0;  //Note: might put something else
}

void instructions()
{
cout<<"Welcome to the ultimate man-machine showdown:Tic-Tac-Toe.\n";
cout<<"-where human brain is pit against silicon processor.\n\n";

cout<<"Make your move known by entering a number. 0 - 8. The number\n";
cout<<"corresponds to the desired board position, as illustrated:\n\n";


cout<< "   0 | 1 | 2\n";
cout<< "   ---------\n";
cout<< "   3 | 4 | 5\n";
cout<< "   ---------\n";
cout<< "   6 | 7 | 8\n\n";

cout<<"Prepare yourself, human. The battle is about to begin.\n\n";
}

char askYesNo(string question)
{
char response;
do
{
cout<< question << " (y/n): ";
cin >> response;
} while (response != 'y' && response != 'n');

return response;
}

int askNumber(string question, int high, int low)
{
int number;
do
{
cout<< question << " (" << low << " - " << high << "): ";
cin>> number;
} while (number > high || number < low);

return number;
}


char humanPiece()
{
char go_first = askYesNo("Do you require the first move?");
if (go_first == 'y')
{
cout<< "\nThen take the first move. You will need it.\n";
return X;
}
else
{
cout<<"\nYour bravery will be your undoing... I will go first.\n";
return O;
}

}

char opponent(char piece)
{
if (piece == X)
return O;
else
return X;
}

void displayBoard(const vector<char>& board)
{
cout<<"\n\t" << board[0] << " | " << board[1] << " | " << board[2];
cout<< "\n\t" << "------";
cout<<"\n\t" << board[3] << " | " << board[4] << " | " << board[5];
cout<< "\n\t" << "------";
cout<<"\n\t" << board[6] << " | " << board[7] << " | " << board[8];
cout<<"\n\n";
}

char winner(const vector<char>& board)
{
//all possible winning rows
const int WINNING_ROWS[8][3] = { {0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0 , 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}
};

const int TOTAL_ROWS = 8;

//if any  winning row has three values that are the same (and not EMPTY),
//then we have a winner
for(int row = 0; row < TOTAL_ROWS; ++row)
{
if ( (board[WINNING_ROWS[row][0]] != EMPTY) &&
(board[WINNING_ROWS[row][0]] == board[WINNING_ROWS[row][1]]) && (board[WINNING_ROWS[row][1]] == board[WINNING_ROWS[row][2]]) )
{
return board[WINNING_ROWS[row][0]];
}

}

//since nobody has won, check for a tie (no empty sqaures left)

if (count(board.begin(), board.end(), EMPTY) == 0)
return TIE;

//since nobody has won and it isn't a tie, the game ain't over
return NO_ONE;
}

inline bool isLegal(int move, const vector<char>& board)
{
return (board[move] == EMPTY);
}

int humanMove(const vector<char>& board, char human)
{
int move = askNumber("Where will you move?", (board.size() - 1));
while (!isLegal(move, board))
{
cout<< "\nThat square is already occupied, foolish human.\n";
move = askNumber("Where will you move?", (board.size() -1));
}
cout<< "Fine...\n";
return move;
}

int computerMove(vector<char> board, char computer)
{
cout<<"I shall take square number ";

//if computer can win on next move, make that move
for(int move = 0; move < board.size(); ++move)
{
if (isLegal(move, board))
{
board[move] = computer;
if (winner(board) == computer)
{
cout<< move << endl;
return move;
}
//done checking this move, undo it
board[move] = EMPTY;
}
}


//if human can win on next move, block that move
char human = opponent(computer);

for(int move = 0; move < board.size(); ++move)
{
if (isLegal(move, board))
{
board[move] = human;
if (winner(board) == human)
{
cout<< move << endl;
return move;
}
//done checking this move,undo it
board[move] = EMPTY;
}
}

//the best moves to make, in order
const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
//since no one can win on next move, pick best open square
for (int i = 0; i < board.size(); ++i)
{
int move = BEST_MOVES[i];
if (isLegal(move, board))
{
cout<< move << endl;
return move;
}
}
}
void announceWinner(char winner, char computer, char human)
{
if (winner == computer)
{
cout<< winner << "'s won!\n";
cout<< "As I predicted human, I am triumphant once more -- proof\n";
cout<< " that computers are superior to humans in all regards.\n";
}
else if (winner == human)
{
cout<< winner << " 's won!\n";
cout<< "No, no! It cannot be! Somehow you tricked me, human.\n";
cout<< "But never again I, the computer, so swear it!\n";
}

else
{
cout<< "It's a tie\n";
cout<< "You were most lucky human, and somehow managed to tie me.\n";
cout<< "Celebrate... for this is the best you will ever achieve.\n";
}
fseek(stdin,0L,SEEK_END);
cin.get();
}


so yeah it does everything it has to do which makes my happy but as i book i read it says try to remove all warnings you see and i did got some warning but after the 3rd compiled it showed me no warnings (strange but true) plz say if u got warning if u do try comiling it again it took my 3 times then no warnings hapened well have fun
(to B-Con)- haha see i did make a freaking program without ur freakin help or anybody else well not really cause u did showed me the pause function so i thank u for that

Reply With Quote
  #2  
Old August 7th, 2005, 08:55 PM
Geo.Garnett's Avatar
Geo.Garnett Geo.Garnett is offline
Registered Loser
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: Retardation Nation...
Posts: 347 Geo.Garnett User rank is Private First Class (20 - 50 Reputation Level)Geo.Garnett User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 4 Days 3 h 13 m 45 sec
Reputation Power: 4
Send a message via AIM to Geo.Garnett
TrY ThiS On FoR SizE

I have that same program in the book I am reading, C++ programming by Dirk Henkins although slightly different very much the same. mine is a basic program that teaches the basics of using arrays and pointers yours is slightly different and a little easier to understand. So now write a program that is of your own creation, from scratch. That's a real challenge, not one that is basically from a book.... If you are interested try re-writing this code. I will give you the entire "class" and you finish the rest, then I will be impressed =Þ
Code:
#include <iostream>
#include <string>
using namespace std;//introduces namespace

enum SquareState{blank = ' ',x = 'X', o = 'O'};

class gameBoard
{
private:
const int WIDTH;
const int HEIGHT;
int* GameBoard;//Pointer
public;
gamBoard():WIDTH(3),HEIGHT(3)
{
gameboard = new int[9]//refers to free store memory
for (int i = 0; i < 9; i++)
*(GameBoard + i)= blank;
}//constructor
~gameBoard() {delete[] Gameboard;}//destructor
void setX(int h, int w);//set up game board..
void set0(int h, int w);
bool isTaken(int h, int w);
SquareState isLine();//Defines how the game is played
//example:
//if(*GameBoard==X && *(GameBoard +1)==X && 
// *(GameBoard +2)==X) return X;
void draw();
};


This is a basic tic tac toe game that two people can play rather then playing against the computer. Try building the rest of this, just a challenge, you said you wanted some help finding practice programms. SO, here ya go =Þ
I will give ya tips if you need them, but try and do it all by yourself(and I mean try =Þ). Go through your book and read about arrays[] and pointer, that should help.
If there are flaws in this code some one let me know...
OH, Ya you might have to include other libraries considering you use Borland, but I don't think so, I use Dev-C++ so that's all I have to include.. OH ya, and hurry up its do on friday LOL

Reply With Quote
  #3  
Old August 8th, 2005, 06:00 PM
BloodlustShaman BloodlustShaman is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: in earth
Posts: 176 BloodlustShaman User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 Days 12 h 9 m 3 sec
Reputation Power: 4
Send a message via Yahoo to BloodlustShaman
wow yeah ill probably do it but first i will copy a code to do jackblack then do my littile game from nothing like u said then ill do this challenge k and ill tell u when i am goin to start on this challenge so u can time me! k

Reply With Quote
  #4  
Old August 12th, 2005, 10:26 PM
BloodlustShaman BloodlustShaman is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: in earth
Posts: 176 BloodlustShaman User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 Days 12 h 9 m 3 sec
Reputation Power: 4
Send a message via Yahoo to BloodlustShaman
k lookin at this code to understand everything!! and i mean everything in the code then i look at this part of the code
Code:
 int askNumber(string question, int high, int low = 0)
 


and in the book it semi explains it
heres what i understand
int askNumber (string question) but i dont know what int high means , but i know what int low = 0 means
someone plz explain cause my trting to make a original program but first i want to understand this WHOLE code word by word

Reply With Quote
  #5  
Old August 12th, 2005, 11:46 PM
BloodlustShaman BloodlustShaman is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: in earth
Posts: 176 BloodlustShaman User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 Days 12 h 9 m 3 sec
Reputation Power: 4
Send a message via Yahoo to BloodlustShaman
k i found out and can b-con do me a favor and delete thus furom

Reply With Quote
Reply

Viewing: Dev Articles Community ForumsProgrammingC/C++ Help > a game


Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump


Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 





© 2003-2008 by Developer Shed. All rights reserved. DS Cluster 6 hosted by Hostway