请求大神帮帮忙 解决一下问题

weixin_44345472 2019-01-18 06:00:01
我在做一个project 关于四子棋的 棋盘是六行 七列的6*7的格式 请大佬们叫一下如何去做这个游戏的胜利条件(我横着的和竖着的已经做好了)现在就差一个如何做斜着四个连在一起算赢的了 谢谢帮助

下面是我写的 请大佬们指教指教 磕头

#include <iostream>
using namespace std;
void drop(char c,int col);
bool hwin(char a[6][7]);
bool vwin(char a[6][7]);
bool dwin(char a[6][7]);
char board[6][7]={
{'_','_','_','_','_','_','_',},
{'_','_','_','_','_','_','_',},
{'_','_','_','_','_','_','_',},
{'_','_','_','_','_','_','_',},
{'_','_','_','_','_','_','_',},
{'_','_','_','_','_','_','_',},
};
int main(){
cout<<"Welcome to connect four game.It's'two player game.Each play can only drop one piece at a time,when one player have four piece at one line,you won "<<endl;

for(int i=0;i<6;i++){
for(int j=0;j<7;j++){
cout<<board[i][j]<<" ";
}cout<<endl;
}for(int j=0;j<7;j++){
cout<<j<<" ";
}
int b=43;
while(b>0&& !hwin(board)&& !vwin(board)){
cout<<" \nenter a colum between 0 to 6\n";
int enter;
cin>>enter;
char turn;
if(b%2==0){
turn='x';
}else{
turn='o';
}
b--;
drop(turn,enter);
for(int i=0;i<6;i++){
for(int j=0;j<7;j++){
cout<<board[i][j]<<" ";
}cout<<endl;}
for(int j=0;j<7;j++){
cout<<j<<" ";
}
}if(b%2==0){
cout<<"\n\n o win";
}else
cout<<"\n\n x win";
}
void drop(char c,int col){
int x=6;
while(board[x][col]!='_'){
x=x-1;
}board[x][col]=c;
}
bool hwin(char a[6][7]){
for(int i=0;i<6;i++){
int num=1;
for(int o=0;o<7;o++){
if(a[i][o]==a[i][o+1]&&a[i][o]!='_'){
num++;
if(num==4){
return true;}
}

}
}return false;

}
bool vwin(char a[6][7]){
for(int i=0;i<6;i++){
int num=0;
for(int o=0;o<7;o++){
if(a[o][i]==a[o+1][i]&&a[o][i]!='_'){
num++;
if(num==4){
return true;}
}

}
}return false;

}
...全文
62 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2019-01-18
  • 打赏
  • 举报
回复
引用 1 楼 niiiloc 的回复:
你的横行竖行判断逻辑就有问题
你应该直接判断i和o为起始点的棋子是否满足胜利条件
对于(i,o)为起始点的棋子,如果胜利条件有这个棋子,那么
横赢:i,o i,o+1 i,o+2 i,o+3
竖赢:i,o i+1,o i+2,o i+3,o
斜赢(\):i,o i+1,o+1 i+2,o+2 i+3,o+3
斜赢(/):i,o i+1,o-1 i+2,o-2 i+3,o-3
你不能光考虑+ 还得考虑 -
636f6c696e 2019-01-18
  • 打赏
  • 举报
回复
你的横行竖行判断逻辑就有问题 你应该直接判断i和o为起始点的棋子是否满足胜利条件 对于(i,o)为起始点的棋子,如果胜利条件有这个棋子,那么 横赢:i,o i,o+1 i,o+2 i,o+3 竖赢:i,o i+1,o i+2,o i+3,o 斜赢(\):i,o i+1,o+1 i+2,o+2 i+3,o+3 斜赢(/):i,o i+1,o-1 i+2,o-2 i+3,o-3

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧