13 c++版本的五子棋

news2024/11/27 3:55:00

前言

呵呵 这大概是 大学里面的 c++ 五子棋了吧 

有一些 面向对象的理解, 但是不多 

这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 

然后 貌似 放在 win10 上面执行 还有一些问题, 渲染的, 应该很好调整 

 

 

五子棋

#include<Windows.h>
#include<iostream>
#include<ctime>
using namespace std;
#define N 15
void setCursor(int x,int y);

class FIR
{
private:
	int tot;
	int a[N][N];	//状态矩阵
	int attacklevel[N][N];	//攻击优先级
	int defenselevel[N][N];	//防御优先级
	int max;	//攻击优先级+防御优先级的最大值
	int maxattack;	//最大攻击优先级
	int maxdefense;	//最大防御优先级
	int have41,have42,have32;	//人方是否有下一子成五子;电脑方是否有下一子成五子;电脑方是否有下一子成四子;
	int r,c,su,sd;	//横竖斜捺连续的子数
	int power4(int );	//4的N次方(计算优先级)
  	int spacerow(int ,int ,int );	//横向优先级
	int spacecolumn(int ,int ,int );	//竖向优先级
	int spaceslopeup(int ,int ,int ); 	//斜向优先级
	int spaceslopedown(int ,int ,int );	//捺向优先级

public:
	int steps;	//定位光标的”步数“
	int x,y;	//走子的坐标
	FIR()
	{
		memset(a,0,sizeof(a));
		memset(attacklevel,0,sizeof(attacklevel));
		memset(defenselevel,0,sizeof(defenselevel));
		steps=0;tot=-1;maxattack=0;maxdefense=0;x=0;y=0;
		have41=0;have42=0;have32=0;
		r=0;c=0;su=0;sd=0;max=0;
	}
	void setmap();	//打印棋桌
	int play(int ,int ,int );	//下子
	int check(int ,int ,int );	//检查
	void analysis(int );	//分析,优先级,最大功防……
	void compute(int );	//计算走子
	void print();	//打印状态矩阵

};

int main()
{
	FIR fir;
	int x,y;
	int flag=0,flag2=0;
	fir.setmap();
	while(true)
	{
		do{
		setCursor(40,fir.steps);
		cout<<"player1 :please input x AND y:";
		cin>>x>>y;
		flag=fir.play(x-1,y-1,1);
		if(flag)
		{
		if(fir.check(x-1,y-1,1))
		{	flag2=1;
			setCursor(32,fir.steps);
			cout<<"congratuations you win !"<<endl;
			break;
		}
		}
		}while(flag==0);
		if(flag2)	break;


		
		setCursor(40,fir.steps);
		cout<<"computer :";
		fir.analysis(2);
		fir.compute(2);
		fir.play(fir.x,fir.y,2);
		if(fir.check(fir.x,fir.y,2))
		{
			flag2=1;
			setCursor(32,fir.steps);
			cout<<"you lost please practice."<<endl;
			break;
		}




		/*
		do{
		setCursor(0,20+fir.steps);
		cout<<"player2 :please input x AND y:";
		cin>>x>>y;
		flag=fir.play(x,y,2);
		if(flag)
		{
		if(fir.check(x-1,y-1))
		{	flag2=1;
			setCursor(0,21+fir.steps);
			cout<<"congratuations. you win !"<<endl;
			break;
		}
		}
	}while(flag==0);
  */

		if(flag2)	break;
	}
setCursor(40,1+fir.steps);
fir.print();
	return 0;
}

void setCursor(int x,int y)	//定位光标
{
	HANDLE handle;
	handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD location;
	location.X=x;
	location.Y=y;
	SetConsoleCursorPosition(handle,location);
}

//┏  ┓  ┗  ┛ ┣  ┫  ┳  ┻  ╋  ⊙  ●
void FIR::setmap()		//画出“棋盘”
{
	cout<<endl<<"  FIVE IN A ROW ";
	int i,j;
	setCursor(2,5);
	cout<<"┏";
	for(i=1;i<=N-2;i++)
		cout<<"┳";
	cout<<"┓";
	
	for(i=1;i<=N-2;i++)
	{setCursor(2,i+5);
		cout<<"┣";
		for(j=0;j<N-2;j++)
			cout<<"╋";
		cout<<"┫"<<endl;
	}
	cout<<"  ┗";
		for(i=0;i<N-2;i++)
			cout<<"┻";
		cout<<"┛";


	for(i=1;i<=N;i++)
	{
		setCursor(0,i+4);
		cout<<i;
		setCursor(i*2,3);
		if(i>=10)	cout<<i/10;
		else cout<<i;
		setCursor(i*2,4);
		if(i>=10)	cout<<i%10;
	}
}

int FIR::play(int x,int y,int k)	//落子
{
	if(x<0 || y<0 || x>=N || y>=N || a[x][y]!=0)
	{
		setCursor(35,1+steps);
		cout<<"your input is error, please input int again."<<endl;
		steps=steps+2;
		return 0;
	}
	else
	{
		setCursor(2*(y+1),x+5);
		if(k==1)
		{a[x][y]=1;
		cout<<"⊙";
		}
		else if(k==2)
		{a[x][y]=2;
		cout<<"●";
		}
		else cout<<"k is error."<<endl;
		steps++;
		return 1;
	}
}

int FIR::check(int x,int y,int k)		//检查是否有五子
{
	spacerow(x,y,k);spacecolumn(x,y,k);spaceslopeup(x,y,k);spaceslopedown(x,y,k);
	if(r>4||c>4||su>4||sd>4)
		return 1;
	else return 0;
}

int FIR::power4(int n)
{
	int sum=4;
	if(n==0)
		sum=1;
	else
	for(int i=1;i<n;i++)
		sum*=4;
	return sum;
}

int FIR::spacerow(int x,int y,int k)	//行的优先级
{
	tot=1;
	int _x=x,_y=y-1,_y2;
	while(_y>=0 && a[_x][_y]==k )
	{
		tot++;
		_y--;
	}
	_y2=_y;
	_x=x;_y=y+1;
	while(_y<N && a[_x][_y]==k)
	{
		tot++;
		_y++;
	}
	r=tot;
	if(_y2>=0 && _y<N)
	{
	if(a[_x][_y2]==2/k && a[_x][_y]==2/k)
		tot=0;
	else if(a[_x][_y2]==0 && a[_x][_y]==0)
		tot=power4(tot);
	else tot=power4(tot-1);
	}
	else tot=power4(tot-1);

	return tot;	
}

int FIR::spacecolumn(int x,int y,int k)		//列的优先级
{
	tot=1;
	int _x=x-1,_y=y,_x2;
	while(_x>=0 && a[_x][_y]==k )
	{
		tot++;
		_x--;
	}
	_x2=_x;
	_x=x+1;_y=y;
	while(_x<N && a[_x][_y]==k)
	{
		tot++;
		_x++;
	}
	c=tot;
	if(_x2>=0 && _x<N)
	{
	if(a[_x2][_y]==2/k && a[_x][_y]==2/k)
		tot=0;
	else if(a[_x2][_y]==0 && a[_x][_y]==0)
		tot=power4(tot);
	else tot=power4(tot-1);
	}
	else tot=power4(tot-1);

	return tot;	
}

int FIR::spaceslopeup(int x,int y,int k)	//斜上的优先级
{
	tot=1;
	int _x=x+1,_y=y-1,_x2,_y2;
	while(_x<N && _y>=0 && a[_x][_y]==k )
	{
		tot++;
		_x++;
		_y--;
	}
	_x2=_x;_y2=y;
	_x=x-1;_y=y+1;
	while(_x>=0 && _y<N && a[_x][_y]==k)
	{
		tot++;
		_x--;
		_y++;
	}
	su=tot;
	if(_x2<N && _y2>=0 && _x>=0 &&_y<N)
	{
	if(a[_x2][_y2]==2/k && a[_x][_y]==2/k)
		tot=0;
	else if(a[_x2][_y2]==0 && a[_x][_y]==0)		
		tot=power4(tot);
	else tot=power4(tot-1);
	}
	else tot=power4(tot-1);

	return tot;	
}

int FIR::spaceslopedown(int x,int y,int k)	//斜下的优先级
{
	tot=1;
	int _x=x-1,_y=y-1,_x2,_y2;
	while(_x<N && _y>=0 && a[_x][_y]==k )
	{
		tot++;
		_x--;
		_y--;
	}
	_x2=_x;_y2=y;
	_x=x+1;_y=y+1;
	while(_x>=0 && _y<N && a[_x][_y]==k)
	{
		tot++;
		_x++;
		_y++;
	}
	sd=tot;
	if(_x2>=0 && _y2>=0 && _x<N &&_y<N)
	{
	if(a[_x2][_y2]==2/k && a[_x][_y]==2/k)
		tot=0;
	else if(a[_x2][_y2]==0 && a[_x][_y]==0)
		tot=power4(tot);
	else tot=power4(tot-1);
	}
	else tot=power4(tot-1);

	return tot;	
}


void FIR::analysis(int k)		//分析每个空格的优先级(横,竖,正斜,反斜 优先级之和),并计算最高的优先级
{
	maxattack=0;maxdefense=0;
	int att[4],def[4];
	for(int i=0;i<N;i++)
	{	
		for(int j=0;j<N ;j++)
		{
			if(a[i][j]==0)
			{
			attacklevel[i][j]=spacerow(i,j,k)+spacecolumn(i,j,k)+spaceslopeup(i,j,k)+spaceslopedown(i,j,k);
			att[0]=r;att[1]=c;att[2]=su;att[3]=sd;
			if(att[0]==5 || att[1]==5 || att[2]==5 || att[3]==5)	have42=1;
			if(att[0]==4 || att[1]==4 || att[2]==4 || att[3]==4)	have32=1;
			if(maxattack<attacklevel[i][j])		maxattack=attacklevel[i][j];
			defenselevel[i][j]=spacerow(i,j,2/k)+spacecolumn(i,j,2/k)+spaceslopeup(i,j,2/k)+spaceslopedown(i,j,2/k);
			def[0]=r;def[1]=c;def[2]=su;def[3]=sd;
			if(maxdefense<defenselevel[i][j])		maxdefense=defenselevel[i][j];	
			if(def[0]==5 || def[1]==5 || def[2]==5 || def[3]==5)	have41=1;
			}
		}cout<<endl;
	}		
}

void FIR::compute(int k)		//计算……,有多个优先级最高且相同的随机取一个
{
	int i,j,block=256;
	srand((int)time(NULL));
	setCursor(50,steps);

	if(maxdefense>=block)
	{
		if(have42==1)
		{
			for(i=0;i<N;i++)
				for(j=0;j<N;j++)
					if(attacklevel[i][j]==maxattack)
					{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
					}

		}
		
		else if(have41==1)
		{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				if(defenselevel[i][j]>=block)
					if(attacklevel[i][j]+defenselevel[i][j]>max)
						max=attacklevel[i][j]+defenselevel[i][j];

		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{	if(defenselevel[i][j]>=block)
				if(attacklevel[i][j]+defenselevel[i][j]==max)
				{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						max=0;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
				}
			}
		}
		/*
		else if(have31==1)
		{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				//if(attacklevel[i][j]>=block)
					if(attacklevel[i][j]+defenselevel[i][j]>max)
						max=attacklevel[i][j]+defenselevel[i][j];

		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{	//if(attacklevel[i][j]>=block)
				if(attacklevel[i][j]+defenselevel[i][j]==max)
				{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						max=0;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
				}
			}
		}
*/
		else
		{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				if(defenselevel[i][j]>=block)
					if(attacklevel[i][j]+defenselevel[i][j]>max)
						max=attacklevel[i][j]+defenselevel[i][j];

		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{	if(defenselevel[i][j]>=block)
				if(attacklevel[i][j]+defenselevel[i][j]==max)
				{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						max=0;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
				}
			}
		}
}

		
	else if(maxattack>maxdefense)
	{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				if(attacklevel[i][j]==maxattack)
					if(attacklevel[i][j]+defenselevel[i][j]>max)
						max=attacklevel[i][j]+defenselevel[i][j];

		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{	if(attacklevel[i][j]==maxattack)
				if(attacklevel[i][j]+defenselevel[i][j]==max)
				{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						max=0;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
				}
			}
	}
	else
	{
		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
				if(defenselevel[i][j]==maxdefense)
					if(attacklevel[i][j]+defenselevel[i][j]>max)
						max=attacklevel[i][j]+defenselevel[i][j];

		for(i=0;i<N;i++)
			for(j=0;j<N;j++)
			{	if(defenselevel[i][j]==maxdefense)
				if(attacklevel[i][j]+defenselevel[i][j]==max)
				{
						cout<<i+1<<" "<<j+1<<endl;
						x=i;y=j;
						max=0;
						memset(attacklevel,0,sizeof(attacklevel));
						memset(defenselevel,0,sizeof(defenselevel));
						return ;
				}
			}
	}
}

void FIR::print()	//打印最后的数字结果
{
		for(int i=0;i<N;i++)
		{
		setCursor(40,1+steps+i);
			for(int j=0;j<N;j++)
				cout<<a[i][j]<<" ";
			cout<<endl;
		}
}



/*
	int row(int ,int ,int );
	int column(int ,int ,int );
	int slopeup(int ,int ,int );
	int slopedown(int ,int ,int );



int FIR::row(int x,int y,int k)	//判断行
{
	tot=1;
	int _x=x,_y=y-1;
	while(_y>=0 && a[_x][_y]==k)
	{
		tot++;
		_y--;
	}
	_x=x,_y=y+1;
	while(_y<N && a[_x][_y]==k)
	{
		tot++;
		_y++;
	}
	return tot;
}

int FIR::column(int x,int y,int k)	//判断列
{
	tot=1;
	int _x=x-1,_y=y;
	while(_x>=0 && a[_x][_y]==k)
	{
		tot++;
		_x--;
	}
	_x=x+1,_y=y;
	while(_x<N && a[_x][_y]==k)
	{
		tot++;
		_x++;
	}
	return tot;
}

int FIR::slopeup(int x,int y,int k)	//判断正斜
{
	tot=1;
	int _x=x-1,_y=y+1;
	while( _x>=0 && _y<N && a[_x][_y]==k)
	{
		tot++;
		_x--;
		_y++;
	}
	_x=x+1,_y=y-1;
	while(_x<N && _y>=0  && a[_x][_y]==k)
	{
		tot++;
		_x++;
		_y--;
	}
	return tot;
}

int FIR::slopedown(int x,int y,int k)		//判断反斜
{
	tot=1;
	int _x=x-1,_y=y-1;
	while(_x>=0 && _y>=0 && a[_x][_y]==k)
	{
		tot++;
		_x--;
		_y--;
	}
	_x=x+1,_y=y+1;
	while(_x<N  && _y<N && a[_x][_y]==k)
	{
		tot++;
		_x++;
		_y++;
	}
	return tot;
}
*/







 

 

程序截图

这个在 win10 上面执行 貌似 渲染是存在问题的, 需要调整 

1c9d19f2273d41ad9f35c83b156e227c.png

 

 

正常执行

9580ed69246744348b4c0d08a18379f6.png

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1625683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT全方位指导:学术论文写作从零开始,轻松搞定高质量论文!

目录 文末福利 一、论文选题的深度探讨 二、撰写摘要的艺术 三、关键词的精选 四、引言的构建 五、正文的结构设计 六、撰写结论的策略 七、致谢的编写 八、附录的有效利用 九、参考文献的整理 文末有福利哦 撰写一篇高质量的学术论文是一项既复杂又耗时的任务。这个…

c++中的指针

一、指针的基本概念 指针的作用&#xff1a;可以通过指针间接访问内存 内存编号是从0开始记录的&#xff0c;一般采用16进制数字表示。可以利用指针变量保存地址。 二、指针变量的定义和使用 指针变量定义语法&#xff1a; 数据类型 * 变量名 #include<iostream> u…

JAVA实现easyExcel模版导出

easyExcel文档 模板注意&#xff1a; 用 {} 来表示你要用的变量 &#xff0c;如果本来就有"{“,”}" &#xff0c;特殊字符用"{“,”}"代替{} 代表普通变量{.}代表是list的变量 添加pom依赖 <dependency><groupId>com.alibaba</groupId&g…

模块三:二分——LCR. 173.点名

文章目录 题目描述算法原理暴力查找二分查找 代码实现暴力查找二分&#xff1a;CJava 题目描述 题目链接&#xff1a;LCR. 173.点名 关于这道题中&#xff0c;时间复杂度为 O(N) 的解法有很多种&#xff0c;⽽且也是⽐较好想的&#xff0c;这⾥就不再赘述。本题只讲解⼀个最优…

超实用的电脑桌面便签+待办清单app

对于上班族来说&#xff0c;桌面便签加待办清单软件是提升工作效率的得力助手。想象一下&#xff0c;在繁忙的工作中&#xff0c;你能够快速记录重要事项&#xff0c;设置待办任务提醒&#xff0c;一切都能有条不紊地进行。这种便捷性&#xff0c;尤其在处理多项任务和紧急事务…

Unity读书系列《Unity3D游戏开发》——脚本(一)

文章目录 前言一、脚本模版及其拓展1、脚本模版2、拓展脚本模版 二、脚本的生命周期三、脚本的执行顺序四、脚本序列化1、序列化数据2、serializedObject3、监听部分元素修改事件 五、定时器与间隔定时器六、工作线程&#xff08;多线程&#xff09;总结 前言 脚本在Unity的重…

中颖51芯片学习9. PWM(12bit脉冲宽度调制)

中颖51芯片学习9. PWM&#xff08;12bit脉冲宽度调制&#xff09; 一、资源简介二、PWM工作流程三、寄存器介绍1. PWMx控制寄存器PWMxCON2. PWM0周期寄存器PWM0PH/L3. PWM1周期寄存器PWM1PH/L4. PWM0占空比控制寄存器PWM0DH/L5. PWM1占空比控制寄存器 PWM1DH/L6. 占空比寄存器与…

临床常用的8个护理评估量表分享,医护必备!

常笑医学整理了8个常用的护理评估量表&#xff0c;包括Morse跌倒量表、Braden压疮评分、格拉斯哥昏迷评分GCS、深静脉血栓评分DVT、Brathel日常生活活动能力量表等&#xff0c;这些量表在常笑医学网上均支持在线使用和下载&#xff0c;供医护人员学习与使用。 Morse跌倒危险因素…

【北京迅为】《iTOP龙芯2K1000开发指南》-第三部分 迅为龙芯开发板快速体验

龙芯2K1000处理器集成2个64位GS264处理器核&#xff0c;主频1GHz&#xff0c;以及各种系统IO接口&#xff0c;集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

webpack热更新原理详解

文章目录 前言基础配置创建项目HMR配置 HMR交互概览HMR流程概述HMR实现细节初始化注册监听编译完成事件启动服务监听文件代码变化服务端发送消息客户端收到消息热更新文件请求热更新代码替换 问题思考 前言 刷新分为两种&#xff1a;一种是页面刷新&#xff0c;不保留页面状态…

LANGUAGE-DRIVEN SEMANTIC SEGMENTATION

环境不易满足&#xff0c;不建议复现

CentOS7利用宝塔面板安装zabbix6.0.x详细安装教程(手把手图文详解版)

最近学习CentOS7安装zabbix6.0.x的版本&#xff0c;尝试了很多教程&#xff0c;很多都比较麻烦且容易出错&#xff0c;最后发现使用宝塔面板最为简单&#xff0c;将具体过程记录下来&#xff0c;一来分享给有需要的人&#xff0c;二来自己也当记录笔记&#xff0c;以免以后遗忘…

Hive中几个非常重要的问题

1、Hive 有哪些方式保存元数据&#xff0c;各有哪些优缺点 (1).DerBy数据库&#xff1a;默认自带 优点&#xff1a;使用简单&#xff0c;不需要额外的配置。 缺点&#xff1a;只有一个客户端&#xff0c;多个客户访问会报错。 (2).使用MySql数据库存储 优点&#xff1a;单独的…

OSPF的LSA详解

一、什么是LSA&#xff1f;LSA作用&#xff1f; 在OSPF协议中&#xff0c;LSA全称链路状态通告&#xff0c;主要由LSA头部信息&#xff08;LSA摘要&#xff09;和链路状态组成。部分LSA只有LSA头部信息&#xff0c;无链路状态信息。使用LSA来传递路由信息和拓扑信息&#xff0c…

linux系统安全

一、账号安全基本措施 1.1 系统账号清理 1.1.1 将用户设置为无法登录-- 改登录shell 登录shell是用户与计算机系统直接交互的接口&#xff0c;使用户能够通过命令行方式进行各种操作和管理。 所以让用户无法登录&#xff0c;其实就是将登录shell改为 /sbin/nologin,可以用us…

移动应用安全

移动应用安全 移动应用安全主要关注Android、iOS、Windows Phone等平台上移动应用软件安全状态。它涉及应用程序在其设计运行的平台上下文中的安全问题、它们使用的框架以及预期的用户集。所有主流的移动平台都提供大量可选的安全控制&#xff0c;旨在帮助软件开发人员构建安全…

面试官问如何实现二级缓存怎么进行回答以及延伸出更多知识点呢?

二级缓存的优势与缺点 优点&#xff1a; 1&#xff09;二级缓存相比只调用一层 Redis 缓存&#xff0c;访问速度更快。对于一些不经常修改的数据而查询十分频繁的可以直接放在本地缓存&#xff08;一级&#xff09;里面。 作为面试者的扩展延伸&#xff1a;我在本地缓存的实…

【MySQL 数据宝典】【索引原理】- 002 示例+逐个字段学明白 Explain

一、Explain 概述 使用 EXPLAIN 关键字可以模拟优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理我们的SQL语句的。分析出查询语句或是表结构的性能瓶颈。 1.1 MySQL 查询过程 通过explain我们可以获得以下信息&#xff1a; 表的读取顺序数据读取操作的操作类型…

华为ensp中链路聚合两种(lacp-static)模式配置方法

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月26日11点54分 链路聚合&#xff08;Link Aggregation&#xff09;&#xff0c;又称为端口聚合&#xff08;Port Trunking&#xff09;&#xff0c;是一种将多条物理…

OU和域用户的创建

OU和域用户的创建 导航 文章目录 OU和域用户的创建导航一、创建ou二、创建用户三、验证 一、创建ou 在服务器管理器里面点击右上角的工具,选择Active Directory 用户和计算机右击我们的域,选择新建,选择组织单位,并填入我们的单位名字 二、创建用户 右击我们刚刚新建的组织…