2014-02-05 79 views
0
#include "stdafx.h" 
#include <list> 
#include <iostream> 
#include <string> 
using namespace std; 

class Canvas 
{ 
public: 
    void CleanCanvas(Canvas * Canvas); 
    int canvas[10][10]; 
    void setCoords(int X,int Y,bool run); 
    bool Win(Canvas * Canvas,string * WinningPlayer); 
}CANVAS; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    string coords; 
    string temp; 
    int X,Y; 
    bool flag = true; 
    bool run = false; 
    string WinningPlayer = ""; 
    system("color 02"); 
    printf("------------------------------//TIC-TAC-TOE//------------------------\n\n\n\n\n"); 
    printf("   ***********************************************   \n\n\n"); 
    printf("Example: player1- 3,3 to put a mark on 3 line of the 3 column\n\n\n\n\n\n"); 
    CANVAS.CleanCanvas((Canvas*)&CANVAS.canvas); 
    cin.get(); 
    while(flag) 
    { 
     printf("player1 make the mov: "); 
     cin >> coords; 
     X = atoi((char *)coords.at(0)); 
     Y = atoi((char *)coords.at(2)); 
     if(CANVAS.canvas[X][Y] != 0) 
     { 
      printf("Coords alrady taken...set new"); 
      cin >> coords; 
      X = coords.at(1); 
      Y = coords.at(3); 
     } 
     run = false; 
     CANVAS.setCoords(X,Y,run); 
     if(CANVAS.Win((Canvas*)&CANVAS.canvas,&WinningPlayer) == true) 
     { 
      printf("%s Win",WinningPlayer); 
      flag = false; 
     } 

     printf("player2 make the mov: "); 
     cin >> coords; 
     X = coords.at(1); 
     Y = coords.at(3); 
     if(CANVAS.canvas[X][Y] != 0) 
     { 
      printf("Coords alrady taken...set new"); 
      X = coords.at(1); 
      Y = coords.at(3); 
     } 

    } 

    cin.get(); 
    return 0; 

} 

void Canvas::setCoords(int X,int Y,bool run) 
{ 
    if(run == false) 
    { 
     CANVAS.canvas[X][Y] = 1; 
    }else 
    { 
     CANVAS.canvas[X][Y] = 2; 
    } 
} 

void Canvas::CleanCanvas(Canvas * Canvas) 
{ 
    for (int i = 0; i <= 3; i++) 
    { 
     for(int a = 0; a <= 3; a++) 
     { 
      Canvas->canvas[i][a] = 0; 
     } 
    } 
} 

bool Canvas::Win(Canvas * Canvas,string * WinningPlayer) 
{ 
    int count = 0; 
    for(int i = 0; i <= 3; i++) 
    { 
     for(int a = 0; a <= 3; a++) 
     { 
      switch(Canvas->canvas[i][a]) 
      { 
      case 1: count +=1; 
       break; 
      case 2: count *=2 + 1; 
       break; 
      } 
      if(count == 9) 
      { 
       WinningPlayer = (string *)"player2"; 
       return true; 
      }else if (count == 3) 
      { 
       WinningPlayer = (string *)"player1"; 
       return true; 
      } 
     } 
    } 
} 

上面的代码给我一个访问冲突,我看到来自C++访问冲突的atoi()函数

X = atoi((char *)coords.at(0)); 
Y = atoi((char *)coords.at(2)); 

我试过在temporany变量投coords.at但没有工作 不要看代码,因为它只是一个镜头,所以它不会处理异常... 我需要帮助找出真正的箴言是什么......谢谢!

+6

C风格的演员只能导致黑暗的一面。 –

回答

2

coords.at(0)返回char,而不是char*。尝试首先解析你的std :: string,将每个数字转换为char*,所以你使用atoi