| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
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 ![]() |
|
#2
|
||||
|
||||
|
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 |
|
#3
|
|||
|
|||
|
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 |
|
#4
|
|||
|
|||
|
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 |
|
#5
|
|||
|
|||
|
k i found out and can b-con do me a favor and delete thus furom
|
![]() |
| Viewing: Dev Articles Community Forums > Programming > C/C++ Help > a game |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|