//这是2020年某上海第一建筑施工队亚军球队代码,仅供参考
/*
Copyright (c) 2000-2003, Jelle Kok, University of Amsterdam
All rights reserved.

Modified by ming gao Hfut..for server V14
1). dash dirction for not only forward and back but also left right and other 45*(-3,-1,1,3) dirction,,
2). add Stamina.Capacity and the senceHandle analy systerm and worldmodel update

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

3. Neither the name of the University of Amsterdam nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*! \file PlayerTeams.cpp
<pre>
<b>File:</b>          PlayerTest.cpp
<b>Project:</b>       Robocup Soccer Simulation Team: UvA Trilearn
<b>Authors:</b>       Jelle Kok
<b>Created:</b>       10/12/2000
<b>Last Revision:</b> $ID$
<b>Contents:</b>      This file contains the class definitions for the
                      Player that are used to test the teams' high level
                      strategy.
<hr size=2>
<h2><b>Changes</b></h2>
<b>Date</b>             <b>Author</b>          <b>Comment</b>
10/12/2000        Jelle Kok       Initial version created
</pre>
*/

#include "Player.h"

/*!This method is the first complete simple team and defines the actions taken
   by all the players on the field (excluding the goalie). It is based on the
   high-level actions taken by the simple team FC Portugal that it released in
   2000. The players do the following:
   - if ball is kickable
       kick ball to goal (random corner of goal)
   - else if i am fastest player to ball
       intercept the ball
   - else
       move to strategic position based on your home position and pos ball */
///misol.gao fixed--->
///澶у濂斤紒寰堥珮鍏翠綘浠壘鍒颁簡杩欎釜鍑芥暟锛佽繖涓嚱鏁帮紝灏辨槸鎴戜滑鐞冮槦鍐崇瓥鐨勮捣鐐癸紝鎵€鏈夌殑姣旇禌绛栫暐閮藉湪杩欓噷锛屼粠杩欓噷鍑哄彂锛屼笉浼氶敊鐨勶紒
/// deMeer5 鏄悆鍛樼殑绛栫暐鍑芥暟锛?鍦ㄤ笅闈綘浠細鍙戠幇 deMeer5_goalie 閭d釜鏄畧闂ㄥ憳鐨勶紝鐩墠鍩烘湰鍙互蹇界暐銆?
SoccerCommand Player::deMeer5(  )
{

SoccerCommand soc(CMD_ILLEGAL);// 瀹氫箟涓€涓懡浠ゅ璞★紝鍚庨潰浼氶绻佺敤瀹冩潵鏋勯€犱竴涓悆鍛樺姩浣滃懡浠?
    VecPosition   posAgent = WM->getAgentGlobalPosition();// 涓€涓偣瀵硅薄锛岃〃绀篈gent(鍙互鐞嗚В鎴愬綋鍓嶅湪鎵ц杩欎釜浠g爜鐨勭悆鍛樺畠鑷繁)鐨勪綅缃?
    ///涓嬮潰鎴戜滑鎶娾€滄垜鈥滃氨鐞嗚В鎴愬綋鍓嶆墽琛岃繖涓唬鐮佺殑Agent锛屽洜涓烘湁11涓悆鍛樺湪鎵ц杩欎釜浠g爜锛屾墍浠ュ浜庢瘡涓悆鍛?鑲畾鏈変竴涓€滄垜鈥濆瓨鍦ㄣ€?
    VecPosition   posBall  = WM->getBallPos();// 鐞冪殑浣嶇疆
    int           iTmp;

if ( WM->isBeforeKickOff( ) ) /// 濡傛灉杩樻病鏈夊紑鐞?娉ㄦ剰锛?杩欓噷鍙槸杩樻病鏈夊紑鐞冪殑鎯呭喌锛?瑕佸仛寮€鐞冨悗鐨勫喅绛栵紝鍚戜笅闈㈢户缁壘鍙﹀涓€涓?WM->isBeforeKickOff( )
    {
        if ( WM->isKickOffUs( ) && WM->getPlayerNumber() == 9 ) // 9 takes kick //灏辨壘9鍙峰幓寮€鐞冿紙鍒ゆ柇浜嗘槸涓嶆槸鎴戜滑寮€鐞冿紝鍜屾垜"Agent"鏄笉鏄?鍙凤級
        {
            if ( WM->isBallKickable() )// 褰撶悆瀵逛簬鎴戞潵璇存槸涓嶆槸鍙涪锛?
            {
                VecPosition posGoal( PITCH_LENGTH/2.0,
                                     (-1 + 2*(WM->getCurrentCycle()%2)) *
                                     0.4 * SS->getGoalWidth() );// 璁$畻涓€涓皠闂ㄧ偣
                soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal   浠ユ渶澶ч€熷害鎶婄悆韪㈠悜灏勯棬鐐癸紒
                Log.log( 100, "take kick off" );
            }
            else //濡傛灉鐞冨浜庢垜涓嶅彲韪紝閭f垜灏卞幓鎶㈢悆锛?
            {
                soc = intercept( false );
                Log.log( 100, "move to ball to take kick-off" );
            }
            ACT->putCommandInQueue( soc );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            return soc;
        }
        //涓嬮潰涓嶇敤绠★紒
        if ( formations->getFormation() != FT_INITIAL || // not in kickoff formation
                posAgent.getDistanceTo( WM->getStrategicPosition() ) > 2.0 )
        {
            formations->setFormation( FT_INITIAL );       // go to kick_off formation
            ACT->putCommandInQueue( soc=teleportToPos( WM->getStrategicPosition() ));
        }
        else                                            // else turn to center
        {
            ACT->putCommandInQueue( soc=turnBodyToPoint( VecPosition( 0, 0 ), 0 ) );
            ACT->putCommandInQueue( alignNeckWithBody( ) );
        }
    }
    else  /// 杩欎釜else 澶у搴旇鍙互鐭ラ亾锛屾槸寮€鐞冧互鍚庣殑鍐崇瓥锛?涔熷氨鏄渶閲嶈鐨勬瘮璧涙甯告ā寮忎笅鐨勫喅绛栵紒 寰堥噸瑕侊紝鎴戜滑灏变粠杩欓噷寮€濮嬶紒锛侊紒锛?Start锛?
    {
        formations->setFormation( FT_433_OFFENSIVE );//璁剧疆鐞冮槦鍑哄満闃靛舰锛?
        soc.commandType = CMD_ILLEGAL;//鍒濆鍖杝oc鍛戒护瀵硅薄

///test SoccerCommand(CMD_DASH, 80, 45) for v14 ... fixed by misol.gao
       /* if ( WM->getPlayerNumber() == 8 )
        {
            soc = SoccerCommand(CMD_DASH, 80, 45);
            ACT->putCommandInQueue( soc ); // 鏀惧叆鍛戒护闃熷垪
            ACT->putCommandInQueue( alignNeckWithBody() );
            return soc;
        }*/

if ( WM->getConfidence( OBJECT_BALL ) < PS->getBallConfThr() )//鍒ゆ柇瀵圭悆鐨勫彲淇″害锛屽鏋滃皬浜庢煇涓槇鍊硷紝鍒?..涔熷氨鏄锛屽鏋滃緢澶氬懆鏈熸病鏈夌湅鍒扮悆鍦ㄥ摢閲屼簡
        {
            ACT->putCommandInQueue( soc = searchBall() );   // if ball pos unknown //鎵ц鎵剧悆鍔ㄤ綔锛佸苟鏀惧叆鍛戒护闃熷垪
            ACT->putCommandInQueue( alignNeckWithBody( ) ); // search for it //鍚屾椂鎶婅剸瀛愰殢韬綋涓€璧疯浆
        }
        
        
        else if ( WM->isBallKickable())                   // if kickable // 濡傛灉鐞冨凡鐭ワ紝鑰屼笖褰撳墠鐞冨湪鎴戣剼涓?鍙涪)
        {
          
      /*
        wm->ndjvnjdsnjvkxjc???
        cdskvkvmnsncmsm;;
        s,c,,s,c,s,c ''
        asmdkasmkcs,???
        fw3f,smcscsc
        s,xs,c ,sca
        aslc,salc,ac
        
    */
      //浠ヤ笂鏄紪璇戞í鍛戒护锛屼笉鐢ㄧ
      
      
      
       Log.log( 100, "chongf  f f f !!!", iTmp );
            soc = intercept( false );

if ( soc.commandType == CMD_DASH &&           
                    WM->getAgentStamina().getStamina() <
                    SS->getRecoverDecThr()*SS->getStaminaMax()+200 )
            {
                soc.dPower = 30.0 * WM->getAgentStamina().getRecovery();
                
            }
            else                                           
             
        {
        VecPosition posGoal(PITCH_LENGTH/2.0,
                (-1+2*(WM->getCurrentCycle()%2))*0.4*SS->getGoalWidth());
        soc = kickTo(posGoal,SS->getBallSpeedMax());
        
        
        
        ACT->putCommandInQueue( soc ); // 鏀惧叆鍛戒护闃熷垪
        ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) ); // 鎶婅剸瀛愯浆鍚戠悆锛屼篃灏辨槸涓€鐩寸湅鐫€鐞?
        
            Log.log( 100, "kick ball" );
        }}
        else if ( WM->getFastestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL, &iTmp )
                  == WM->getAgentObjectType()  && !WM->isDeadBallThem() ) // 濡傛灉鐞冧笉鍦ㄦ垜鐨勬帶鍒惰寖鍥翠笅锛屼絾鏄綋鍓嶈兘鏈€蹇姠鍒扮悆鐨勬槸鎴戯紝閭f垜灏卞幓鎵ц鎶㈢悆鍔ㄤ綔
        {                                                // if fastest to ball
            Log.log( 100, "I am fastest to ball; can get there in %d cycles", iTmp );
            soc = intercept( false );                      // intercept the ball

if ( soc.commandType == CMD_DASH &&            // if stamina low  // 杩欓噷鏄浣撳姏鐨勪竴涓繚鎶わ紝浣撳姏杩囦綆灏辨妸Dash鐨刣Power鍑忓皬 淇濇姢浣撳姏
                    WM->getAgentStamina().getStamina() <
                    SS->getRecoverDecThr()*SS->getStaminaMax()+200 )
            {
                soc.dPower = 30.0 * WM->getAgentStamina().getRecovery(); // dash slow
                ACT->putCommandInQueue( soc );
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
            else                                           // if stamina high
            {
                ACT->putCommandInQueue( soc );               // dash as intended
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
        }
        else if ( posAgent.getDistanceTo(WM->getStrategicPosition()) >
                  1.5 + fabs(posAgent.getX()-posBall.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());
                ACT->putCommandInQueue( soc );            // move to strategic pos
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
            else                                        // else watch ball
            {
                ACT->putCommandInQueue( soc = turnBodyToObject( OBJECT_BALL ) );
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
        }
        else if ( fabs( WM->getRelativeAngle( OBJECT_BALL ) ) > 1.0 ) // watch ball //鍏朵粬鍓╀笅鐨勭悆鍛樺憿锛屽氨鐪嬬悆銆傦紒
        {///杩欓噷灏辨槸鏃犵悆闃熷憳鐨勮窇浣嶅喅绛?
            ACT->putCommandInQueue( soc = turnBodyToObject( OBJECT_BALL ) );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
        }
        else                                         // nothing to do
            ACT->putCommandInQueue( SoccerCommand(CMD_TURNNECK,0.0) );
    }
    return soc;
}

/*!This method is a simple goalie based on the goalie of the simple Team of
   FC Portugal. It defines a rectangle in its penalty area and moves to the
   position on this rectangle where the ball intersects if you make a line
   between the ball position and the center of the goal. If the ball can
   be intercepted in the own penalty area the ball is intercepted and catched.
*/
SoccerCommand Player::deMeer5_goalie(  )
{
    int i;
    SoccerCommand soc;
    VecPosition   posAgent = WM->getAgentGlobalPosition();
    AngDeg        angBody  = WM->getAgentGlobalBodyAngle();

// define the top and bottom position of a rectangle in which keeper moves
    static const VecPosition posLeftTop( -PITCH_LENGTH/2.0 +
                                         0.7*PENALTY_AREA_LENGTH, -PENALTY_AREA_WIDTH/4.0 );
    static const VecPosition posRightTop( -PITCH_LENGTH/2.0 +
                                          0.7*PENALTY_AREA_LENGTH, +PENALTY_AREA_WIDTH/4.0 );

// define the borders of this rectangle using the two points.
    static Line  lineFront = Line::makeLineFromTwoPoints(posLeftTop,posRightTop);
    static Line  lineLeft  = Line::makeLineFromTwoPoints(
                                 VecPosition( -50.0, posLeftTop.getY()), posLeftTop );
    static Line  lineRight = Line::makeLineFromTwoPoints(
                                 VecPosition( -50.0, posRightTop.getY()),posRightTop );

if ( WM->isBeforeKickOff( ) )
    {/*
      a,a mav
      sadasd
      
      
      xc
      x
      cx
      c
      x
      c
      x
      c
      x
      c
      xc
      x
      x
      x
      
      x
      
      x
      xx
      */
        if ( formations->getFormation() != FT_INITIAL || // not in kickoff formation
                posAgent.getDistanceTo( WM->getStrategicPosition() ) > 2.0 )
        {
            formations->setFormation( FT_INITIAL );       // go to kick_off formation
            ACT->putCommandInQueue( soc=teleportToPos(WM->getStrategicPosition()) );
        }
        else                                            // else turn to center
        {
            ACT->putCommandInQueue( soc = turnBodyToPoint( VecPosition( 0, 0 ), 0 ));
            ACT->putCommandInQueue( alignNeckWithBody( ) );
        }
        return soc;
    }

if ( WM->getConfidence( OBJECT_BALL ) < PS->getBallConfThr() )
    {                                                // confidence ball too  low
        ACT->putCommandInQueue( searchBall() );        // search ball
        ACT->putCommandInQueue( alignNeckWithBody( ) );
    }
    else if ( WM->getPlayMode() == PM_PLAY_ON || WM->isFreeKickThem() ||
              WM->isCornerKickThem() )
    {
        if ( WM->isBallCatchable() )
        {
            ACT->putCommandInQueue( soc = catchBall() );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
        }
        else if ( WM->isBallKickable() )
        {
            soc = kickTo( VecPosition(0,posAgent.getY()*2.0), 2.0 );
            ACT->putCommandInQueue( soc );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
        }
        else if ( WM->isInOwnPenaltyArea( getInterceptionPointBall( &i, true ) ) &&
                  WM->getFastestInSetTo( OBJECT_SET_PLAYERS, OBJECT_BALL, &i ) ==
                  WM->getAgentObjectType() )
        {
            ACT->putCommandInQueue( soc = intercept( true ) );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
        }
        else
        {
            // make line between own goal and the ball
            VecPosition posMyGoal = ( WM->getSide() == SIDE_LEFT )
                                    ? SoccerTypes::getGlobalPositionFlag(OBJECT_GOAL_L, SIDE_LEFT )
                                    : SoccerTypes::getGlobalPositionFlag(OBJECT_GOAL_R, SIDE_RIGHT);
            Line lineBall = Line::makeLineFromTwoPoints( WM->getBallPos(),posMyGoal);

// determine where your front line intersects with the line from ball
            //This is a joke!!!
            VecPosition posIntersect = lineFront.getIntersection( lineBall );

// outside rectangle, use line at side to get intersection
            if (posIntersect.isRightOf( posRightTop ) )
                posIntersect = lineRight.getIntersection( lineBall );
            else if (posIntersect.isLeftOf( posLeftTop )  )
                posIntersect = lineLeft.getIntersection( lineBall );

if ( posIntersect.getX() < -49.0 )
                posIntersect.setX( -49.0 );

// and move to this position
            if ( posIntersect.getDistanceTo( WM->getAgentGlobalPosition() ) > 0.5 )
            {
                soc = moveToPos( posIntersect, PS->getPlayerWhenToTurnAngle() );
                ACT->putCommandInQueue( soc );
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
            else
            {
                ACT->putCommandInQueue( soc = turnBodyToObject( OBJECT_BALL ) );
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
        }
    }
    else if ( WM->isFreeKickUs() == true || WM->isGoalKickUs() == true )
    {
        
        if ( WM->isBallKickable() )
        {
            if ( WM->getTimeSinceLastCatch() == 25 && WM->isFreeKickUs() )
            {
                // move to position with lesser opponents.
                if ( WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS,
                                             Circle(posRightTop, 15.0 )) <
                        WM->getNrInSetInCircle( OBJECT_SET_OPPONENTS,
                                                Circle(posLeftTop,  15.0 )) )
                    soc.makeCommand( CMD_MOVE,posRightTop.getX(),posRightTop.getY(),0.0);
                else
                    soc.makeCommand( CMD_MOVE,posLeftTop.getX(), posLeftTop.getY(), 0.0);
                ACT->putCommandInQueue( soc );
            }
            else if ( WM->getTimeSinceLastCatch() > 28 )
            {
                soc = kickTo( VecPosition(0,posAgent.getY()*2.0), 2.0 );
                ACT->putCommandInQueue( soc );
            }
            else if ( WM->getTimeSinceLastCatch() < 25 )
            {
                VecPosition posSide( 0.0, posAgent.getY() );
                if ( fabs( (posSide - posAgent).getDirection() - angBody) > 10 )
                {
                    soc = turnBodyToPoint( posSide );
                    ACT->putCommandInQueue( soc );
                }
                ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
            }
        }
        else if ( WM->isGoalKickUs()  )
        {
            ACT->putCommandInQueue( soc = intercept( true ) );
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
        }
        else
            ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
    }
    else
    {
        
        ACT->putCommandInQueue( soc = turnBodyToObject( OBJECT_BALL ) );
        ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );
    }
    return soc;
}

合工大机器人足球仿真robocup2D球队代码实验七实验验收相关推荐

  1. 合工大机器人足球仿真考试题56题(底层uva)

    题目要求 //拿球后行为,利用已有 Worldmodel(21) (1)在 playOn 模式下,拿到球以后朝前方快速带球. (2)在 PlayOn 模式下,拿到球以后朝球门方向慢速带球. (3)在 ...

  2. 机器人足球仿真第一次作业

    机器人足球仿真第一次作业 机器人足球仿真是一门与RoboCup有关的一门课程,讲到了有关球员的决策,球队的开发等知识. 这是老师布置的第一次作业,基本任务就是解析字符串,其功能相当于uva中Prase ...

  3. 机器人足球仿真中的三角进攻算法研究

    摘 要:机器人足球仿真系统提供了实时对抗环境下研究多智能体协作问题的一个良好平台.本文基于仿真环境下的理论基础及模型,通过逐场次逐帧地测试与分析研究,设计出用于控制机器人协作队形的三角进攻算法,并对基 ...

  4. 合肥工业大学机器人足球仿真robcup作业二(python实现)附代码有注释

    用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点. 要求各给出每个案例的至少一个示例的程序. 这是第二次机器人足球的作业代码,写的比较潦草,但是用的方法还是通俗易懂的,基本都 ...

  5. 合工大 机器人技术 作业

    共四次作业报告,CSDN下载:下载链接 作业内容: <机器人技术>第一次作业 题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要 ...

  6. 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    第三次作业 题目:已知2个点的信息,定位自己的绝对坐标. 设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0 ...

  7. 合工大机器人技术第四次作业

    仿真 足球机器人 第四次作业 决策树 该实例中总共有12个对象,6个类为"是",6个类为"否" I(p,n)=-(6/12)log2(6/12)-(6/12)l ...

  8. 机器人足球仿真第二次作业

    要求 用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点 思路 设计直线,圆,矩形的类,运用数学定义来判断是否有交点,并计算出交点的坐标. 代码示例:(使用 VS Code 运 ...

  9. 合工大机器人技术第一次个人作业

    一点说明: 由于处理see信息的模式字符串过于复杂,而且耗费精力,此处仅仅使用了字典来进行处理,而且也没有分清楚每个数字具体的物理意义.最后将字典格式的json文件写入了文件.可以使用format() ...

最新文章

  1. 通过三个直观步骤理解ROC曲线
  2. ExtJs中column与form布局的再次领悟
  3. RhinoMock入门(7)——Do,With和Record-playback
  4. linux下syscall函数 间接系统调用
  5. 地磅称重软件源码_【漯河衡器】浅谈地磅称重的发展趋势
  6. 【theano-windows】学习笔记七——logistic回归
  7. lintcode 最大子数组III
  8. 电脑字体模糊_小红书上传视频模糊?做小红书视频99%的工具都在这了
  9. 怎样去掉a标签的蓝框
  10. oracle下查询的sql已经超出IIS响应时间
  11. ISweek工采网·工采电子参展OFweek维科网 2021全球数字经济产业大会圆满落幕
  12. pdf照片显示正常打印时被翻转_【20考研】现场确认完没事了?!准考证打印别大意!...
  13. java 校验银行卡号_Java之——基于Luhn算法的银行卡卡号的格式校验
  14. 【spring事务管理】
  15. JS - 解决鼠标单击、双击事件冲突问题(同时实现两种事件响应)
  16. 当人们流行“炮轰”联想时:没想到的联想
  17. 超强指南!1分钟学会给电脑磁盘分区!
  18. mysql 复制数据库
  19. 《宝宝出生特别纪念日》
  20. powerdesinger 批量修改表前缀

热门文章

  1. 香港美食攻略(3)——源记喳咋
  2. 服饰业最佳实践 – ZARA的十大成功要素
  3. java 通过string对堆栈详解
  4. AiDD AI+软件研发数字峰会开启编程新纪元
  5. 【Vue】报错信息: [WDS] Errors while compiling. Reload prevented.
  6. 如何在PDF中插入另一个PDF文件的页面
  7. 第844期机器学习日报(2017-01-09)
  8. 手机静音状态下也让播出声音
  9. 520送什么给男朋友最好?送男朋友礼物排行榜
  10. 人脸识别-多张人脸检测