玩个五子棋
  • 板块灌水区
  • 楼主zhangyuqi277h
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/8/24 14:01
  • 上次更新2024/8/24 14:29:38
查看原帖
玩个五子棋
1265992
zhangyuqi277h楼主2024/8/24 14:01
#include <bits/stdc++.h>
#include <stdlib.h>
using namespace std;
const int b=20;
int f=true,cnt=0;
char m[b][b];
char o='o',e='e';
int bg(int temp){
	int t=temp,cnt=0;
	while(t){
		t/=10;
		cnt++;
	}                           	
	if(temp==0) return 1;
	else return cnt;
}
char sch(int xp,int yp){      //三三联、四三联、四四联基础判断点 
	int opt=0,ept=0,opf=0,epf=0;
	for(int i=-1;i<=1;i++){
		for(int j=-1;j<=1;j++){
			if(i==0&&j==0) continue;
			//活2 
			if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==o&&m[xp+(i*3)][yp+(j*3)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e) opt++;
			if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==e&&m[xp+(i*3)][yp+(j*3)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o) ept++;
			if(m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o&&m[xp+(i*4)][yp+(j*4)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e&&m[xp+(i*2)][yp+(j*2)]!=e) opt++;
			if(m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e&&m[xp+(i*4)][yp+(j*4)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o&&m[xp+(i*2)][yp+(j*2)]!=o) ept++;
			if(m[xp+(i*2)][yp+(j*2)]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o&&m[xp+(i*4)][yp+(j*4)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e&&m[xp+i][yp+j]!=e) opt++;
			if(m[xp+(i*2)][yp+(j*2)]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e&&m[xp+(i*4)][yp+(j*4)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o&&m[xp+i][yp+j]!=o) ept++;
			//活3 
			if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o) opf++;
			if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e) epf++;
		}
	}
	if(opt+opf>=2&&ept+epf>=2) return 'b';
	if(opt+opf>=2) return 'o';
	if(ept+epf>=2) return 'e';
	return 'N'; 
}
void ow(){
	cout << o << "方赢了!!!";
	exit(0); 
}void ew(){
	cout << e << "方赢了!!!";
	exit(0);
}void be(){
	for(int i=0;i<b;i++){
		cout << i+1;
		for(int j=bg(i+1);j<bg(b);j++) cout << "-";
		for(int j=0;j<b;j++) cout << m[i][j];
		cout << endl;
	}
	for(int j=0;j<bg(b);j++) cout << " ";
	for(int j=1;j<=b&&bg(b)>=2;j++){
		if(j/10==0) cout << "|";
		else cout << j/10;
	}
	cout << endl;
	for(int j=0;j<bg(b)&&bg(b)>=2;j++) cout << " ";
	for(int j=1;j<=b;j++){
		cout << j%10;
	}
	
}
int main(){
	int x,y;
	for(int i=0;i<b;i++) for(int j=0;j<b;j++) m[i][j]='+';
	while(f){
		system("cls");
		cout << "一起来下五子棋吧\n黑白子用" << o << "和" << e << "来表示哦\n"; 
		be();
		cout << "\n现在是";
		if(cnt%2==0) cout << o << "方";
		if(cnt%2==1) cout << e << "方";
		cout << "走的时间,打出你的落子位置吧,用空格分割哦(先打行再打列)\n输入:";
		cin >> x >> y;
		if(m[x-1][y-1]=='+'&&x<=b&&y<=b&&x>0&&y>0&&cnt%2==0) m[x-1][y-1]=o;
		else if(m[x-1][y-1]=='+'&&x<=b&&y<=b&&x>0&&y>0&&cnt%2==1) m[x-1][y-1]=e;
		else{cout << "不合格哦,重新下吧!\n";system("pause");continue;}
		
		
		cnt++;
		for(int i=0;i<b;i++){
			for(int j=0;j<b;j++){
				if(m[i][j]==o){
					if(i>-1&&j>1&&i<b&&j<b-2&&m[i][j-2]==o&&m[i][j-1]==o&&m[i][j]==o&&m[i][j+1]==o&&m[i][j+2]==o) ow();//左右 
					if(i>1&&j>1&&i<b-2&&j<b-2&&m[i-2][j-2]==o&&m[i-1][j-1]==o&&m[i][j]==o&&m[i+1][j+1]==o&&m[i+2][j+2]=='o') ow();//左上右下 
					if(i>1&&j>-1&&i<b-2&&j<b&&m[i-2][j]==o&&m[i-1][j]==o&&m[i][j]==o&&m[i+1][j]==o&&m[i+2][j]==o) ow();//上下 
					if(i>1&&j>1&&i<b-2&&j<b-2&&m[i+2][j-2]==o&&m[i+1][j-1]==o&&m[i][j]==o&&m[i-1][j+1]==o&&m[i-2][j+2]=='o') ow();//左下右上 
				}if(m[i][j]==e){
					if(i>-1&&j>1&&i<b&&j<b-2&&m[i][j-2]==e&&m[i][j-1]==e&&m[i][j]==e&&m[i][j+1]==e&&m[i][j+2]==e) ew();//左右 
					if(i>1&&j>1&&i<b-2&&j<b-2&&m[i-2][j-2]==e&&m[i-1][j-1]==e&&m[i][j]==e&&m[i+1][j+1]==e&&m[i+2][j+2]==e) ew();//左上右下 
					if(i>1&&j>-1&&i<b-2&&j<b&&m[i-2][j]==e&&m[i-1][j]==e&&m[i][j]==e&&m[i+1][j]==e&&m[i+2][j]==e) ew();//上下 
					if(i>1&&j>1&&i<b-2&&j<b-2&&m[i+2][j-2]==e&&m[i+1][j-1]==e&&m[i][j]==e&&m[i-1][j+1]==e&&m[i-2][j+2]==e) ew();//左下右上 
				}
			}
		}
	}
}

整个五子棋玩玩 呵呵

2024/8/24 14:01
加载中...