We need to adjust a code and implement a structure for an assignment and I\'m no
ID: 3540507 • Letter: W
Question
We need to adjust a code and implement a structure for an assignment and I'm not understanding it. The directions are included in the code with //
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Create a structure that stores a player's name (up to 20 characters) and score (# of wins)
// Call the struct Player
void info(void) {
printf(" insertname assignmentnumber insertdate ");
}
void display(char pos[3][3]) {
char c;
int k;
fflush(stdin);
printf(" COL 0 1 2 ");
for(k = 0; k < 3; k++) {
printf(" ROW ------------- ");
printf(" | | | | ");
printf(" %d | %c | %c | %c | ", k, pos[k][0], pos[k][1], pos[k][2]);
printf(" | | | | ");
}
printf(" ------------- ");
printf("Press Enter to Continue...");
scanf("%c", &c);
fflush(stdin);
}
void move(int m, char pos[3][3], Player * p1, Player * p2, FILE *f) {
char piece;
int row, col;
do {
if(m % 2 == 0) {
piece = 'X';
// Print the Player 1's name
}
else {
piece = 'O';
// Print the Player 2's name
}
printf(", enter your move (row 0 - 2) (col 0 - 2): ");
fscanf(f, "%d %d", &row, &col);
printf("%d %d ", row, col);
} while(!isValid(row, col, pos));
pos[row][col] = piece;
}
int isValid(int r, int c, char pos[3][3]) {
if((r < 0) || (r > 2) || (c < 0) || (c > 2) ) {
printf("Illegal Move ");
return 0;
}
else if(pos[r][c] != ' ') {
printf("Illegal Move ");
return 0;
}
return 1;
}
int winner(char pos[3][3], Player * p1, Player * p2) {
int k, p;
char win = ' ', str[4];
for(k = 0; k < 3; k++) {
strncpy(str, pos[k], 3);
str[3] = '';
if(!strcmp(str, "XXX") || !strcmp(str, "OOO")) {
win = pos[k][0];
break;
}
if((pos[0][k] != ' ') && (pos[0][k] == pos[1][k]) && (pos[0][k] == pos[2][k])) {
win = pos[0][k];
break;
}
}
if((win == ' ') && (pos[0][0] != ' ') && (pos[0][0] == pos[1][1]) && (pos[0][0] == pos[2][2])) {
win = pos[0][0];
}
if((win == ' ') && (pos[0][2] != ' ') && (pos[0][2] == pos[1][1]) && (pos[0][2] == pos[2][0])) {
win = pos[0][2];
}
if(win == 'X') {
// Print the Player 1's name
// Increment Player 1's score
return 1;
}
else if(win == 'O') {
// Print the Player 2's name
// Increment Player 2's score
return 1;
}
return 0;
}
int main(int argc, char ** argv) {
int i, k, loop = 0, won = 0;
char c, ch, pos[3][3], datafile[20], player1Name[20], player2Name[20];
FILE * ifp;
printf("Enter Player 1's name: ");
gets(player1Name);
printf("Enter Player 2's name: ");
gets(player2Name);
// Declare two structs of type Player, p1 and p2.
// Initialize the score value of each Player
// Copy the name of each Player in the player's structure name,
// the first player's name is in player1Name and
// the second player's name is in player2Name
for(i = 0; i < 3; i++) {
for(k = 0; k < 3; k++) {
pos[i][k] = ' ';
}
}
info();
printf("What is the name of the data file? ");
gets(datafile);
ifp = fopen(datafile, "r");
fflush(stdin);
display(pos);
while(loop < 9) {
// call the function move, pass in the:
// loop number,
// positions of the board,
// two players, and
// file pointer ifp
// move(loop, pos, ___, ___, ifp);
display(pos);
loop++;
// call the function winner, pass in the:
// positions of the board,
// two players
// place the result into won
// won = winner(pos, ___, ___);
if(won || loop == 9) {
if(!won) {
printf(" There is no winner, you have tied! ");
}
printf("Would you like to play again (y or n)? ");
fscanf(ifp, "%c", &ch);
while(ch == ' ') {
fscanf(ifp, "%c", &ch);
}
printf("%c ", ch);
if(ch == 'y') {
loop = 0;
for(i = 0; i < 3; i++) {
for(k = 0; k < 3; k++) {
pos[i][k] = ' ';
}
}
display(pos);
}
else {
fclose(ifp);
// Print the name of the both Players and their total scores
loop = 9;
}
}
}
}
Explanation / Answer
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.