/*
functions:
main >> output instructions
input P1 name, p2 name
loop{-clearscreen-
output board, compute scores
P1 or P2 turn, output scores
input placement of next piece
check coordinates and flip away}
loop ends when a)P1_score+P2_score=100
b)checker declares there are no moves left
c)Q is entered instead of proper coordinates
ask if player wants another game
checker >> determine whether coordinate input
is valid - within board, adjacent to
appropriate pieces
if input is Q: ask whether player wishes to quit
flipper >> checks horizontally, vertically and diagonally
for pieces that ought to be flipped and flips them
->might be split in three: fliph, flipv and flipd
arrays:
board[11][11] -> play area is 10X10.
row[0] and col[0]for displaying coordinates.
Pl_name[2][8] -> luxury. Player names, 7 char max.
coords[3] -> coordinates for next piece
switches:
quit -> if yes: quit, no: continue, default: ask again;
best be in a loop (for default)
play_again -> if yes: another game, no: exit program
default: ask again (also looped)
*/
#include<iostream>
#include<cstdio>
using namespace std;
char board[11][11];
char Pl_name[2][8];
char coords[3];
int a,b,i,j,k,x,y,z;
char row,col,pl,op;
int check,turn;
void flipH(int rw, int cl);
void flipV(int rw, int cl);
void flipD(int rw, int cl);
void coordconv (char r, char c);
int main(){
//initiate board. first row values were placed manually
//as i don't know how to loop chars
board[0][0]='.';board[0][1]='A';board[0][2]='B';board[0][3]='C';
board[0][4]='D';board[0][5]='E';board[0][6]='F';board[0][7]='G';
board[0][8]='H';board[0][9]='I';board[0][10]='J';board[1][0]='1';
board[2][0]='2';board[3][0]='3';board[4][0]='4';board[5][0]='5';
board[6][0]='6';board[7][0]='7';board[8][0]='8';board[9][0]='9';
board[10][0]='0';
for(i=1;i<11;i++){
for(j=1;j<11;j++){
board[i][j]='_';
}}
board[5][6]='X';board[6][5]='X';
board[5][5]='O';board[6][6]='O';
//game loop starts here. z is max number of turns. 100 is total
//number of pieces available for play
for(z=0;z<100;z++){
//clearscreen. duh. para malinis ang dos
system("cls");
//odd or even z determines whether it is P1 or P2's turn
//odd:player(pl) is X, opponent(op) is O eve:vice versa.
if(z%2==0){pl='X'; op='O'; cout<<"\nPlayer1's turn(X)\n";}
else {pl='O';op='X'; cout<<"\nPlayer2's turn(O)\n";}
//outputs number of turns so far
cout<<"\nTurn: "<<z+1<<endl;
//outputs board
for(i=0;i<11;i++){
for(j=0;j<11;j++){
cout<<board[i][j]<<" ";
}
cout<<endl<<endl;
}
//string coords, because I insist upon using letters for columns
//coords input is looped, to make sure they don't mess up the game
check=1;
do{
cout<<"Enter coordinates(9B,4A,etc.): ";
gets(coords);
row=coords[0];
col=coords[1];
//coordcheck function converts string coordinates to integers
coordconv(row,col);
}while(check==1);
//flipV(x,y);
if(board[x+1][y]==op || board[x-1][y]==op){
flipV(x,y);}
if(board[x][y+1]==op || board[x][y-1]==op){
flipH(x,y);}
if(board[x+1][y+1]==op||board[x-1][y-1]==op){
flipD(x,y);}
if(board[x+1][y-1]==op||board[x-1][y+1]==op){
flipD(x,y);}
}
system("pause");
return 0;
}
void coordconv (char r, char c){
bool adj, end;
int opcount, endcoord;
switch (row) {
case '1':
x=1;check=0;break;
case '2':
x=2;check=0;break;
case '3':
x=3;check=0;break;
case '4':
x=4;check=0;break;
case '5':
x=5;check=0;break;
case '6':
x=6;check=0;break;
case '7':
x=7;check=0;break;
case '8':
x=8;check=0;break;
case '9':
x=9;check=0;break;
case '0':
x=10;check=0;break;
default:
cout<<"invalid input"<<endl;
check=1;
}
switch(col){
case 'A':
y=1;check=0;break;
case 'B':
y=2;check=0;break;
case 'C':
y=3;check=0;break;
case 'D':
y=4;check=0;break;
case 'E':
y=5;check=0;break;
case 'F':
y=6;check=0;break;
case 'G':
y=7;check=0;break;
case 'H':
y=8;check=0;break;
case 'I':
y=9;check=0;break;
case 'J':
y=10;check=0;break;
default:
cout<<"invalid input"<<endl;
check=1;
}
//following lines must determine whether entered coordinates comply
//with othello rules. <s>will</s> MUST code these later.
}
void flipV(int rw, int cl){
int l,m,n;
bool adj=false, end=false;
int opcount, endcoord;
char dir;
//vertcheck
if(board[x+1][y]==op){
adj=true;
for(l=1;l<(11-x);l++){
if(board[x+l][y]==pl){
end=true;
dir='u';
endcoord=(x+l);
//cout<<"\nendcoord= "<<endcoord<<endl;
break;}
}}
if(board[x-1][y]==op){
adj=true;
for(l=1;l<x;l++){
if(board[x-l][y]==pl){
end=true;
dir='d';
endcoord=(x-l);
break;}
}}
//flip time!
if(adj==true && end==true){
if(dir='u'){
for(m=1;x+m<endcoord;m++){
board[x+m][y]=pl;
board[x][y]=pl;}}
if(dir='d') {
cout<<"\ncheckpt 1\n";
for(n=1;x-n>endcoord;n++){
cout<<"\ncheckpt2\n";
board[x-n][y]=pl;
board[x][y]=pl;}
}
}//end flipH
//system("pause");
}
void flipH(int rw, int cl){
int l,m,n;
bool adj=false, end=false;
int opcount, endcoord;
char dir;
//horzcheck
//if((board[x][y+1]==op)||(board[x][y-1]==op))adj=true;
if(board[x][y+1]==op){
adj=true;
for(l=1;l<(11-x);l++){
if(board[x][y+l]==pl){
end=true;
dir='r';
endcoord=(y+l);
cout<<"\nendcoord= "<<endcoord<<endl;
break;}
}}
if(board[x][y-1]==op){
adj=true;
for(l=1;l<y;l++){
if(board[x][y-l]==pl){
end=true;
dir='l';
endcoord=(y-l);
break;}
}}
//flip time!
if(adj==true && end==true){
if (dir=='r'){
for(m=1;y+m<endcoord;m++){
board[x][y+m]=pl;
board[x][y]=pl;
}}
if (dir=='l'){
cout<<"\ncheckpt1b\n";
for(n=1;y-n>endcoord;n++){
board[x][y-n]=pl;
board[x][y]=pl;}
}
}
//system("pause");
}
void flipD(int rw, int cl){
int l,m,n,o;
bool adj=false, end=false;
int opcount,endrow,endcol;
char dir;
//diagcheck
if(board[x+1][y+1]==op){cout<<"\ncheckpt1\n";
adj=true;
for(l=1,m=1;m<(11-x)&&l<(11-y);l++,m++){
if(board[x+m][y+l]==pl){
end=true;
dir='4';
endcol=(y+l);
endrow=(x+m);
break;}
}}
if(board[x-1][y-1]==op){
adj=true;
for(m=1,l=1;(m<x)&&(l<y);l++,m++){
if(board[x-m][y-l]==pl){
end=true;
dir='2';
endcol=(y-l);
endrow=(x-m);
break;}
}}
if(board[x+1][y-1]==op){cout<<"\ncheckpt2\n";
adj=true;
for(m=1,l=1;(m<(11-x))&&(l<y);l++,m++){
if(board[x+m][y-l]==pl){
end=true;
dir='3';
endcol=(y-l);
endrow=(x+m);
break;}
}}
if(board[x-1][y+1]==op){
adj=true;
for(m=1,l=1;(m<x)&&(l<(11-y));l++,m++){
if(board[x-m][y+l]==pl){
end=true;
dir='1';
endcol=(y+l);
endrow=(x-m);
break;}
}}
//flip time!
if(adj==true && end==true){
if (dir=='4'){cout<<"\ncheckpt1B\n";
for(l=1,m=1;(y+l<endcol)&&(x+m<endrow);l++,m++){
board[x+m][y+l]=pl;
board[x][y]=pl;
}}
if (dir=='3'){cout<<"\ncheckpt2B\n";
for(l=1,m=1;(y-l>endcol)&&(x+m<endrow);l++,m++){
board[x+m][y-l]=pl;
board[x][y]=pl;
}}
if (dir=='2'){
for(l=1,m=1;(y-l>endcol)&&(x-m>endrow);l++,m++){
board[x-m][y-l]=pl;
board[x][y]=pl;
}}
if (dir=='1'){
for(l=1,m=1;(y+l<endcol)&&(x-m>endrow);l++,m++){
board[x-m][y+l]=pl;
board[x][y]=pl;
}}
}
//system("pause");
}
there seems to be an error for my reversi code