十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
很简单用二维字符数组就行了
10年积累的网站建设、成都网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有相城免费网站建设让你可以放心的选择与我们合作。
#includeiostream
using namespace std;
int main(){
int k=0;
char a[5][5];
for(int i=1;i=3;i++) for(int j=1;j=3;j++) a[i][j]=' ';
while(1){
cout" 三子棋"endl;
cout" 1 2 3"endl;
cout" ----- "endl;
cout"1|"a[1][1]" "a[1][2]" "a[1][3]"|"endl;
cout"2|"a[2][1]" "a[2][2]" "a[2][3]"|"endl;
cout"3|"a[3][1]" "a[3][2]" "a[3][3]"|"endl;
cout" ----- "endl;
for(int j=1;j=3;j++){
int p=0;
for(int i=1;i=3;i++){
if(a[i][j]!='X') break;
else p++;
}
if(p==3){
cout"二号玩家获胜!!!"endl;
return 0;
}
}
for(int j=1;j=3;j++){
int p=0;
for(int i=1;i=3;i++){
if(a[j][i]!='X') break;
else p++;
}
if(p==3){
cout"二号玩家获胜!!!"endl;
return 0;
}
}
if(k==9) break;
k++;
int x1,y1,x2,y2;
cout"一号玩家(O)请输入(n行m列):";
cinx1y1;
while(1){
if(a[x1][y1]==' ') break;
else{
cout"这个位置已占用,请重新输入!!!"endl;
cinx1y1;
}
}
a[x1][y1]='O';
system("cls");
cout" 三子棋"endl;
cout" 1 2 3"endl;
cout" ----- "endl;
cout"1|"a[1][1]" "a[1][2]" "a[1][3]"|"endl;
cout"2|"a[2][1]" "a[2][2]" "a[2][3]"|"endl;
cout"3|"a[3][1]" "a[3][2]" "a[3][3]"|"endl;
cout" ----- "endl;
for(int j=1;j=3;j++){
int p=0;
for(int i=1;i=3;i++){
if(a[i][j]!='O') break;
else p++;
}
if(p==3){
cout"一号玩家获胜!!!"endl;
return 0;
}
}
for(int j=1;j=3;j++){
int p=0;
for(int i=1;i=3;i++){
if(a[j][i]!='O') break;
else p++;
}
if(p==3){
cout"一号玩家获胜!!!"endl;
return 0;
}
}
if(k==9) break;
k++;
cout"二号玩家(X)请输入(n行m列):";
cinx2y2;
while(1){
if(a[x2][y2]==' ') break;
else{
cout"这个位置已占用,请重新输入!!!"endl;
cinx2y2;
}
}
a[x2][y2]='X';
system("cls");
}
cout"------平局------"endl;
return 0;
}
column自己定,我给个中文的参照:
用户Id,主键
胜利局数:int
失败局数:int
平局:int
总分:int
上此日期:date
-------------------------
ok,表好了,save,load你要的数据就可以了。。。
#include iostream
#include string
using namespace std;
class CGobang //棋子类
{
private:
char chSort; //棋子的类别
int nWin; //赢棋的次数
int nLose; //输棋的次数
static int nDraw; //平局次数
static char achBoard[3][3]; //棋盘
static int nSize; //棋盘的尺寸 nSize X nSize
public:
CGobang(char chsort) //构造函数,决定一方棋子的类别
{
chSort=chsort;
nWin=nLose=nDraw=0;
}
void PlayTurn(void); //走1步棋
int Judge(); //判断是否连成一线,是则返回1,否则返回0
void Win(void); //赢棋
void Lose(void); //输棋
static void Draw(void); //平局
void PrintInfo(void); //输出总体情况
static void PrintBoard(void); //输出棋盘
static int GetFull(void); //判断棋盘是否已布满棋子
static void InitialBoard(void); //初始化棋盘
};
char CGobang::achBoard[3][3];
int CGobang::nSize = 3;
int CGobang::nDraw = 0;
void CGobang::Draw()
{
cout "\n\n\t\t平局!\n\n";
nDraw++;
}
void CGobang::InitialBoard() //初始化棋盘
{
for(int i=0;inSize;i++)
for(int j=0;jnSize;j++)
achBoard[i][j]=' ';
}
void CGobang::PrintBoard() //输出棋盘
{
cout endl;
cout " 1 2 3 " endl;
cout "1 " achBoard[0][0] " | " achBoard[0][1] " | " achBoard[0][2] endl;
cout " ---|---|---" endl;
cout "2 " achBoard[1][0] " | " achBoard[1][1] " | " achBoard[1][2] endl;
cout " ---|---|---" endl;
cout "3 " achBoard[2][0] " | " achBoard[2][1] " | " achBoard[2][2] endl;
cout endl;
cout endl;
}
int CGobang::GetFull() //判断棋盘是否布满棋子,若是返回1
{
for(int i=0;inSize;i++)
for(int j=0;jnSize;j++)
if(achBoard[i][j]!=' ')
return 0;
return 1;
}
void CGobang::Win() //赢棋
{
cout "\n\n\t\t"chSort"方获胜!\n\n";
nWin++;
}
void CGobang::Lose() //输棋
{
nLose++;
}
void CGobang::PlayTurn(void) //走1步棋
{
int nRow,nCol;
cout "现在该 "chSort" 方下棋,请输入棋盘坐标(x,y):";
do
{
cin nRow nCol; //输入坐标
if(nRownSize || nColnSize) //判断坐标越界
cout "输入的坐标越界,x与y的范围应小于等于"nSize",请重新输入\n";
else if(achBoard[nRow-1][nCol-1]!=' ') //判断坐标合理
cout "棋盘("nRow " ,"nCol ")处已有棋子,请重新输入\n";
else
{
achBoard[nRow-1][nCol-1]=chSort; //在坐标处放上棋子
break; //退出循环
}
}while(1);
}
int CGobang::Judge() //判断是否棋子连成一线,若是返回1
{//以下是各种可能连成一线的情况
if(achBoard[0][0]==chSort achBoard[1][1]==chSort achBoard[2][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort achBoard[1][1]==chSort achBoard[0][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort achBoard[1][0]==chSort achBoard[2][0]==chSort)
return 1;
else if(achBoard[0][1]==chSort achBoard[1][1]==chSort achBoard[2][1]==chSort)
return 1;
else if(achBoard[0][2]==chSort achBoard[1][2]==chSort achBoard[2][2]==chSort)
return 1;
else if(achBoard[0][0]==chSort achBoard[0][1]==chSort achBoard[0][2]==chSort)
return 1;
else if(achBoard[1][0]==chSort achBoard[1][1]==chSort achBoard[1][2]==chSort)
return 1;
else if(achBoard[2][0]==chSort achBoard[2][1]==chSort achBoard[2][2]==chSort)
return 1;
else
return 0; //没有连成一线则返回0
}
void CGobang::PrintInfo(void) //打印总体情况
{
cout "Side "chSort"方共计赢 "nWin" 局,输 "nLose" 局,平 "nDraw" 局。"endl;
}
void PrintRule(void) //打印规则
{
cout "\t\t欢迎使用三子连珠游戏!" endl endl;
cout "\t游戏规则:" endl;
cout "\t1.每1步输入要下棋的格子的x,y坐标,按Enter键\n";
cout "\t2.有1方首先3个棋子连成一线即判获胜\n";
cout "\t3.当棋子布满棋盘但仍无获胜方即为平局\n";
cout "\t4.X方先行\n";
cout "\n\n\t\t请按任意键开始下棋!\n\n";
}
int JudgePlay(CGobang SideX,CGobang SideO) //每下1步要进行输赢的判断,有结果则返回1
{
if(SideX.Judge()) //X方获胜
{
SideX.Win();
SideO.Lose();
return 1;
}
else if(SideO.Judge()) //O方获胜
{
SideO.Win();
SideX.Lose();
return 1;
}
else
return 0;
}
void Play(CGobang SideX,CGobang SideO) //开始一局游戏
{
while(1)
{
CGobang::PrintBoard(); //输出棋盘
SideX.PlayTurn(); //X方下棋
if(JudgePlay(SideX,SideO)) //判断输赢
break;
if(CGobang::GetFull()) //判断是否平局
{
CGobang::Draw();
break;
}
CGobang::PrintBoard(); //输出棋盘
SideO.PlayTurn(); //O方下棋
if(JudgePlay(SideX,SideO)) //判断输赢
break;
if(CGobang::GetFull()) //判断是否平局
{
CGobang::Draw();
break;
}
}
}
int main(void)
{
CGobang SideX('X'),SideO('O'); //定义两个棋子类对象,分别代表X方与O方
PrintRule();
cin.get();
string strChoice;
do
{
CGobang::InitialBoard(); //初始化棋盘
Play(SideX,SideO); //开始下一局
cout "是否继续(Y/N)?";
cin strChoice;
}while(strChoice == "Y" || strChoice == "y");
SideX.PrintInfo();
SideO.PrintInfo();
cout "\n\n\t欢迎再次使用三子连珠游戏!" endl endl;
return 0;
}
你这样没人能帮你,首先,你没有说明白问题,既然你三子相连的算法写好了,整个程序也就差不多出来了,你贴出来的代码只是玩家下棋动作的鼠标监听和结束时双方“胜利数”的比较,我在这个监听里面看不到关于“棋盘”的任何描述,也就是你的鼠标动作和“棋盘”数据没有关联,不知道你的三子相连的算法是怎么写的.
第一,我想确定你是否有个“棋盘”或者至少“6*6数组对象”来保存玩家每次操作的位置,如果有你问这个问题的重点应该放在你的算法和“棋盘”对象关系的处理上。
第二,你的问题说出了你的设计思路但是却没有说出你目前的问题是出在什么地方,你的算法已经写好,但是整个程序若达不到预期效果的重点却不是你贴出的这段代码,所以没人有法能帮你.