/*
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

Recommended Answers

All 4 Replies

What do you need help with?

Um... We're willing to help, but we're not stool pigeons. You actually have to do something yourself first.

Have you attempted any of your own debugging? If so what have you tried and what have you found?

Are you getting compiler errors? What are they?

etc...

i compiled it and it works

but sometimes when i type in the coordinates the output/piece does not show.

Press "F5". Winrar!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.