C++五子棋(未做完,但能玩,而且还不错)

代码放下面了,关于步骤介绍的我以后再完善一下。

cpp 复制代码
#include<bits/stdc++.h>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)
using namespace std;
//--------------------------------五子棋------------------------------------//
//player_1:o
//player_2:x
int Game_mode;
char qizi[25][25];
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//主要模块
void print_checkerboard(){
	SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
	cout<<"   ";
	for(int i=1;i<=20;i++){
		cout<<i<<" ";
		if(i<10) cout<<" ";
	}
	cout<<endl;
	for(int i=1;i<=20;i++){
		if(i<10) cout<<" ";
		cout<<i<<" ";
	       for(int j=1;j<=20;j++){
	       	if(qizi[i][j]=='o'){
				SetConsoleTextAttribute(handle,  FOREGROUND_BLUE | FOREGROUND_INTENSITY);
				cout<<qizi[i][j]<<"  ";
				SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
			}else if(qizi[i][j]=='x'){
				SetConsoleTextAttribute(handle,  FOREGROUND_RED | FOREGROUND_INTENSITY);
				cout<<qizi[i][j]<<"  ";
				SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
			}else{
				SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
				cout<<qizi[i][j]<<"  ";
			}
		}
		cout<<endl;
	}
}
bool inspect_1(){
	for(int i=1;i<=20;i++){
		for(int j=1;j<=20;j++){
			if(qizi[i][j]=='o'){
				if((qizi[i+1][j]=='o'&&qizi[i+2][j]=='o'&&qizi[i+3][j]=='o'&&qizi[i+4][j]=='o') or
					(qizi[i-1][j]=='o'&&qizi[i-2][j]=='o'&&qizi[i-3][j]=='o'&&qizi[i-4][j]=='o') or
					(qizi[i][j+1]=='o'&&qizi[i][j+2]=='o'&&qizi[i][j+3]=='o'&&qizi[i][j+4]=='o') or
					(qizi[i][j-1]=='o'&&qizi[i][j-2]=='o'&&qizi[i][j-3]=='o'&&qizi[i][j-4]=='o') or
					(qizi[i+1][j+1]=='o'&&qizi[i+2][j+2]=='o'&&qizi[i+3][j+3]=='o'&&qizi[i+4][j+4]=='o') or
					(qizi[i+1][j-1]=='o'&&qizi[i+2][j-2]=='o'&&qizi[i+3][j-3]=='o'&&qizi[i+4][j-4]=='o') or
					(qizi[i-1][j+1]=='o'&&qizi[i-2][j+2]=='o'&&qizi[i-3][j+3]=='o'&&qizi[i-4][j+4]=='o') or
					(qizi[i-1][j-1]=='o'&&qizi[i-2][j-2]=='o'&&qizi[i-3][j-3]=='o'&&qizi[i-4][j-4]=='o') )
					{
						return true;
					}
			}
			
		}
	}
	return false;
}
 
bool inspect_2(){
	for(int i=1;i<=20;i++){
		for(int j=1;j<=20;j++){
			if(qizi[i][j]=='x'){
				if((qizi[i+1][j]=='x'&&qizi[i+2][j]=='x'&&qizi[i+3][j]=='x'&&qizi[i+4][j]=='x') or
					(qizi[i-1][j]=='x'&&qizi[i-2][j]=='x'&&qizi[i-3][j]=='x'&&qizi[i-4][j]=='x') or
					(qizi[i][j+1]=='x'&&qizi[i][j+2]=='x'&&qizi[i][j+3]=='x'&&qizi[i][j+4]=='x') or
					(qizi[i][j-1]=='x'&&qizi[i][j-2]=='x'&&qizi[i][j-3]=='x'&&qizi[i][j-4]=='x') or
					(qizi[i+1][j+1]=='x'&&qizi[i+2][j+2]=='x'&&qizi[i+3][j+3]=='x'&&qizi[i+4][j+4]=='x') or
					(qizi[i+1][j-1]=='x'&&qizi[i+2][j-2]=='x'&&qizi[i+3][j-3]=='x'&&qizi[i+4][j-4]=='x') or
					(qizi[i-1][j+1]=='x'&&qizi[i-2][j+2]=='x'&&qizi[i-3][j+3]=='x'&&qizi[i-4][j+4]=='x') or
					(qizi[i-1][j-1]=='x'&&qizi[i-2][j-2]=='x'&&qizi[i-3][j-3]=='x'&&qizi[i-4][j-4]=='x') )
					{
						return true;
					}
			}
			
		}
	}
	return false;
}


//电脑模块
void reflection(){
	system("cls");
	for(int i=1;i<=2;i++){
		print_checkerboard();
		cout<<"电脑正在思考中";
		for(int i=1;i<=3;i++){
			cout<<".";
			Sleep(500);
		}
		system("cls");
	}
}

void lianzi_3_o(){
	for(int i=1;i<=20;i++){
		for(int j=1;j<=20;j++){
			if(qizi[i][j]=='o'){
				if(qizi[i+1][j]=='o' and qizi[i+2][j]=='o'){

				}
			}
		}
	}
}

int main(){
	memset(qizi, 42 , sizeof(qizi));
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(handle,  BACKGROUND_BLUE | BACKGROUND_GREEN);
	SetConsoleTextAttribute(handle,  FOREGROUND_BLUE );
	cout<<"请先确定游戏模式:"<<endl;
	cout<<"1.(玩家VS电脑)"<<endl;
	cout<<"2.(玩家VS玩家)"<<endl;
	SetConsoleTextAttribute(handle,  FOREGROUND_RED );
	cin>>Game_mode;
	system("cls");
	if(Game_mode==1){
//		print_checkerboard();
//		int cmp=0,player=0;
//		int player_x=0,player_y=0;
//		int cmp_x=0,cmp_y=0;
//		int F_PER=0,F_CMP=0;
//		srand(( int )time(0));
//        int order=random(2);
//		if(order==1){
//			player=1,cmp=0;
//			F_PER=1;
//			cout<<"你先下。。。"<<endl;
//			Sleep(3000);
//			system("cls");
//		}else{
//			player=0,cmp=1;
//			F_CMP=1;
//			cout<<"电脑先下。。。"<<endl;
//			Sleep(3000);
//			system("cls");
//		}
//		while(inspect_1()==false and inspect_2()==false){
//			if(player==1){
//				int a=0,b=0;
//				while(a>20 or b>20 or qizi[a][b]=='o'||qizi[a][b]=='x'){
//					a=0,b=0;
//					cin>>a>>b;
//					if(a>20 or b>20){
//						system("cls");
//						print_checkerboard();
//						SetConsoleTextAttribute(handle,  FOREGROUND_RED | FOREGROUND_INTENSITY);
//						cout<<"超出棋盘范围,请重新输入!"<<endl;
//						SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
//					}
//					if(a<=20 and b<=20) {
//						if(qizi[a][b]=='o'||qizi[a][b]=='x'){
//							system("cls");
//							print_checkerboard();
//							SetConsoleTextAttribute(handle,  FOREGROUND_RED | FOREGROUND_INTENSITY);
//							cout<<"此坐标已有棋子,请重新输入!"<<endl;
//							SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);
//						}else{
//							player_x=a,player_y=b;
//							break;
//						}
//
//					}
//				}
//				if(F_PER==1){
//					qizi[player_x][player_y]='o';
//					system("cls");
//					print_checkerboard();
//					if(inspect_1()){
//						cout<<"哈哈,你赢了!"<<endl;
//						system("pause");
//					}
//					system("cls");
//				}else{
//					qizi[player_x][player_y]='x';
//					system("cls");
//					print_checkerboard();
//					if(inspect_2()){
//						cout<<"哈哈,你赢了!"<<endl;
//						system("pause");
//					}
//				}
//			}else{
//				int a=0,b=0;
//				print_checkerboard();
//				reflection();
//				
//			}
//		}
	}else if(Game_mode==2){
		bool player1=0,player2=0;
		int player1_x,player1_y;
		int player2_x,player2_y;
		print_checkerboard();
		while(inspect_1()==false and inspect_2()==false){
			if(player1==0) {
				int a=0,b=0;
				while(a>20 or b>20 or qizi[a][b]=='o'||qizi[a][b]=='x'){
					a=0,b=0;
					cin>>a>>b;
					if(a>20 or b>20){
						system("cls");
						print_checkerboard();
						SetConsoleTextAttribute(handle,  FOREGROUND_RED | FOREGROUND_INTENSITY);
						cout<<"超出棋盘范围,请重新输入!"<<endl;
						SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);		
					}
					if(a<=20 and b<=20) {
						if(qizi[a][b]=='o'||qizi[a][b]=='x'){
							system("cls");
							print_checkerboard();
							SetConsoleTextAttribute(handle,  FOREGROUND_RED | FOREGROUND_INTENSITY);
							cout<<"此坐标已有棋子,请重新输入!"<<endl;
							SetConsoleTextAttribute(handle,  FOREGROUND_GREEN | FOREGROUND_INTENSITY);	
						}else{
							player1_x=a,player1_y=b;
							break;
						}
						
					}
				}
				qizi[player1_x][player1_y]='o';
				system("cls");
				print_checkerboard();
				if(inspect_1()==true){
					cout<<"哈哈,玩家1,赢了!"<<endl;
					system("pause"); 
					return 0; 
				}
				player1=1;
				player2=0;
			}
			if(player2==0) {
				int a=0,b=0;
				while(a>20 or b>20 or qizi[a][b]=='o'or qizi[a][b]=='x'){
					a=0,b=0;
					cin>>a>>b;
					if(a>20 or b>20){
						system("cls");
						print_checkerboard();
						SetConsoleTextAttribute(handle,  FOREGROUND_RED);
						cout<<"超出棋盘范围,请重新输入!"<<endl;
						SetConsoleTextAttribute(handle,  FOREGROUND_GREEN);		
					}
					if(a<=20 and b<=20) {
						if(qizi[a][b]=='o'||qizi[a][b]=='x'){
							system("cls");
							print_checkerboard();
							SetConsoleTextAttribute(handle,  FOREGROUND_RED);
							cout<<"此坐标已有棋子,请重新输入!"<<endl;
							SetConsoleTextAttribute(handle,  FOREGROUND_GREEN);	
						}else{
							player2_x=a,player2_y=b;
							break;
						}
					}
				}
				qizi[player2_x][player2_y]='x';
				system("cls");
				print_checkerboard();
				if(inspect_2()==true){
					cout<<"哈哈,玩家2,赢了!"<<endl;
					system("pause"); 
					return 0; 
				}
				player1=0;
				player2=1;
			}
		}
	}
	else{
		cout<<"输入错误,结束。"<<endl;
	}
	return 0;
}
相关推荐
白帽攻防录44 分钟前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛1 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148111 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
所以遗憾是什么呢?2 小时前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
xixiaoyunya2 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的2 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务3 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
Lhan.zzZ3 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
打工仔折腾 AI4 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问4 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab