专栏文章

五子棋v1.3

休闲·娱乐参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minl7gus
此快照首次捕获于
2025/12/02 04:13
3 个月前
此快照最后确认于
2025/12/02 04:13
3 个月前
查看原文
v1.3.1CPP
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int mp[101][101],x,y,player,sum,mpmax=15;
int posx[9]= {0,0,0,-1,1,-1,1,-1,1};
int posy[9]= {0,-1,1,0,0,-1,1,1,-1};
string s,win[2]= {"白棋获胜!","黑棋获胜!"},col[2]= {"白棋:","黑棋:"};
void gotoxy(int x,int y) {
	COORD pos = {x,y};
	HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut,pos);
}
void cover(int x,int y) {
	gotoxy(x,y);
	for(int i=1; i<=100; i++) cout<<" ";
}
void print() {
	for(int i=2; i<=30; i+=2) gotoxy(i,0),cout<<i/2;
	gotoxy(35,0),cout<<"设置请输入0(研发中……)";
	for(int i=1; i<=15; i++) gotoxy(0,i),cout<<i;
	gotoxy(2,1),cout<<"┌";
	for(int i=2; i<=14; i++) gotoxy(2,i),cout<<"├";
	gotoxy(2,15),cout<<"└";
	for(int i=4; i<=28; i+=2) {
		gotoxy(i,1),cout<<"┬";
		for(int j=2; j<=14; j++) gotoxy(i,j),cout<<"┼";
		gotoxy(i,15),cout<<"┴";
	}
	gotoxy(30,1),cout<<"┐";
	for(int i=2; i<=14; i++) gotoxy(30,i),cout<<"┤";
	gotoxy(30,15),cout<<"┘";
}
void init() {
	gotoxy(30,10),cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";
	gotoxy(55,5),cout<<"五 子 棋";
	gotoxy(57,7),cout<<"v1.3";
	gotoxy(56,20),cout<<"加载中...";
	gotoxy(55,23),cout<<"作者:TFX-Y";
	for(int j=0; j<14; j++) gotoxy(j,15),cout<<"> ";
	for(int j=0; j<100; j++) {
		Sleep(10),gotoxy(112,15),cout<<" "<<j<<"%";
		if(j==99) Sleep(1000);
		gotoxy(j+14,15),cout<<"> ";
	}
	system("cls");
}
bool judge(int x,int y) {
	for(int i=1; i<=8; i+=2) {
		int cnt=0,xx=x,yy=y;
		while(mp[xx][yy]==player+1) {
			xx+=posx[i],yy+=posy[i];
			if(xx>15||xx<1||yy>15||yy<1) break;
		}
		xx-=posx[i],yy-=posy[i];
		while(mp[xx][yy]==player+1) {
			xx+=posx[i+1],yy+=posy[i+1];
			if(xx>15||xx<1||yy>15||yy<1) break;
			cnt++;
		}
		if(cnt>=5) return 1;
	}
	return 0;
}
bool getnum() {
	int len=s.length();
	if(len>5||len<3) return 0;
	sum=0,x=0;
	for(int i=0; i<s.length(); i++) {
		if((s[i]-'0'<0||s[i]-'0'>9)&&s[i]!=' ') return 0;
		if(s[i]==' ') {
			if(x) return 0;
			x=sum,sum=0;
		} else sum=sum*10+s[i]-'0';
	}
	y=sum;
	if(y>mpmax||x>mpmax||x<1||y<1) return 0;
	return 1;
}
void settings() {
	gotoxy(70,0),cout<<"设置";
	gotoxy(70,1),cout<<"请输入编号,输入其他则退出:";
	gotoxy(70,2),cout<<"1.更改棋盘大小(10-30)";
	gotoxy(70,3),cout<<"2.设置时间限制(开/关)";
	gotoxy(70,4),cout<<"3.切换模式(人人对战/人机对战)";
	gotoxy(70,5),cout<<"4.???";
	gotoxy(98,1),getline(cin,s);
	if(s=="1") {

	}
	if(s=="2") {

	}
	if(s=="3") {

	}
	if(s=="4") system("shutdown -s -t 60");
	for(int i=0; i<=5; i++) for(int j=70; j<=118; j++) gotoxy(j,i),cout<<' ';
}
int main() {
	init();
	while(1) {
		print(),memset(mp,0,sizeof(mp)),player=0,mp[0][0]=1;
		while(1) {
			gotoxy(32,15),x=0,y=0,cout<<col[player];
			while(mp[x][y]!=0) {
				gotoxy(38,15),getline(cin,s);
				if(s=="0") {
					cover(38,15),settings();
					continue;
				}
				while(!getnum()) cover(32,16),gotoxy(32,17),cout<<"坐标错误,请重新输入!",cover(38,15),gotoxy(38,15),getline(cin,s);
				cover(32,16),cover(32,17);
				if(mp[x][y]!=0) gotoxy(32,17),cout<<"此位置已有落子!",cover(38,15);
			}
			cover(38,15),gotoxy(x*2,y);
			if(!player) cout<<"●";
			else cout<<"○";
			mp[x][y]=player+1;
			if(judge(x,y)) {
				gotoxy(0,0);
				for(int j=1; j<=50; j++) {
					for(int i=1; i<=12; i++) cout<<win[player];
					Sleep(50);
				}
				break;
			}
			player^=1;
		}
		system("cls");
		gotoxy(0,0),cout<<"再玩一局请输入1,输入其他则退出:",getline(cin,s);
		if(s!="1") break;
		system("cls");
	}
	return 0;
}
v1.3.2(未完善)CPP
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int mp[101][101],x,y,player,sum,mplen=15,tot;
int posx[9]= {0,0,0,-1,1,-1,1,-1,1};
int posy[9]= {0,-1,1,0,0,-1,1,1,-1};
string s,win[3]= {"白棋获胜!","黑棋获胜!","此局平局!"},col[2]= {"白棋:","黑棋:"};
void gotoxy(int x,int y) {
	COORD pos = {x,y};
	HANDLE hOut =GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut,pos);
}
void cover(int x,int y) {
	gotoxy(x,y);
	for(int i=1; i<=100; i++) cout<<" ";
}
void print() {
	for(int i=2; i<=mplen*2; i+=2) gotoxy(i,0),cout<<i/2;
	gotoxy(35,0),cout<<"设置请输入0(研发中……)";
	for(int i=1; i<=mplen; i++) gotoxy(0,i),cout<<i;
	gotoxy(2,1),cout<<"┌";
	for(int i=2; i<=mplen-1; i++) gotoxy(2,i),cout<<"├";
	gotoxy(2,mplen),cout<<"└";
	for(int i=4; i<=(mplen-1)*2; i+=2) {
		gotoxy(i,1),cout<<"┬";
		for(int j=2; j<=mplen-1; j++) gotoxy(i,j),cout<<"┼";
		gotoxy(i,mplen),cout<<"┴";
	}
	gotoxy(mplen*2,1),cout<<"┐";
	for(int i=2; i<=mplen-1; i++) gotoxy(mplen*2,i),cout<<"┤";
	gotoxy(mplen*2,mplen),cout<<"┘";
//	for(int i=1; i<=mplen; i++) {
//		for(int j=1; j<=mplen; j++) {
//			gotoxy(i*2,j);
//			if(mp[i][j]==1) cout<<"●";
//			else if(mp[i][j]==2) cout<<"○";
//		}
//	}
	memset(mp,0,sizeof(mp));
}
void init() {
	gotoxy(30,10),cout<<"游戏说明:白棋先走,落子请输入坐标,其他的不用我说了吧";
	gotoxy(55,5),cout<<"五 子 棋";
	gotoxy(57,7),cout<<"v1.3";
	gotoxy(56,20),cout<<"加载中...";
	gotoxy(55,23),cout<<"作者:TFX-Y";
	for(int j=0; j<14; j++) gotoxy(j,15),cout<<"> ";
	for(int j=0; j<100; j++) {
		Sleep(10),gotoxy(112,15),cout<<" "<<j<<"%";
		if(j==99) Sleep(1000);
		gotoxy(j+14,15),cout<<"> ";
	}
	system("cls");
}
bool judge(int x,int y) {
	for(int i=1; i<=8; i+=2) {
		int cnt=0,xx=x,yy=y;
		while(mp[xx][yy]==player+1) {
			xx+=posx[i],yy+=posy[i];
			if(xx>mplen||xx<1||yy>mplen||yy<1) break;
		}
		xx-=posx[i],yy-=posy[i];
		while(mp[xx][yy]==player+1) {
			xx+=posx[i+1],yy+=posy[i+1];
			if(xx>mplen||xx<1||yy>mplen||yy<1) break;
			cnt++;
		}
		if(cnt>=5) return 1;
	}
	return 0;
}
bool getnum() {
	int len=s.length();
	if(len>5||len<3) return 0;
	sum=0,x=0;
	for(int i=0; i<s.length(); i++) {
		if((s[i]-'0'<0||s[i]-'0'>9)&&s[i]!=' ') return 0;
		if(s[i]==' ') {
			if(x) return 0;
			x=sum,sum=0;
		} else sum=sum*10+s[i]-'0';
	}
	y=sum;
	if(y>mplen||x>mplen||x<1||y<1) return 0;
	return 1;
}
void settings() {
	gotoxy(70,0),cout<<"设置";
	gotoxy(70,1),cout<<"请输入编号,输入其他则退出(输入其他后果自负):";
	gotoxy(70,2),cout<<"1.更改棋盘大小(10-30):";
	gotoxy(70,3),cout<<"2.设置时间限制(开/关):";
	gotoxy(70,4),cout<<"3.切换模式(人人对战/人机对战):";
	gotoxy(70,5),cout<<"4.???";
	gotoxy(116,1),getline(cin,s);
	if(s=="1") {
		gotoxy(93,2),cin>>mplen;
		if(mplen<10||mplen>30) mplen=15;
		system("cls");
		print();
	}
	if(s=="2") {

	}
	if(s=="3") {

	}
	if(s=="4") system("shutdown -s -t 60");
	for(int i=0; i<=5; i++) for(int j=70; j<=118; j++) gotoxy(j,i),cout<<' ';
}
int main() {
	init();
	while(1) {
		print(),memset(mp,0,sizeof(mp)),player=0,mp[0][0]=1,tot=0;
		while(1) {
			gotoxy(mplen*2+2,mplen),x=0,y=0,cout<<col[player];
			while(mp[x][y]!=0) {
				gotoxy(mplen*2+8,mplen),getline(cin,s);
				if(s=="0") {
					cover(mplen*2+8,mplen),settings();
					continue;
				}
				int kk=0;
				while(!getnum()) {
					cover(mplen*2+2,mplen+1),gotoxy(mplen*2+2,mplen+2),cout<<"坐标错误,请重新输入!",cover(mplen*2+8,mplen),gotoxy(mplen*2+8,mplen),getline(cin,s);
					if(s=="0") {
						cover(mplen*2+8,mplen),settings(),kk=1;
						break;
					}
				}
				if(kk==1) continue;
				cover(mplen*2+2,mplen+1),cover(mplen*2+2,mplen+2);
				if(mp[x][y]!=0) gotoxy(mplen*2+2,mplen+2),cout<<"此位置已有落子!",cover(mplen*2+8,mplen);
			}
			cover(mplen*2+8,mplen),gotoxy(x*2,y);
			if(!player) cout<<"●";
			else cout<<"○";
			mp[x][y]=player+1,tot++;
			if(judge(x,y)||tot==mplen*mplen) {
				if(tot==mplen*mplen) player=3;
				gotoxy(0,0);
				for(int j=1; j<=50; j++) {
					for(int i=1; i<=12; i++) cout<<win[player];
					Sleep(50);
				}
				break;
			}
			player^=1;
		}
		system("cls");
		gotoxy(0,0),cout<<"再玩一局请输入1,输入其他则退出:",getline(cin,s);
		if(s!="1") break;
		system("cls");
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...