阿奇在努力。
码龄3年
关注
提问 私信
  • 问答:1,011
    1,011
    总访问量
  • 暂无
    原创
  • 暂无
    排名
  • 6
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖北省
  • 加入CSDN时间: 2021-09-25
博客简介:

m0_62274511的博客

查看详细资料
个人成就
  • 获得0次点赞
  • 内容获得0次评论
  • 获得4次收藏
成就勋章
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

docker容器内部启动shell脚本多命令

发布问题 2024.08.31 ·
19 回答

java代码如何对geojson文件数据抽稀

发布问题 2023.05.09 ·
2 回答

springboot下载共享文件夹路径

发布问题 2023.03.21 ·
8 回答

通过mysql字段值查询geometry查询范围

发布问题 2023.03.05 ·
5 回答

访问webservice的ip报错

答:

楼主的问题已收藏

回答问题 2022.12.26

Java如何存储Geometry数据类型字段

答:

img

回答问题 2022.11.15

Java如何存储Geometry数据类型字段

发布问题 2022.11.15 ·
3 回答

宜搭自建应用填写表单上传图片,填写完毕后推送卡片消息,怎么才能在卡片里显示刚刚上传的图片(语言-javascript)

答:

既然有人帮你解决了,那我就不写了

回答问题 2022.11.11

中国象棋游戏,不必太复杂

答:

@Slf4j
public class BoardPanel extends JPanel implements LambdaMouseListener {

/**
 * 用于标记棋盘走棋痕迹
 */
private final transient TraceMarker traceMarker;
/**
 * 当前走棋开始坐标位置对应棋子
 */
private transient ChessPiece curFromPiece;
/**
 * 场景
 */
private transient Situation situation;

/**
 * Create the panel.
 */
public BoardPanel() {
    setBorder(new EmptyBorder(5, 5, 5, 5));
    setLayout(null);
    // 初始化标记符
    traceMarker = new TraceMarker(BoardPanel.this);
    // 添加鼠标事件
    addMouseListener(this);
}

/**
 * 更新标记
 */
public void updateMark(Place from, Place to) {
    // 更新标记
    curFromPiece = null;
    // 更改标记
    traceMarker.endedStep(from, to);
}

/**
 * 初始化所有标记
 */
public void initMark() {
    traceMarker.initMarker();
}

/**
 * 添加棋子
 */
public void init(Situation situation) {
    this.situation = situation;
    // 移除所有组件
    this.removeAll();
    // 添加棋子
    situation.getPieceList().forEach(it -> add(it.getComp()));
    situation.getSituationRecord().getEatenPieceList().forEach(it -> add(it.getComp()));
    // 初始化标记符
    traceMarker.initMarker();
    repaint();
}

/**
 * @param e 鼠标按压事件对象
 */
@Override
public void mouseReleased(MouseEvent e) {
    // 位置
    Place pointerPlace = ChessDefined.convertLocationToPlace(e.getPoint());
    if (pointerPlace == null) {
        return;
    }
    if (situation.winner() != null) {
        log.warn("已经存在胜利者: {}, 无法走棋", situation.winner());
        return;
    }
    // 当前走棋方
    @NonNull Part pointerPart = situation.getNextPart();
    // 当前焦点棋子
    ChessPiece pointerPiece = situation.getChessPiece(pointerPlace);
    // 通过当前方和当前位置判断是否可以走棋
    // step: form
    if (curFromPiece == null) {
        // 当前焦点位置有棋子且是本方棋子
        if (pointerPiece != null && pointerPiece.piece.part == pointerPart) {
            // 本方棋子, 同时是from指向
            curFromPiece = pointerPiece;
            traceMarker.setMarkFromPlace(pointerPlace);
            // 获取toList
            MyList<Place> list = curFromPiece.piece.role.find(new AnalysisBean(situation.generatePieces()), pointerPart, pointerPlace);
            traceMarker.showMarkPlace(list);
            ChessAudio.CLICK_FROM.play();
            log.info("true -> 当前焦点位置有棋子且是本方棋子");
            final ListPool listPool = ListPool.localPool();
            listPool.addListToPool(list);
            return;
        }
        log.warn("warning -> from 焦点指示错误");
        return;
    }
    if (pointerPlace.equals(curFromPiece.getPlace())) {
        log.warn("false -> from == to");
        return;
    }
    // 当前焦点位置有棋子且是本方棋子
    if (pointerPiece != null && pointerPiece.piece.part == pointerPart) {
        assert curFromPiece.piece.part == pointerPart : "当前焦点位置有棋子且是本方棋子 之前指向了对方棋子";
        // 更新 curFromPiece
        curFromPiece = pointerPiece;
        traceMarker.setMarkFromPlace(pointerPlace);
        MyList<Place> list = curFromPiece.piece.role.find(new AnalysisBean(situation.generatePieces()), pointerPart, pointerPlace);
        traceMarker.showMarkPlace(list);
        ChessAudio.CLICK_FROM.play();
        log.info("true -> 更新 curFromPiece");
        ListPool.localPool().addListToPool(list);
        return;
    }
    final StepBean stepBean = StepBean.of(curFromPiece.getPlace(), pointerPlace);
    // 如果不符合规则则直接返回
    final Piece[][] pieces = situation.generatePieces();
    if (!curFromPiece.piece.role.rule.check(pieces, pointerPart, stepBean.from, stepBean.to)) {
        // 如果当前指向棋子是本方棋子
        log.warn("不符合走棋规则");
        return;
    }
    // 如果达成长拦或者长捉, 则返回
    final StepBean forbidStepBean = situation.getForbidStepBean();
    if (forbidStepBean != null && forbidStepBean.from == stepBean.from && forbidStepBean.to == stepBean.to) {
        ChessAudio.MAN_MOV_ERROR.play();
        log.warn("长拦或长捉");
        return;
    }
    AnalysisBean analysisBean = new AnalysisBean(pieces);
    // 如果走棋后, 导致两个 BOSS 对面, 则返回
    if (!analysisBean.isBossF2FAfterStep(curFromPiece.piece, stepBean.from, stepBean.to)) {
        ChessAudio.MAN_MOV_ERROR.play();
        log.warn("BOSS面对面");
        return;
    }
    /* 模拟走一步棋, 之后再计算对方再走一步是否能够吃掉本方的 boss */
    if (analysisBean.simulateOneStep(stepBean, bean -> bean.canEatBossAfterOneAiStep(Part.getOpposite(pointerPart)))) {
        ChessAudio.MAN_MOV_ERROR.play();
        log.warn("BOSS 危险");
        if (!Application.config().isActiveWhenBeCheck()) {
            return;
        }
    }
    // 当前棋子无棋子或者为对方棋子, 且符合规则, 可以走棋
    Object[] objects = new Object[]{stepBean.from, stepBean.to, PlayerType.PEOPLE};
    final boolean sendSuccess = Application.context().getCommandExecutor().sendCommandWhenNotRun(CommandExecutor.CommandType.LocationPiece, objects);
    if (!sendSuccess) {
        log.warn("命令未发送成功: {} ==> {}", CommandExecutor.CommandType.LocationPiece, Arrays.toString(objects));
    }
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Image img = ChessImage.CHESS_BOARD.getImage();
    int imgWidth = img.getWidth(this);
    int imgHeight = img.getHeight(this);// 获得图片的宽度与高度
    int fWidth = getWidth();
    int fHeight = getHeight();// 获得窗口的宽度与高度
    int x = (fWidth - imgWidth) / 2;
    int y = (fHeight - imgHeight) / 2;
    // 520 576 514 567
    log.debug(String.format("%s,%s,%s,%s,%s,%s", imgWidth, imgHeight, fWidth, fHeight, x, y));
    g.drawImage(img, 0, 0, null);
}

}

回答问题 2022.10.26

shp图可以在arcgis里面正常打开查看,但是把这个shp图放到geoserver当中运行却是全白色

发布问题 2022.10.24 ·
1 回答

用java代码如何备份postgreSQL数据库

发布问题 2022.09.29 ·
4 回答

Oracle转postgresql此sql语句如何更改呀

发布问题 2022.09.17 ·
4 回答

记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率

发布资源 2022.08.11 ·
pdf

前端的第一个页面传值第二个页面如何接收?

答:

你说的就是这个吧,主要是第二个页面如何接收这个值呢

img

回答问题 2022.07.24

前端的第一个页面传值第二个页面如何接收?

发布问题 2022.07.24 ·
12 回答

关于oracle表的时间插入语法

答:

1.直接调用sql函数
sysdate函数直接获取当前时间
例如:
insert into table_name(id,nowtime) values (001,sysdate);

2.直接输入时间信息进行字段转换
用to_date()方法进行转换,
例如:
insert into table_name(id,nowtime) values (001,to_date(‘2021-09-26 10:32:05’,‘yyyy-mm-dd hh24:mi:ss’));
前面的参数是string类型,就是要转换的字符串,后面是前面的日期表式形式,oracle用后面的格式去解析前面的字符串,来生成数据库中的date类型。

另注:
查询从当前时间起过往30天之内的数据::
例如:
SELECT * FROM table_name where nowtime>= (sysdate -30) AND id=001;

回答问题 2022.07.14

两个节点之间如何断点续传(语言-java)

发布问题 2022.07.01 ·
3 回答

JAVA如何在不解压压缩包的情况下获取特定文件传给前端进行下载

发布问题 2022.06.26 ·
2 回答

IDEA进入出现这个页面是啥意思啊?

答:

点击Accept即可

回答问题 2022.06.13

对oracle数据库手动添加内容时报错

答:

在切换到超级管理员后,查看当前用户的权限,对照老版数据库,在另一个备份账户下创建了相关的表,并给当前用户添加上相关的操作权限。再切换回当前用户,尝试 “检查-编译”,返回OK,不再报红叹号。执行sql,OK,成功触发相关的触发器。
希望能对你有用!!!

回答问题 2022.05.18
加载更多