Java 奥赛罗游戏计时器工作不正常

Java 奥赛罗游戏计时器工作不正常,java,timer,applet,Java,Timer,Applet,我只是Java的初学者。我们有一个大学项目,我们正在制作一个名为Otherlo(也称为reversi)的游戏,我们正在使用Java小程序进行游戏。董事会设计和游戏是完整的,工作良好,但我们有一个问题的计时器 问题是,直到计时器完全过期,玩家的移动才会被检测到,即假设每个移动的计时器为10秒,如果用户将其移动放置在第5秒,则仅在10秒后才会检测到其移动。此行为不起任何作用 我采用的方法是: 在小程序屏幕上显示时间(整数) 睡一会儿 增加时间和更新图形 整个过程都被放在了循环中,这实际上是在制造问题

我只是Java的初学者。我们有一个大学项目,我们正在制作一个名为Otherlo(也称为reversi)的游戏,我们正在使用Java小程序进行游戏。董事会设计和游戏是完整的,工作良好,但我们有一个问题的计时器

问题是,直到计时器完全过期,玩家的移动才会被检测到,即假设每个移动的计时器为10秒,如果用户将其移动放置在第5秒,则仅在10秒后才会检测到其移动。此行为不起任何作用

我采用的方法是:

  • 在小程序屏幕上显示时间(整数)
  • 睡一会儿
  • 增加时间和更新图形
  • 整个过程都被放在了循环中,这实际上是在制造问题。我需要一个更好的,实际上是一个工作的修改这个代码

    下面是两个相关函数的代码

    void startTimer() {
    
        Graphics g = getGraphics();
    
        for(sec =0 ; sec < 10 ; sec++){
    
            String time = new String();
            time = Integer.toString(sec);
            g.drawString(time, WIDTH+80, 145); 
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(NewApplet.class.getName()).log(Level.SEVERE, null, ex);
            }
            update(getGraphics());
        }
    }
    
    
    public boolean mouseUp(Event e, int x, int y) {
    
    
        int column = (int)(x / (WIDTH / 8));
        int row    = (int)(y / (WIDTH / 8));
    
        if (turn == BLACK) {
                if (placeLegalCheck(column, row, turn) == true){
                    flipDisk(column, row, turn);
                    turn = - turn;  
                    diskCount();
                    startTimer();
                    update(getGraphics());
    
    
                    try {
                      Thread.sleep(500);
                    } catch (Exception excep){
                    }
                }
        }
    
        if (turn == WHITE) {
                if (placeLegalCheck(column, row, turn) == true){
                    flipDisk(column, row, turn);
                    turn = - turn;  
                    diskCount();
                    startTimer();
                    update(getGraphics());
    
                    try {
                      Thread.sleep(500);
                    } catch (Exception excep){
                    }
                }
        }
    return true;
    }
    
    void startTimer(){
    Graphics g=getGraphics();
    用于(秒=0;秒<10;秒++){
    字符串时间=新字符串();
    时间=整数。toString(秒);
    g、 抽绳(时间,宽度+80145);
    试一试{
    睡眠(1000);
    }捕获(中断异常例外){
    Logger.getLogger(NewApplet.class.getName()).log(Level.SEVERE,null,ex);
    }
    更新(getGraphics());
    }
    }
    公共布尔鼠标(事件e,整数x,整数y){
    int列=(int)(x/(宽度/8));
    int行=(int)(y/(宽度/8));
    如果(转向==黑色){
    if(placeLegalCheck(列、行、圈)==true){
    翻转磁盘(列、行、圈);
    转身=-转身;
    diskCount();
    startTimer();
    更新(getGraphics());
    试一试{
    睡眠(500);
    }捕获(例外例外){
    }
    }
    }
    如果(旋转==白色){
    if(placeLegalCheck(列、行、圈)==true){
    翻转磁盘(列、行、圈);
    转身=-转身;
    diskCount();
    startTimer();
    更新(getGraphics());
    试一试{
    睡眠(500);
    }捕获(例外例外){
    }
    }
    }
    返回true;
    }
    
    getGraphics
    不是自定义绘制的方式。您不应手动调用
    更新
    ,这不是您的责任,请使用
    重新绘制
    。小程序也不推荐使用,可能应该避免使用它们。我会看一看,然后。您可能还应该看看感谢您的帮助suggestions@MadProgrammer但是你能建议修改一下这个代码吗…BCU我只有一天的时间,所以不能改变整个框架..类似于for循环中的if语句,它检测到mouseUp事件并爆发..一些解决方案可能不起作用,您从错误的方向解决了问题,并且从根本上做了错误的事情,“创可贴”无法解决此问题。定制绘画的方式不是“创可贴”
    getGraphics
    。您不应手动调用
    更新
    ,这不是您的责任,请使用
    重新绘制
    。小程序也不推荐使用,可能应该避免使用它们。我会看一看,然后。您可能还应该看看感谢您的帮助suggestions@MadProgrammer但是你能建议修改一下这个代码吗…BCU我只有一天的时间,所以不能改变整个框架..类似于for循环中的if语句,它检测到mouseUp事件并爆发..一些解决方案可能不起作用,你从错误的方向处理问题,从根本上做了错误的事情,“创可贴”不能解决这个问题