#include “stdafx.h”
#include<iostream>
using namespace std;
#define SPACE ” ”
class JingZiQi
{
char juzhen[3][3];
public:
JingZiQi()
{
juzhen[3][3]={ SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, };
}
void player_move();
void computer_move();
void qipan();
char check();
};
void main()
{
char done;
done=SPACE;
JingZiQi jzq();
cout<<“这是一个井字棋游戏!”<<endl;
cout<<“你即将和电脑对抗!”<<endl;
do
{
jzq.qipan();
jzq.player_move();
done=jzq.check(); /*判断输赢*/
if (done!=SPACE) break;
jzq.computer_move();
done=jzq.check(); /*判断输赢*/
}while(done==SPACE);
if(done==”X”)
cout<<“恭喜你击败了计算机!”<<endl;
else
cout<<“很遗憾,计算机赢了!”<<endl;
jzq.qipan(); /*最后棋盘的情况*/
}
void JingZiQi::player_move() /*玩家下棋的函数*/
{
int x,y;
cout<<“请输入下棋的位置:(如:2 2):”;
cin>>x>>y;
x–;y–;
if (juzhen[x][y]!=SPACE) /*输入无效的下棋位置时,通过递归来再一次下棋*/
{
cout<<“无效的下棋位置,请重试”<<endl;
player_move();
}
else juzhen[x][y]=”X”;
}
void JingZiQi::computer_move() /*计算机下棋的函数*/
{
int t;
char *p;
p=(char*)juzhen;
for (t=0; *p!=SPACE && t<9; ++t) p++;
if (t==9)
{
cout<<“平局”<<endl;
exit(0); /*平局,游戏结束*/
}
else *p=”O”;
}
void JingZiQi::qipan() /*用于输出棋盘的边界*/
{
int t,i;
for (t=0; t<3; t++)
{
cout<<juzhen[t][0]<<“|”<<juzhen[t][1]<<“|”<<juzhen[t][2]<<endl;
if (t!=2)
cout<<“***|***|***”<<endl;
}
cout<<endl;
}
char JingZiQi::check() /*判断输赢的函数*/
{
int t;
char *p;
for (t=0; t<3; t++)
{
p=&juzhen[t][0];
if (*p==*(p+1) && *(p+1)==*(p+2)) return *p; /*行方向3个棋子成一条直线*/
}
for (t=0; t<3; t++)
{
p=&juzhen[0][t];
if (*p==*(p+3) && *(p+3)==*(p+6)) return *p; /*列方向3个棋子成一条直线*/
}
if (juzhen[0][0]==juzhen[1][1] && juzhen[1][1]==juzhen[2][2]) /*右斜方向3个棋子成一条直线*/
return juzhen[0][0];
if (juzhen[0][2]==juzhen[1][1] && juzhen[1][1]==juzhen[2][0]) /*左斜方向3个棋子成一条直线*/
return juzhen[0][2];
return SPACE;
}
—
错误 1 error C2059: 语法错误 : “{”
错误 2 error C2143: 语法错误 : 缺少“;”(在“{”的前面)
错误 3 error C2059: 语法错误 : “}”
错误 4 error C2228: “.qipan”的左边必须有类/结构/联合
错误 5 error C2228: “.player_move”的左边必须有类/结构/联合
错误 6 error C2228: “.check”的左边必须有类/结构/联合
错误 7 error C2228: “.computer_move”的左边必须有类/结构/联合
错误 8 error C2228: “.check”的左边必须有类/结构/联合
错误 9 error C2446: “==”: 没有从“const char *”到“int”的转换
错误 10 error C2040: “==”: “int”与“const char [2]”的间接寻址级别不同
错误 11 error C2228: “.qipan”的左边必须有类/结构/联合
很着急啊,身边又没人帮忙。
#include<iostream>
using namespace std;
#define SPACE ” ”
class JingZiQi
{
char juzhen[3][3];
public:
JingZiQi()
{
juzhen[3][3]={ SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, };
}
void player_move();
void computer_move();
void qipan();
char check();
};
void main()
{
char done;
done=SPACE;
JingZiQi jzq();
cout<<“这是一个井字棋游戏!”<<endl;
cout<<“你即将和电脑对抗!”<<endl;
do
{
jzq.qipan();
jzq.player_move();
done=jzq.check(); /*判断输赢*/
if (done!=SPACE) break;
jzq.computer_move();
done=jzq.check(); /*判断输赢*/
}while(done==SPACE);
if(done==”X”)
cout<<“恭喜你击败了计算机!”<<endl;
else
cout<<“很遗憾,计算机赢了!”<<endl;
jzq.qipan(); /*最后棋盘的情况*/
}
void JingZiQi::player_move() /*玩家下棋的函数*/
{
int x,y;
cout<<“请输入下棋的位置:(如:2 2):”;
cin>>x>>y;
x–;y–;
if (juzhen[x][y]!=SPACE) /*输入无效的下棋位置时,通过递归来再一次下棋*/
{
cout<<“无效的下棋位置,请重试”<<endl;
player_move();
}
else juzhen[x][y]=”X”;
}
void JingZiQi::computer_move() /*计算机下棋的函数*/
{
int t;
char *p;
p=(char*)juzhen;
for (t=0; *p!=SPACE && t<9; ++t) p++;
if (t==9)
{
cout<<“平局”<<endl;
exit(0); /*平局,游戏结束*/
}
else *p=”O”;
}
void JingZiQi::qipan() /*用于输出棋盘的边界*/
{
int t,i;
for (t=0; t<3; t++)
{
cout<<juzhen[t][0]<<“|”<<juzhen[t][1]<<“|”<<juzhen[t][2]<<endl;
if (t!=2)
cout<<“***|***|***”<<endl;
}
cout<<endl;
}
char JingZiQi::check() /*判断输赢的函数*/
{
int t;
char *p;
for (t=0; t<3; t++)
{
p=&juzhen[t][0];
if (*p==*(p+1) && *(p+1)==*(p+2)) return *p; /*行方向3个棋子成一条直线*/
}
for (t=0; t<3; t++)
{
p=&juzhen[0][t];
if (*p==*(p+3) && *(p+3)==*(p+6)) return *p; /*列方向3个棋子成一条直线*/
}
if (juzhen[0][0]==juzhen[1][1] && juzhen[1][1]==juzhen[2][2]) /*右斜方向3个棋子成一条直线*/
return juzhen[0][0];
if (juzhen[0][2]==juzhen[1][1] && juzhen[1][1]==juzhen[2][0]) /*左斜方向3个棋子成一条直线*/
return juzhen[0][2];
return SPACE;
}
—
错误 1 error C2059: 语法错误 : “{”
错误 2 error C2143: 语法错误 : 缺少“;”(在“{”的前面)
错误 3 error C2059: 语法错误 : “}”
错误 4 error C2228: “.qipan”的左边必须有类/结构/联合
错误 5 error C2228: “.player_move”的左边必须有类/结构/联合
错误 6 error C2228: “.check”的左边必须有类/结构/联合
错误 7 error C2228: “.computer_move”的左边必须有类/结构/联合
错误 8 error C2228: “.check”的左边必须有类/结构/联合
错误 9 error C2446: “==”: 没有从“const char *”到“int”的转换
错误 10 error C2040: “==”: “int”与“const char [2]”的间接寻址级别不同
错误 11 error C2228: “.qipan”的左边必须有类/结构/联合
很着急啊,身边又没人帮忙。
解决方案
40
错误 1 error C2059: 语法错误 : “{”
数组除了初始化可以那么复制之外 剩下的是不可以的 此时juzhen[3][3]访问还越界了…..
建议你循环一下赋值 或 用strcpy
错误 2 是原因是定义一个对象是 直接 JingZiQi jzq; 就好了
错误 3 希望你弄明白”x”和”x”的区别 一个是字符串 一个是字符
然后就运行就没有错误了 至于算法的东西你本人考虑吧 附加 改动代码
数组除了初始化可以那么复制之外 剩下的是不可以的 此时juzhen[3][3]访问还越界了…..
建议你循环一下赋值 或 用strcpy
错误 2 是原因是定义一个对象是 直接 JingZiQi jzq; 就好了
错误 3 希望你弄明白”x”和”x”的区别 一个是字符串 一个是字符
然后就运行就没有错误了 至于算法的东西你本人考虑吧 附加 改动代码
#include<iostream> using namespace std; #define SPACE " " class JingZiQi { char juzhen[3][3]; public: JingZiQi() { //juzhen[3][3] = { SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, }; 错误1 for (int i = 0;i<3 ; i++) { for (int j = 0;j<3 ; j++) { juzhen[i][j] = SPACE; } } } void player_move(); void computer_move(); void qipan(); char check(); }; void main() { char done; done=SPACE; JingZiQi jzq; cout<<"这是一个井字棋游戏!"<<endl; cout<<"你即将和电脑对抗!"<<endl; do { jzq.qipan(); jzq.player_move(); done=jzq.check(); /*判断输赢*/ if (done!=SPACE) break; jzq.computer_move(); done=jzq.check(); /*判断输赢*/ }while(done==SPACE); if(done=="X") cout<<"恭喜你击败了计算机!"<<endl; else cout<<"很遗憾,计算机赢了!"<<endl; jzq.qipan(); /*最后棋盘的情况*/ } void JingZiQi::player_move() /*玩家下棋的函数*/ { int x,y; cout<<"请输入下棋的位置:(如:2 2):"; cin>>x>>y; x--;y--; if (juzhen[x][y]!=SPACE) /*输入无效的下棋位置时,通过递归来再一次下棋*/ { cout<<"无效的下棋位置,请重试"<<endl; player_move(); } else juzhen[x][y]="X"; } void JingZiQi::computer_move() /*计算机下棋的函数*/ { int t; char *p; p=(char*)juzhen; for (t=0; *p!=SPACE && t<9; ++t) p++; if (t==9) { cout<<"平局"<<endl; exit(0); /*平局,游戏结束*/ } else *p="O"; } void JingZiQi::qipan() /*用于输出棋盘的边界*/ { int t,i; for (t=0; t<3; t++) { cout<<juzhen[t][0]<<"|"<<juzhen[t][1]<<"|"<<juzhen[t][2]<<endl; if (t!=2) cout<<"***|***|***"<<endl; } cout<<endl; } char JingZiQi::check() /*判断输赢的函数*/ { int t; char *p; for (t=0; t<3; t++) { p=&juzhen[t][0]; if (*p==*(p+1) && *(p+1)==*(p+2)) return *p; /*行方向3个棋子成一条直线*/ } for (t=0; t<3; t++) { p=&juzhen[0][t]; if (*p==*(p+3) && *(p+3)==*(p+6)) return *p; /*列方向3个棋子成一条直线*/ } if (juzhen[0][0]==juzhen[1][1] && juzhen[1][1]==juzhen[2][2]) /*右斜方向3个棋子成一条直线*/ return juzhen[0][0]; if (juzhen[0][2]==juzhen[1][1] && juzhen[1][1]==juzhen[2][0]) /*左斜方向3个棋子成一条直线*/ return juzhen[0][2]; return SPACE; }