deMeer5_Attacker

SoccerCommand Player::deMeer5_Attacker()
{
SoccerCommand soc(CMD_ILLEGAL);

if (WM->isBeforeKickOff())
{
if (formations->getFormation() != FT_INITIAL || //不在开球的阵型
WM->getAgentGlobalPosition().getDistanceTo(WM->getStrategicPosition()) > 2.0)//返回当前球员位置
{
formations->setFormation(FT_INITIAL); // go to kick_off formation
soc = teleportToPos(WM->getStrategicPosition());//返回一个move命令将agent移到某一位置;返回一队员的战略位置
}
else if (WM->isKickOffUs() && WM->getPlayerNumber() == KICKOFF_TEAMMATE_NUM) //我们开球,返回开球球员号码
{
if (WM->isBallKickable())//球可踢
{
ObjectT ClosestTeamMate_Midfielder_Wing = WM->getClosestPlayerRelativeInSet(OBJECT_SET_TEAMMATES, PT_MIDFIELDER_WING);//我方最近的边侧中卫,返回最近球员的相对位置
if (ClosestTeamMate_Midfielder_Wing == OBJECT_ILLEGAL)
{
soc = SoccerCommand(CMD_TURN, VecPosition::normalizeAngle(WM->getAgentGlobalBodyAngle() + 60));//标准化角度(-180,180);返回当前agent身体的绝对角度
ACT->putCommandInQueue(alignNeckWithBody());//该skill使agent的脖子转向同身体一样的方向。该方法返回一个turn neck命令,并将身体相对于脖子的角度作为参数。
}
else
{
soc = directPass(WM->getGlobalPosition(ClosestTeamMate_Midfielder_Wing), PASS_NORMAL);//返回全局位置
//该方法使agent将球直接传给其他队员。参数pos表示传球的目的位置,通常是队友所在位置。
//参数passType表示传球类型(PASS_NORMAL或PASS_FAST)。该方法调用kickTo将球以一个根据
//传球类型得出的期望的末速度踢向目标位置。
}
Log.log(100, "take kick off");
}
else
{
soc = intercept(false);//false 不是守门员
//当截球方法被调用,首先判断agent能否在两个周期内使用closeIntercept
//(对于守门员是closeIntereptGoalie)截球。当两个周期内不能实现时,
//则agent使用一种迭代的方案即通过方法getInterceptionPointBall计算最优截球点。
Log.log(100, "move to ball to take kick-off");
}
}
else // else turn to front
{
soc = turnBodyToPoint(WM->getAgentGlobalPosition() + VecPosition(1, 0), 0);//将agent的身体转向某一点;返回当前agent的绝对位置。
ACT->putCommandInQueue(turnNeckToPoint(WM->getBallPos(), soc));//将agent的脖子转向某点,它接收一个场上的绝对目标点
}
}
else
{
soc = sonruoxin4attacker();
}
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(WM->getChangeViewCommand());
return soc;
}

SoccerCommand Player::sonruoxin4attacker()
{
SoccerCommand soc(CMD_ILLEGAL);
ObjectT ClosestTeamMateAhead = WM->getClosestAheadRelativeInSet(OBJECT_SET_TEAMMATES_NO_GOALIE);
ObjectT ClosestOpponentAhead = WM->getClosestAheadRelativeInSet(OBJECT_SET_OPPONENTS);
ObjectT ClosestTeamMate = WM->getClosestRelativeInSet(OBJECT_SET_TEAMMATES);
ObjectT ClosestOpponent = WM->getClosestRelativeInSet(OBJECT_SET_OPPONENTS);
static bool DeadBallUsLock = false;
int iTmp;

if (WM->getConfidence(OBJECT_BALL) < PS->getBallConfThr())// 返回该对象信息的可信度。该可信度是与上次看到这个对象以及特定的时间(一般为上次接受信息的时间)相关的。
{
soc = searchBall(); // if ball pos unknown
ACT->putCommandInQueue(alignNeckWithBody()); //使agent的脖子转向同身体一样的方向。该方法返回一个turn neck命令,并将身体相对于脖子的角度作为参数。
}
else if (WM->isBallKickable()) // if kickable
{
if (fabs(WM->getBallPos().getX()) > fabs(WM->predictPosAfterNrCycles(OBJECT_OPPONENT_GOALIE, 1).getX()))
//对于直线上的点,给出y坐标求x坐标该方法预测对象o经过iCycle周期后的位置。如果对象为球,则只考虑球速的衰减。如果对象是球员,则假设球员每周期使用iDashPower进行dash。。
{
if (WM->getAgentGlobalPosition().getDistanceTo(WM->getPosOpponentGoal())>25)//返回对方球门的位置坐标
{
soc = dribble((WM->getPosOpponentGoal()-WM->getAgentGlobalPosition()).getDirection(), 12);//返回当前坐标的方向。
//该方法使agent盘球(带球)
}
else
{
soc = kickTo(WM->getPosOpponentGoal(), SS->getBallSpeedMax());
}
//cout<<WM->getCurrentCycle()<<' '<<WM->getPlayerNumber()<<" Ahead of goalie"<<endl;
}
else
{
//shoot
VecPosition ShootPoint,ShootChioce;
VecPosition posAgent = WM->getAgentGlobalPosition();
VecPosition posGoalKeeper= WM->getGlobalPosition(OBJECT_OPPONENT_GOALIE);
double shoot_value=-100,value;
double shoot_range = max(SS->getGoalWidth() * WM->getAgentGlobalPosition().getDistanceTo(
WM->getPosOpponentGoal()) / PITCH_LENGTH, 0.3);//场地长度
for(ShootPoint=VecPosition(PITCH_LENGTH/2,WM->getPosOpponentGoalTop().getY()+shoot_range);//(52.5,7.62)
ShootPoint.getY()<=WM->getPosOpponentGoalBottom().getY() - shoot_range;//-7.62
ShootPoint.setY(ShootPoint.getY()+0.3))
{
if ((value=getshootprofit(ShootPoint))>shoot_value)
{
shoot_value=value;
ShootChioce=ShootPoint;
}
}
Log.log(100,"shoot_value is %lf",shoot_value);
Log.log(100,"VecPosition.y is %lf",ShootChioce.getY());
if (( (shoot_value>26&&WM->getBallPos().getDistanceTo(posGoalKeeper)<14)
||(WM->getConfidence(OBJECT_OPPONENT_GOALIE)<0.95&&WM->getBallPos().getX()>35&&fabs(WM->getBallPos().getY())<20)
||WM->getBallPos().getDistanceTo(posGoalKeeper)<7)
&&!WM->isIndirectFreeKickUs())///我们是否有个free kick
{
soc=kickTo(ShootChioce,SS->getBallSpeedMax());
ACT->putCommandInQueue(alignNeckWithBody());
DeadBallUsLock = false;
Log.log(100, " shoot");
}
else
if (WM->isDeadBallUs() && WM->getConfidence(ClosestTeamMate) < 0.98)
{
Log.log(100, " our dead ball, search for teammate");
soc = SoccerCommand(CMD_TURN, VecPosition::normalizeAngle(WM->getAgentGlobalBodyAngle() + 60));
ACT->putCommandInQueue(alignNeckWithBody());
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NORMAL, VQ_HIGH));
}
else
{
double disToOpp=WM->getAgentGlobalPosition().getDistanceTo(WM->getGlobalPosition(ClosestOpponentAhead));
if ((ClosestOpponentAhead==OBJECT_ILLEGAL || disToOpp>11) && !WM->isDeadBallUs()&&WM->getAgentStamina().getStamina()>2500)
{
Log.log(100,"dribble very fast 8 ");
double length;
if (fabs(WM->getBallPos().getX())<5)
{
soc=dribble((WM->getPosOpponentGoal()-WM->getBallPos()).getDirection(),5);
}
else soc=dribble((WM->getPosOpponentGoal()-WM->getBallPos()).getDirection(),8);
if (WM->getBallPos().getX()<40&&fabs(WM->getBallPos().getY())<20)
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
}
else if (disToOpp>9 && !WM->isDeadBallUs()&&WM->getAgentStamina().getStamina()>2000)
{
Log.log(100,"dribble fast 7");
if (fabs(WM->getBallPos().getX())<5)
{
soc=dribble((WM->getPosOpponentGoal()-WM->getBallPos()).getDirection(),5);
}
else soc=dribble((WM->getPosOpponentGoal()-WM->getBallPos()).getDirection(),7);
if (WM->getBallPos().getX()<40&&fabs(WM->getBallPos().getY())<20)
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
}
else if (disToOpp>6 && !WM->isDeadBallUs())
{
soc=dribble((WM->getPosOpponentGoal()-WM->getBallPos()).getDirection(),5);
Log.log(100,"dribble 5");
if (WM->getBallPos().getX()<40&&fabs(WM->getBallPos().getY())<20)
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
}
else
{
//pass
if (!WM->isDeadBallUs())
{ soc=getBestPassCmd_Attacker();
if (soc.commandType == CMD_ILLEGAL) soc = getSecondPassCmd_Attacker(8);
}
else
{
if ((ClosestTeamMate!=OBJECT_ILLEGAL)&&(WM->getAgentGlobalPosition().getDistanceTo(ClosestTeamMate)<10)) soc=directPass(ClosestTeamMate,PASS_NORMAL);
}
if (soc.commandType != CMD_ILLEGAL)
{
// prevent too smart kick
if (WM->isDeadBallUs() && soc.dPower < 30.0) soc.dPower = 50.0;
ACT->putCommandInQueue(lookaround(soc));
}
else if ( // if stamina low
WM->getAgentStamina().getStamina() < SS->getRecoverDecThr() * SS->getStaminaMax() + 600)
{
if (WM->getBallPos().getX()<36&&ClosestTeamMate!=OBJECT_ILLEGAL&&WM->isOnside(ClosestTeamMate)&&WM->getConfidence(ClosestTeamMate)>0.95)
{
if (WM->getGlobalPosition(ClosestTeamMate).getY()>0)
soc= throughPass(ClosestTeamMate,VecPosition(52.5,6));
else
soc= throughPass(ClosestTeamMate,VecPosition(52.5,-6));
Log.log(100,"through pass");

}
else
{
VecPosition posOpGK=WM->getGlobalPosition(OBJECT_OPPONENT_GOALIE);
if (posOpGK.getX()>0) soc=kickTo(VecPosition(52.5,-6),SS->getBallSpeedMax());
else soc=kickTo(VecPosition(52.5,6),SS->getBallSpeedMax());
}
}
else if (!WM->isDeadBallUs())
{
if (disToOpp>2)
{
double angOpp=VecPosition::normalizeAngle(WM->getGlobalBodyAngle(ClosestOpponentAhead));
double outPlayAng;
if ((angOpp>=0)&&(angOpp<180)) outPlayAng=fabs(VecPosition::normalizeAngle(angOpp+45));
else outPlayAng=fabs(VecPosition::normalizeAngle(angOpp-45));
soc=dribble(outPlayAng,5);
Log.log(100,"dangerous outPlayAng is %lf ",outPlayAng);
}
/*else if (disToOpp>2)
{

double angOpp=VecPosition::normalizeAngle(WM->getGlobalBodyAngle(ClosestOpponentAhead));
double outPlayAng;
if ((angOpp>=0)&&(angOpp<180)) outPlayAng=angOpp+45;
else outPlayAng=angOpp-45;
VecPosition PosTo=WM->getAgentGlobalPosition()+VecPosition(3,outPlayAng,POLAR),*ballpos;
soc=outplayOpponent(ClosestOpponentAhead,PosTo,ballpos);
Log.log(100,"outplay");
}
*/
else
{
soc=holdBall();
Log.log(100,"hold ball");
}
//soc=getBestDribbleCmd_Attacker(-100);
if (WM->getBallPos().getX()<40&&fabs(WM->getBallPos().getY())<20)
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
}
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}
}
}
else if (WM->getBallPos().getDistanceTo(WM->predictPosAfterNrCycles(OBJECT_OPPONENT_GOALIE, 1)) <= SS->getTackleDist()+1 && WM->getProbTackleSucceeds() > PS->getTackleConfThr() )
{
soc = tackle((WM->getPosOpponentGoal()-WM->getAgentGlobalPosition()).getDirection());
}
// if we get a dead ball, and it's not in our penalty area (if is, the goalie will take it sooner or later)
// if this player is closest to the ball, he will go to take the ball
else if (WM->isDeadBallUs()
&& WM->getClosestInSetTo(OBJECT_SET_TEAMMATES, OBJECT_BALL) == WM->getAgentObjectType())
{
Log.log(100, " go to take dead ball");
// if not in position, move to position
if (WM->getRelativeDistance(OBJECT_BALL) >= SS->getMaximalKickDist())
{
soc = moveToPos(getDeadBallPosition(), 5); // move to take dead ball
// if stamina low, dash slowly
if (soc.commandType == CMD_DASH && WM->getAgentStamina().getStamina() < SS->getRecoverDecThr() * SS->getStaminaMax() + 800)
{
Log.log(100, " but stamina is too low");
soc.dPower = 30.0 * WM->getAgentStamina().getRecovery();
}
ACT->putCommandInQueue(lookaround(soc));
}
// else wait till kickable signal
else
{
soc = turnBodyToPoint(WM->getPosOpponentGoal());
ACT->putCommandInQueue(lookaround(soc));
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}
// if this player is 2nd closest to the ball, he will go to back up the 1st one
else if (WM->isDeadBallUs() && !WM->isBallInOwnPenaltyArea()
&& WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES, OBJECT_BALL) == WM->getAgentObjectType())
{
Log.log(100, " go to backup dead ball");
// if not in position, move to position
if (WM->getRelativeDistance(OBJECT_BALL) >= 6.0)
{
soc = moveToPos(getDeadBallBackUpPosition(), 5); // move to take dead ball
// if stamina low, dash slowly
if (soc.commandType == CMD_DASH && WM->getAgentStamina().getStamina() < SS->getRecoverDecThr() * SS->getStaminaMax() + 800)
{
Log.log(100, " but stamina is too low");
soc.dPower = 30.0 * WM->getAgentStamina().getRecovery();
}
ACT->putCommandInQueue(lookaround(soc));
}
// else wait till kickable signal
else
{
soc = turnBodyToPoint(WM->getGlobalPosition(OBJECT_BALL));
ACT->putCommandInQueue(lookaround(soc));
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}
else
{ // if fastest to ball
int cycles_fastest_to_ball, cycles_intercept;
ObjectT obj_fastest_to_ball = WM->getFastestInSetTo(OBJECT_SET_TEAMMATES_NO_GOALIE, OBJECT_BALL, &cycles_fastest_to_ball);
WM->predictCommandToInterceptBall(WM->getAgentObjectType(), interceptClose(), &cycles_intercept);
// if fastest to ball, intercept it
if (( obj_fastest_to_ball == WM->getAgentObjectType() || cycles_intercept<=cycles_fastest_to_ball+1 )
&& !WM->isDeadBallThem() && !WM->isDeadBallUs())
{
Log.log(100, " fastest to ball; can get there in %d cycles", cycles_intercept);
soc = intercept(false);
if (soc.commandType == CMD_DASH && // if stamina low
WM->getAgentStamina().getStamina() < SS->getRecoverDecThr() * SS->getStaminaMax() + 200)
{
Log.log(100, " I will be slow");
soc.dPower = 30.0 * WM->getAgentStamina().getRecovery(); // dash slow
}
if (WM->getBallPos().getX()<40&&fabs(WM->getBallPos().getY())<20)
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}

else if (WM->getAgentGlobalPosition().getDistanceTo(WM->getStrategicPosition()) > 1.5 + fabs(WM->getAgentGlobalPosition().getX() - WM->getBallPos().getX()) / 10.0 )
// if not near strategic pos
{
if (WM->getAgentStamina().getStamina() > // if stamina high
SS->getRecoverDecThr() * SS->getStaminaMax() + 800)
{
soc = moveToPos(WM->getStrategicPosition(), PS->getPlayerWhenToTurnAngle());
if(WM->isInTheirPenaltyArea(WM->getBallPos())
soc=kickTo(WM->getPosOpponentGoal(),SS->getBallSpeedMax());
else
soc = dribble((WM->getPosOpponentGoal()-WM->getAgentGlobalPosition()).getDirection(),DRIBBLE_FAST);
}
else // else watch front
{
soc = turnBodyToPoint(WM->getStrategicPosition());
}
if (WM->isDeadBallUs())
{
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
ACT->putCommandInQueue(lookaround(soc));
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}
else
{
Log.log(100, " nothing to do but watching ball or looking around");
if (WM->isDeadBallUs())
{
soc = turnBodyToPoint(WM->getBallPos());
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL, soc));
}
else
{
soc = turnBodyToPoint(WM->getAgentGlobalPosition() + VecPosition(100, 0), 0);
ACT->putCommandInQueue(lookaround(soc));
}
WM->setChangeViewCommand(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));
}
}

return soc;
}

//***************************************************************************88
double BasicPlayer::getShootProfit(VecPosition ShootPoint)
{
double value=10,dis=0,n2=0,n3=0;
int iIndex,num=0,n1=0,n4=0,nall=0;
double dis_OP[10]={0};
Line shoot_line = Line::makeLineFromTwoPoints(WM->getBallPos(),ShootPoint);
double dis_GK=shoot_line.getDistanceWithPoint(WM->predictPosAfterNrCycles(OBJECT_OPPONENT_GOALIE, 1));
double dis_GK_Ball=WM->getBallPos().getDistanceTo(WM->getGlobalPosition(OBJECT_OPPONENT_GOALIE));
if (dis_GK>4.0) n2=32.0;
else n2=8*dis_GK;
if (dis_GK_Ball>20) n3=-8;
else n3=-0.4*dis_GK_Ball;
for (ObjectT o = WM->iterateObjectStart(iIndex, OBJECT_SET_OPPONENTS , PS->getPlayerConfThr());
o != OBJECT_ILLEGAL;
o = WM->iterateObjectNext(iIndex, OBJECT_SET_OPPONENTS , PS->getPlayerConfThr()))
if (dis=shoot_line.getDistanceWithPoint(WM->predictPosAfterNrCycles(o, 1))<3
&& !WM->getAgentGlobalPosition().isInFrontOf(o)&& o!=OBJECT_OPPONENT_GOALIE )
{
num++;
n1=0;
if (dis>2) n1=n1+2;
else if (dis>1) n1=n1+1;
else n1=n1-2;
dis_OP[num]=dis;
nall+=n1;
}
/*if (num==0) value=n2+n3+5;
else {
if (nall>=0) value=n2+n3+nall/num;
else value=n2+n3+nall/num;
}
*/
value=n2+n3;
return value;
}
/******************************/
SoccerCommand BasicPlayer::getBestPassCmd_Attacker()
{
//return SoccerCommand(CMD_ILLEGAL);
return getBestPassCmd_Defender();
}



转载于:https://www.cnblogs.com/syxchina/archive/2010/05/29/2197411.html

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

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

相关文章

【Flutter】解决依赖版本冲突

为什么会存在版本依赖问题 我们在开发flutter项目中&#xff0c;常常会依赖第三方库。flutter依赖项越多&#xff0c;就越有可能出现依赖版本冲突。 Because new_trend depends on build_runner >0.9.0 which requires SDK version >2.0.0-dev.61 <3.0.0, version sol…

安装vue-cli时报错

今天用npm安装vue-cli时一直报错&#xff0c;后面百度说用cnpm重装&#xff0c;结果还是报错&#xff0c;后面找到一个博主的&#xff0c;说是vue升级的原因&#xff0c;vue init webpack hello-world 已经替换为 vue create hello-world npm install -g vue/cli-init # vue…

从JPA到Hibernate的旧版和增强型标识符生成器

JPA标识符生成器 JPA定义了以下标识符策略&#xff1a; 战略 描述 汽车 持久性提供程序选择基础数据库支持的最合适的标识符策略 身份 标识符由数据库IDENTITY列分配 序列 持久性提供程序使用数据库序列来生成标识符 表 持久性提供程序使用单独的数据库表来模拟序列对…

快速了解AngularJs HTTP响应拦截器

任何时候&#xff0c;如果我们想要为请求添加全局功能&#xff0c;例如身份认证、错误处理等&#xff0c;在请求发送给服务器之前或服务器返回时对其进行拦截&#xff0c;是比较好的实现手段。 angularJs通过拦截器提供了一个从全局层面进行处理的途径。 四种拦截器 实现 req…

U盘专杀工具,U盘防御软件,U盘病毒防火墙--UDiskSyS

近来闲聊无事&#xff0c;写了一款专门针对U盘的防御软件&#xff0c;U盘插入后自动扫描并清除病毒并还原被感染的文件。是常见的文件夹伪装病毒&#xff0c;死亡应答病毒&#xff0c;exe感染型病毒的克星。UDiskSyS不像那些所谓的正规杀毒软件遇到搞不定的病毒统统删除之&…

CenterNet算法笔记(目标检测论文)

论文名称&#xff1a;CenterNet: Keypoint Triplets for Object Detectiontection 论文链接&#xff1a;https://arxiv.org/abs/1904.08189 代码链接&#xff1a;https://github.com/Duankaiwen/CenterNet 简介 该论文是由中科院&#xff0c;牛津大学以及华为诺亚方舟实验室联合…

git提交代码时报错:nothing added to commit but untracked files present

原因&#xff1a; git没有把提交的文件加载进来&#xff0c;报红色的是需要提交的文件&#xff0c; 解决步骤&#xff1a; 用git add XXX(文件名) 把提示报红色的文件加上git commit -m “xx”git push -u origin master重新提交就可以了

VSS使用手册

1 VSS概述 版本控制是工作组软件开发中的重要方面&#xff0c;它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时&#xff0c;源代码的控制是非常有用的。Visual SourceSafe 是一种…

语句和函数

1.for-in语句&#xff1a;是一种精准的迭代语句&#xff0c;可以用来枚举对象的属性。 2.label语句&#xff1a;在代码中添加标签&#xff0c;以便将来使用&#xff0c;由break和continue语句调用。3.with语句&#xff1a;将代码的作用域设置到一个特定的对象中。一般不建议过多…

服务器与客户端渲染(AngularJS与服务器端MVC)

关于服务器与客户端应用程序渲染的讨论很多。 虽然没有“一刀切”的解决方案&#xff0c;但我将尝试从不同的角度主张客户端&#xff08;特别是AngularJS&#xff09;。 首先是建筑。 建筑 做得好的架构已经明确定义了关注点分离&#xff08;SoS&#xff09; 。 在大多数情况下…

MySQL 数据类型简介 创建数据表及其字段约束

数据类型介绍 MySQL 数据类型分类 整型浮点型字符类型(char与varchar)日期类型枚举与集合具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非空唯一unique key 唯一约束not null 非空约束foreign key 外键约束创建表的的语法 CREATE TABLE[IF NOT EXISTS] tb…

elementUI的container布局设置全屏宽度

进用element UI的 container 布局&#xff0c;发现不能全屏铺满 添加了一行代码&#xff1a; .el-container{height:100%;padding:0;margin:0;width:100%;}发现高度占满全屏&#xff0c;但是宽度还没有 继续给 html,body加了 width&#xff1a;100%&#xff1b;还是没有任何…

【转】首次敏捷项目开发实践

首次采用敏捷方式进行开发&#xff0c;我想把我们的做法与大家分享下&#xff0c;同时希望大家指出我们的不足和需要改进的地方&#xff0c;让我们的项目进行的更顺利&#xff0c;目前项目已过三分之一&#xff0c;客户比较满意&#xff0c;还算顺利。项目简介&#xff1a;一个…

CSS border-radius边框圆角

在CSS3中提供了对边框进行圆角设定的支持&#xff0c;可对边框1~4个角进行圆角样式设置。 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 1. 介绍 1.1 圆角属性 CSS3提供了5种圆角属性 border-radius &#xff1a;同时设置4个边框的…

element实现动态路由+面包屑

要掌握&#xff1a;localStorage&#xff0c;组件封装 ​​​​ emm&#xff0c;第一次上传视频转gif的图片&#xff0c;效果不咋好。。。 视频转gif 的软件连接 http://www.zxt2007.com/downloads.html 找到一个可以截取部分视频制作gif图的软件https://soft.onlinedo.cn/gif…

Matlab——矩阵运算 矩阵基本变换操作

矩阵运算 加 - 减 .* 乘 ./ 左除 .\ 右除 .^ 次方 . 转置 除了加减符号&#xff0c;其余的运算符必须加“.” >> a 1:5a 1 2 3 4 5>> a-2 %减法ans -1 0 1 2 3 >> 2.*a-1 %乘法 减法ans 1 3 5 7 9 >&g…

Oracle最新的Java 8更新破坏了您的工具-它是如何发生的?

如果您最近一直在关注Java世界的消息&#xff0c;那么您可能听说过Oracle发布的最新Java 8构建&#xff0c;Java 8u11&#xff08;和Java 7u65&#xff09;引入了错误并破坏了一些流行的第三方工具&#xff0c;例如ZeroTurnaround的JRebel&#xff0c;Javassist&#xff0c;Goo…

为什么选择Dojo - 记Dojo中文博客正式开张

公告栏里写到&#xff1a;Dojo的高门槛一旦跨过&#xff0c;必将别无所求。含义有二&#xff1a;第一&#xff0c;Dojo难学&#xff1b;第二&#xff0c;Dojo很强大。 这也揭示了本博客的目标&#xff1a;帮助大家用好Dojo这个优秀的Ajax框架。 在回答为什么选择Dojo之前&#…

ExtJS 4.2 第一个程序

本篇介绍如何创建一个ExtJS应用程序。并通过创建目录、导入文件、编写代码及分析代码等步骤来解释第一个ExtJS程序。 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index.html 1.4 运行图 2. 代码分析 2.1 Ext.onReady() 2.2 Ext.create() 1. 创建程序 1.1 创建目录…

ZooKeeper,策展人以及微服务负载平衡的工作方式

Zookeeper如何确保每位工人都能愉快地从工作委托经理那里得到一些工作。 Apache ZooKeeper是注册&#xff0c;管理和发现在不同计算机上运行的服务的工具。 当我们必须处理具有许多节点的分布式系统时&#xff0c;它是技术堆栈中必不可少的成员&#xff0c;这些节点需要知道其…