概述:一个可以选择棋盘大小和连珠数的连珠游戏
开局选择棋盘大小与连珠数
![](https://i-blog.csdnimg.cn/blog_migrate/eb45546cb3636a36a6db5439ff52233b.png)
游戏流程,玩家提示语随玩家变化而变化
输赢提示
![](https://i-blog.csdnimg.cn/blog_migrate/a176d9275975345787841f9144749aab.png)
输入进行范围合法检测以及落子处需为空白
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b,i,j,x,y,t,u,sum,s=0;//a棋盘大小,b连成几个珠子算赢,sum连珠数 ,xytu为输入OX横纵 ,s判和棋数
char board[100][100];
printf("请输入棋盘长度:");
cin>>a;
while(a<=2){
printf("请输入正确数字");
cin>>a;
}
printf("请输入连成几个珠子算赢:");
cin>>b;
while(b<=2||b>a){
printf("请输入正确数字");
cin>>b;
}
for(i=1;i<=a+1;i++){
for(j=1;j<=2*a+2;j++){
board[i][j]=' ';
}
}
j=3;
for(i=1;i<=a;i++){
board[1][j]='0'+i;
j+=2;
}
for(j=2;j<=a+1;j++){
board[j][1]='0'+j-1;
}
for(i=2;i<2*a+2;i++){
for(j=2;j<=2*a+2;j=j+2){
board[i][j]='|';
}
}
for(i=1;i<=a+1;i++){
for(j=1;j<=2*a+2;j++){
cout<<board[i][j];
}
printf("\n");
}//棋盘初始化
while(true){
printf("玩家O,请输入横坐标(0<x<=%d)",a);
cin>>x;
while(x<=0||x>a){
printf("请输入正确数字");
cin>>x;
}
printf("玩家O,请输入纵坐标(0<y<=%d)",a);
cin>>y;
while(y<=0||y>a){
printf("请输入正确数字");
cin>>y;
}
x=x+1;
y=1+2*y;
while(board[x][y]=='O'||board[x][y]=='X'){
printf("玩家O,请重新输入横坐标");
cin>>x;
while(x<=0||x>a){
printf("请输入正确数字");
cin>>x;
}
printf("玩家O,请重新输入纵坐标");
cin>>y;
while(y<=0||y>a){
printf("请输入正确数字");
cin>>y;
}
x=x+1;
y=1+2*y;
if(board[x][y]==' '){
break;
}
}
board[x][y]='O';
for(i=1;i<=a+1;i++){
for(j=1;j<=2*a+2;j++){
cout<<board[i][j];
}
printf("\n");
}
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[1+i][1+j*2]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+i][1+j*2]!='O'){
sum=0;
}
}
sum=0;
}//O横
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[1+j][1+i*2]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+j][1+i*2]!='O'){
sum=0;
}
}
sum=0;
} //O竖
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i][1+i*2+j]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+i][1+i*2+j]!='O'){
sum=0;
}
}
sum=0;
}//O斜右下线右上区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i+j][1+i*2]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+i+j][1+i*2]!='O'){
sum=0;
}
}
sum=0;
}//O斜右下线左下区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i][1+(a+1-i-j)*2]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+i+j][1+i*2]!='O'){
sum=0;
}
}
sum=0;
}//O斜左上线右下区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i+j][1+(a+1-i)*2]=='O'){
sum++;
}
if(sum>=b){
printf("玩家O获胜");
return 0;
}
if(board[1+i+j][1+i*2]!='O'){
sum=0;
}
}
sum=0;
}//O斜左上线左上区域
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[i+1][j*2+1]=='X'||board[i+1][j*2+1]=='O'){
s++;
}
}
}
if(s==a*a){
printf("和棋");
return 0;
}
s=0;
printf("玩家X,请输入横坐标(0<x<=%d)",a);
cin>>t;
while(t<=0||t>a){
printf("请输入正确数字");
cin>>t;
}
printf("玩家X,请输入纵坐标(0<y<=%d)",a);
cin>>u;
while(u<=0||u>a){
printf("请输入正确数字");
cin>>u;
}
t+=1;
u=1+2*u;
while(board[t][u]=='O'||board[t][u]=='X'){
printf("玩家X,请重新输入横坐标");
cin>>t;
while(t<=0||t>a){
printf("请输入正确数字");
cin>>t;
}
printf("玩家X,请重新输入纵坐标");
cin>>u;
while(u<=0||u>a){
printf("请输入正确数字");
cin>>u;
}
t=t+1;
u=1+2*u;
if(board[t][u]=' '){
break;
}
}
board[t][u]='X';
for(i=1;i<=a+1;i++){
for(j=1;j<=2*a+2;j++){
cout<<board[i][j];
}
printf("\n");
}
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[1+i][1+j*2]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+i][1+j*2]!='X'){
sum=0;
}
}
sum=0;
}//X横
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[1+j][1+i*2]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+j][1+i*2]!='X'){
sum=0;
}
}
sum=0;
} //x竖
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i][1+i*2+j]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+i][1+i*2+j]!='X'){
sum=0;
}
}
sum=0;
}//X斜右下线右上区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i+j][1+(a+1-i)*2]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+i+j][1+(a+1-i)*2]!='X'){
sum=0;
}
}
sum=0;
}//X斜右下线左下区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i][1+(a+1-i-j)*2]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+i+j][1+i*2]!='X'){
sum=0;
}
}
sum=0;
}//X斜左上线右下区域
for(j=0;j<a;j++){
for(i=1;i<=a-j;i++){
if(board[1+i+j][1+(a+1-i)*2]=='X'){
sum++;
}
if(sum>=b){
printf("玩家X获胜");
return 0;
}
if(board[1+i+j][1+i*2]!='X'){
sum=0;
}
}
sum=0;
}//X斜左上线左上区域
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
if(board[i+1][j*2+1]=='X'||board[i+1][j*2+1]=='O'){
s++;
}
}
}
if(s==a*a){
printf("和棋");
return 0;
}
s=0;
}
}