- #1
charmedbeauty
- 271
- 0
Homework Statement
I am trying to flip tokens in my reverse code and I'm a little stuck
so far I have a function that checks directions but I don't know how to implement it
my code is below.
Homework Equations
The Attempt at a Solution
Code:
/reversi.c
//Samuel Gilbert
//Date Due:12/10
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 8
#define INVALID_MOVES {[a][1],[h][8],[h][1],[a][8]}
#define WHITE 1
#define BLACK 2
#define CROSS 3
#define EMPTY 0
#define END_GAME 4
void arraytwo(int arraytwo[][MAX_SIZE], int array[][MAX_SIZE]);
void changetoken(int arraytwo[][MAX_SIZE], int turn, int countjPlus,//
int countiPlus, int countiMinus, int countjMinus);
int nexturn(int array[][MAX_SIZE], int turn);
void updateboard(int array[][MAX_SIZE]);
int playingame(int array[][MAX_SIZE], int turn);
int main(){
//initial board
int array[MAX_SIZE][MAX_SIZE];
int i,j;
int turn = BLACK;
printf(" abcdefgh\n");
printf(" ----------\n");
for(i=0;i<MAX_SIZE;i++){
putchar(i+'1');
putchar('|');
for(j=0;j<MAX_SIZE;j++){
if((i==0 && j==0) || (i==0 && j==7) || (i==7 && j==0) || (i==7 && j==7)){
printf("X");
array[i][j] = CROSS;
}
else if((i==3 && j==3) || (i==4 &&j==4)){
printf("w");
array[i][j] = WHITE;
} else if((i==3 && j==4) || (i==4 && j==3)){
printf("b");
array[i][j] = BLACK;
} else {
array[i][j] = EMPTY;
printf(".");
}
}
putchar('|');
printf("\n");
}
printf(" ----------\n");
int k = 0;
while (k < 100) {
turn = playingame(array, turn);
}
return 0;
}
int playingame(int array[][MAX_SIZE],int turn){
// char input[2];
int i=0;
int j=0;
if((turn == 2)){
printf("it is Black's turn to move\n");
}
else{
printf("whites turn\n");
}
char letter=0;
int number=0;
printf("Enter your move: \n");
letter = getchar();
number = getchar();
getchar();
j = letter -'a';
i = number - '0'-1;
//int counti = i;
//int countj = j;
if((array[i][j] == CROSS && turn == 2)){
printf("error\n");
turn = 2;
}
else if((array[i][j] == CROSS && turn == 1)){
printf("error\n");
turn = 1;
}
if((array[i][j] == EMPTY && turn == 2 )){
array[i][j] = BLACK;
updateboard(array);
turn = nexturn(array, turn);
}
else if((array[i][j] == EMPTY && turn == 1)){
array[i][j] = WHITE;
updateboard(array);
turn = nexturn(array, turn);
}
return turn;
}
void updateboard(int array[][MAX_SIZE]){
printf(" abcdefgh\n");
printf(" ----------\n");
int i,j;
for(i=0;i<MAX_SIZE;i++){
putchar(i+'1');
putchar('|');
for(j=0;j<MAX_SIZE;j++){
if(array[i][j] == CROSS){
printf("X");
}
else if((array[i][j] == WHITE)){
printf("w");
}
else if((array[i][j] == BLACK)){
printf("b");
}
else {
array[i][j] = EMPTY;
printf(".");
}
}
putchar('|');
printf("\n");
}
printf(" ----------\n");
}
int nexturn(int array[][MAX_SIZE], int turn){
if(turn == 2){
turn = 1;
}
else{
turn = 2;
}
printf("%d\n", turn);
return turn;
playingame(array, turn);
}
void arraytwo(int arraytwo[][MAX_SIZE], int array[][MAX_SIZE]){
//int arraytwo[MAX_SIZE][MAX_SIZE];
int i,j;
for(i=0;i<MAX_SIZE;i++){
for(j=0;j<MAX_SIZE;j++){
arraytwo[i][j] = array[i][j];
}
}
printf("%d\n", arraytwo[i][j]);
}
void changetoken(int array[][MAX_SIZE],int x2, int y2, int x1, int y1){
int x,y,i;
int changeboard = array[x1][y1];
//down
if(y1==y2 && x1>x2){
for(x=0;x<size;x++){
for(y=0;y<size;y++){
if(y==y1 && x>x2 && x<x1){
array[x][y] = changeboard;
}
}
}
}
//up
if(y1==y2 && x2>x1){
for(x=0;x<MAX_SIZE;x++){
for(y=0;y<MAX_SIZE;y++){
if(y==y1 && x<x2 && x>x1){
board[x][y]=changeboard;
}
}
}
}
//left
if(x1==x2 && y1>y2){
for(x=0;x<size;x++){
for(y=0;y<size;y++){
if(x==x1 && y>y2 && y<y1){
board[x][y]=changeboard;
}
}
}
//right
if(x1==x2 && y2>y1){
for(x=0;x<size;x++){
for(y=0;y<size;y++){
if(x==x1 && y>y1 && y<y2){
board[x][y]=changeboard;
}
}
}
}
//left up
if(x1>x2 && y1>y2){
for(i=1;x2+i<x1;i++){
board[x2+i][y2+i]=changeboard;
}
}
//right down
if(x2>x1 && y2>y1){
for(i=1;x1+i<x2;i++){
board[x1+i][y1+i]=changeboard;
}
}
//left down
if(x2>x1 && y1>y2){
for(i=1;x1+i<x2;i++){
board[x2-i][y2+i]=changeboard;
}
}
//right up
if(x1>x2 && y2>y1){
for(i=1;x2+i<x1;i++){
board[x1-i][y1+i]=changeboard;
}
}
}
void checkmoveinsidearray(int turn,int number,int letter, int array[][MAX_SIZE])
{
if(array[i][j] == EMPTY){
return 0;
}
if(letter > 7 || letter<0 || number>7 || number<0){
return 0;
}
}
int flipifneeded(){
int i,j;
if(turn==2 && array[i][j]== WHITE){
i = i + deltax;
j = j + deltay;
else if(turn ==1 && array[i][j] == BLACK){
i = i + deltax;
j = j +deltay;
I just need to implement a function that checks to see if the current token is black or white then checks in all directions to see if the token beside it is of opposite colour and flips until the same colour token is seen.
for a more detailed info of the game see
http://en.wikipedia.org/wiki/Reversi
Thanks for any help.