关于我用c++捏了个五子棋这件事...
查看原帖
关于我用c++捏了个五子棋这件事...
585704
TSL_ClearLightDream楼主2023/1/16 15:15
#include <bits/stdc++.h>
#include <windows.h>
#define keydown(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
using namespace std;
void win(int);
HWND h=GetForegroundWindow();
int t[25][25],x,y,k,wx[6],wy[6],px[3],n=1;
char a,b;
void clear()
{
	HANDLE hStdin=GetStdHandle(STD_INPUT_HANDLE);
	DWORD mode;
	GetConsoleMode(hStdin,&mode);
	mode&=~ENABLE_QUICK_EDIT_MODE;
	SetConsoleMode(hStdin,mode);
}
void apush(int X)
{
	for (int i=0;i<=24;i++){
		for (int j=0;j<=24;j++){
			if (i==0 && j==0){
				printf(" ");
			}
			else if (j==0){
				printf("%c",char(i+64));
			}
			else if (i==0){
				printf("%c ",char(j+64));
			}
			else{
				if (t[i][j]==0){
					if (i==1 && j==1){
						printf("┌");
					}
					if (i==1 && j==24){
						printf("┐");
					} 
					if (i==24 && j==1){
						printf("└");
					}
					if (i==24 && j==24){
						printf("┘");
					}
					if (i==1 && j!=1 && j!=24){
						printf("┬");
					}
					if (j==1 && i!=1 && i!=24){
						printf("├");
					}
					if (i==24 && j!=1 && j!=24){
						printf("┴");
					}
					if (j==24 && i!=1 && i!=24){
						printf("┤");
					}
					if (i!=1 && i!=24 && j!=1 && j!=24){
						printf("┼");
					}
				}
				else {
					if (t[i][j]==1){
						printf("○");
					}
					else {
						printf("●");
					}
				}
			}
		}
		if (i==1){
			printf(" 玩家1抠了%d个棋子。",px[1]);
		}
		if (i==2){
			printf(" 玩家2抠了%d个棋子。",px[2]);
		}
		if (i==4){
			printf(" 如果一个玩家抠了20个棋子,");
		}
		if (i==5){
			printf(" 那么他就赢了!");
		}
		if (i==7 && X!=0){
			printf(" 玩家%d连成了五子,所以他可以",X);
		}
		if (i==8 && X!=0){
			printf(" 抠一颗棋子。");
		}
		if (i!=24){
			printf("\n");
		}
	}
}
void cr()
{
	int g,m=1,x3,y3;
	for (int j=1;j<=4;j++){
		for (int i=0;i<=4;i++){
			if (j==1){
				x3=x;
				y3=y+i;
			}
			if (j==2){
				x3=x+i;
				y3=y;
			}
			if (j==3){
				x3=x+i;
				y3=y+i;
			}
			if (j==4){
				x3=x+i;
				y3=y-i;
			}
			if (t[x3][y3]==(k%2!=0?1:2)){
				g++;
				wx[m]=x3;
				wy[m]=y3;
				m++;
			}
			else{
				break;
			}
		}
		for (int i=-1;i>=-4;i--){
			if (j==1){
				x3=x;
				y3=y+i;
			}
			if (j==2){
				x3=x+i;
				y3=y;
			}
			if (j==3){
				x3=x+i;
				y3=y+i;
			}
			if (j==4){
				x3=x+i;
				y3=y-i;
			}
			if (t[x3][y3]==(k%2!=0?1:2)){
				g++;
				wx[m]=x3;
				wy[m]=y3;
				m++;
			}
			else{
				break;
			}
		}
		if (g>=5){
			win(k%2!=0?1:2);
		}
		g=0;
		m=1;
	}
}
void win(int p)
{
	int x1,y1,n1=1;
	for (int i=1;i<=5;i++){
		t[wx[i]][wy[i]]=0;
	}
	px[p]++;
	system("cls");
	apush(p);
	for (int i=1;i<=n;i++){
		POINT q;
		while (1){
			if(keydown(VK_LBUTTON)){
				while (1){
					if(!keydown(VK_LBUTTON)){
						GetCursorPos(&q);
						ScreenToClient(h,&q);
						break;
					}
					Sleep(100);
				}
				break;
			}
			Sleep(100);
		}
		y1=(q.x-8)/15.57+1;
		x1=q.y/15.57;
		if (t[x1][y1]!=0 && t[x1][y1]!=p){
			t[x1][y1]=p;
		}
		else{
			n1++;
		}
	}
}
int main()
{
	system("color 34");
	while (1){
		k++;
		apush(0);
		if (px[1]>=20){
			printf("玩家1赢了!");
			break;
		}
		if (px[2]>=20){
			printf("玩家2赢了!");
			break;
		}
		for (int i=1;i<=n;i++){
			POINT p;
			while (1){
				if(keydown(VK_LBUTTON)){
					while (1){
						if(!keydown(VK_LBUTTON)){
							GetCursorPos(&p);
							ScreenToClient(h,&p);
							break;
						}
						Sleep(100);
					}
					break;
				}
				Sleep(100);
			}
			y=(p.x-8)/15.57+1;
			x=p.y/15.57;
			if (t[x][y]==0 && x<=23 && y<=23 && x>=1 && y>=1){
				t[x][y]=k%2!=0?1:2;
				cr();
			}
			else{
				n++;
			}
		}
		system("cls");
		x=0;
		y=0;
		n=1;
	}
}
2023/1/16 15:15
加载中...