C++五子棋(未做完,但能玩,而且还不错)
代码放下面了,关于步骤介绍的我以后再完善一下。
#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;
}
相关文章:
C++五子棋(未做完,但能玩,而且还不错)
代码放下面了,关于步骤介绍的我以后再完善一下。 #include<bits/stdc.h> #include<cstdio> #include<cstdlib> #include<ctime> #include<windows.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x…...
二分查找代码详解
二分查找代码实现 以下是完整的代码和解释: #include <stdio.h>int binarySearch(int arr[], int length, int target) {int left 0;int right length - 1;while (left < right) {int mid left (right - left) / 2; // 防止溢出if (arr[mid] target…...
uniapp的h5,读取本地txt带标签的文件
效果图 使用的回显的标签是u-parse,下面的网址讲了这个标签的相关 https://www.cnblogs.com/huihuihero/p/12978903.html 导入此插件 https://ext.dcloud.net.cn/plugin?id364 使用 uni.request({// 本地文件url: "/static/互联网医院医师端用户协议.txt…...
韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)
1 GPIO 操作回顾 (1)使能模块; (2)设置引脚的模式(工作于GPIO模式); (3)设置GPIO本身(输入/输出); (4&…...
如何使用 API list 极狐GitLab 群组中的镜像仓库?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
PHP设计模式-简单工厂模式
核心: 一、定义一个接口类里面写规定好的方法。 interface Message{public function send(array $params);public function getMessage(array $params);public function getCode(array $params);} 二、定义产品类 、产品类继承接口类 class AlliYunSms implements …...
C语言航空售票系统
以下是系统部分页面 以下是部分源码,需要源码的私信 #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_user 100 typedef struct ft {char name[50];//名字char start_place[50];//出发地char end_place[50];//目的地char …...
Oracle 19c打Datapatch数据补丁报错处理
Oracle 19c打Datapatch数据补丁报错处理 错误分析重新编译补丁验证安装完数据库补丁后,在数据补丁的步骤收到以下报错: Connecting to database...OK Gathering database info...done Bootstrapping registry and package to current versions...done Determining current s…...
Linux shell编程学习笔记66:ping命令 超详细的选项说明
0 前言 网络信息是电脑网络信息安全检查中的一块重要内容,Linux和基于Linux的操作系统,提供了很多的网络命令,今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说, ping 命令 会…...
SSL/TLS和SSL VPN
1、SSL/TLS SSL安全套接字层:是一种加密协议,用于在网络通信中建立安全连接。它在应用层和传输层(TCP/IP)之间提供数据加密、服务器身份验证以及信息完整性验证 SSL只保护TCP流量,不保护UDP协议 TLS:传输层…...
浅谈WebSerice
一. 什么是WebService Web Service也称为web服务,它是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP协议传输(SOAP:Simple Object Access Protocol简单对象访问协议,soap属于w3c标准。并且soap协议是基…...
linux快速入门-学习笔记
linux快速入门-学习笔记 第一章:Linux系统概念及命令学习Linux系统基本概念命令终端介绍命令格式介绍Linux系统辨别目录与文件的方法通过文件详细属性辨别ls 查看目录/文件命令Linux 系统下的归属关系命令行编辑技巧Linux 基本权限的类别课后练习 第二章:…...
科普文:5种Linux下软件部署方式说明
在Linux世界里,高效、灵活地安装和管理软件是每个系统管理员和开发者的基本功。从传统的RPM包管理,到便捷的YUM软件仓库,再到颠覆性的Docker容器技术,Snap,源码安装,每一种方法都有其独到之处,适…...
Redisson中的RBlockingQueue的使用场景及例子
Redisson 的 RBlockingQueue 是一个实现了 Java BlockingQueue 接口的分布式队列,它可以用于在分布式系统中实现生产者-消费者模式。RBlockingQueue 提供了线程安全的阻塞队列操作,允许生产者在队列满时阻塞,消费者在队列空时阻塞,…...
【办公软件】Office 2019以上版本PPT 做平滑切换
Office2019以上版本可以在切页面时做平滑切换,做到一些简单的动画效果。如下在快捷菜单栏中的切换里选择平滑。 比如,在两页PPT中,使用同一个形状对象,修改了大小和颜色。 选择切换为平滑后,可以完成如下的动画显示。 …...
connect-multiparty中间件用法以及实例--文件上传中间件(保姆级别教学)
connect-multiparty中间件的用法包括安装和引入、基本设置、路由应用、文件处理以及安全和优化等步骤。 connect-multiparty是一个专为Connect和Express框架设计的文件上传中间件,它基于multiparty库,用于处理多部分表单数据,尤其针对文件上传…...
0503触发器的电路结构和工作原理
触发器的电路结构和工作原理 如何区分锁存器还是触发器, 看有没有这个三角符号,告诉是上升沿触发还是下降沿触发,没有三角符号就是电平触发。低电平触发就画个小圈。高电平触发就不画小圈。有小圈的三角就是下降沿触发 setup建立时间 hold 保…...
LeetCode:二叉树的中序遍历(C语言)
1、前序遍历:根左右 2、中序遍历:左根右 3、后序遍历:左右根 1、问题概述:二叉树中序遍历 2、示例 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root […...
MySQL数据库基本安装与部署
目录 概念 数据库的基本概念 关系型数据库 非关系型数据库 MySQL 商业版与社区版 示例 初始化MySQL 添加系统服务 概念 数据库的基本概念 数据(Data) 描述事物的符号记录包括数字、文字、图形、图像、声音、档案记录等以“记录”形式按统一的…...
paraFoam 运行 报错 usr/lib/x86_64-linux-gnu/libQt5Core.so 已解决
在日常项目开发中。使用ubuntu 视图开发的时候。报错 缺少 libQt5Core 核心组件! whereis libQt5Core.so.5sudo strip --remove-section.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 完美解决,并且能正常打开,前提是,…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
