کمک:چطوری میشه برای برنامه بازی کرنومتر یا زمان سنج گذاشت؟

mojdeh-eng

عضو جدید
کاربر ممتاز
سلام...
من برنامه یه بازی نوشتم؛حالا میخوام براش یه کرنومتر یا همون زمان سنج بذارم که از صفر شروع بشه و به صورت صعودی افزایش پیداکنه(افزایش صعودی زمان و چگونگی تغییرمقداراولیه که زمان ازاون شروع میشه خیلی برام مهمه)...
 

sayyad84

متخصص زبان Assembly
کاربر ممتاز
سلام...
من برنامه یه بازی نوشتم؛حالا میخوام براش یه کرنومتر یا همون زمان سنج بذارم که از صفر شروع بشه و به صورت صعودی افزایش پیداکنه(افزایش صعودی زمان و چگونگی تغییرمقداراولیه که زمان ازاون شروع میشه خیلی برام مهمه)...
با سلام،
همون طور که قبلاً گفتم، خیلی برنامه نویسی جاوا رو بلد نیستم! اما یه جستجوی ساده تو اینترنت می تونه کمک تون کنه! کافیه که دنبال یه سورس کد اماده بگردید که توش از Timer استفاده شده باشه! مثلاً این!
 

کربلایی

مدیر بازنشسته
سلام
برای پیاده سازی کلاس تایمر بهتره از دو کلاس Date و GeogorianCalender که در پکیج java.util قرار دارند استفاده کنیم.
حالت هایی که این کلاس بهتره داشته باشن عبارتند از:
RESET: تایمر رو صفر میکنه
RUNING: تایمر داره کار میکنه و زمان سپری شده رو اندازه گیری میکنه
STOPPED: تامر متوقف شده
SUSPENDED: تایمر به تعویق افتاده

برای پیاده سازی از یک واسط به نام Korno که خودمون طراحی کردیم استفاده میکنیم.
کدها رو ببنید:
اول کدهای مربوط به واسط:
کد:
interface Korno {
    public void reset();
    public void start();
    public void stop();
    public void suspend();
    public void resume();
    
    //The spent time in running state
    public long getSpentTime();
    
    public int getState();
    
    public static final int RESET = 0;
    public static final int RUNING = 1;
    public static final int SUSPENDED = 2;
    public static final int STOPED = 3;
}

و در انتها کدهای مربوط به کلاس:
کد:
import java.util.*;

public class jcTimer implements Korno{
    
    private int state = RESET;
    private long spend = 0;
    private Date lastStartTime;
    
    public jcTimer(){
        reset();
    }
    
    private void setSpend(long time){
        spend = time;
    }
    
    private long getSpend(){
        return spend;
    }
    
    private void setLastStartTime(Date myDate){
        lastStartTime = myDate;
    }
    
    private Date getlastStartTime(){
        return lastStartTime;
    }
    
    private long getStartTime(){
        return getlastStartTime().getTime();
    }
    
    private void recordSpendTime(){
        Date now = new Date();
        long incr = now.getTime() - getStartTime();
        setSpend(getSpend() + incr);
    }
    
    private void setState(int st){
        state = st;
    }
    
    public int getState(){
        return state;
    }

    public void reset() {
        setState(RESET);
        setSpend(0);
    }

    public void start() {
        if (getState() == RESET){
            setLastStartTime(new Date());
            setState(RUNING);
        }            
    }

    public void stop() {
        if (getState() == RUNING){
            recordSpendTime();
            setState(STOPED);
        }
        else if(getState() == SUSPENDED){
            setState(STOPED);
        }
    }

    public void suspend() {
        if (getState() == RUNING){
            recordSpendTime();
            setState(SUSPENDED);
        }
    }

    public void resume() {
        if (getState() == SUSPENDED){
            setLastStartTime(new Date());
            setState(RUNING);
        }
    }

    public long getSpentTime() {
        long incr = 0;
        if (getState() == RUNING){
            Date now = new Date();
            incr = now.getTime() - getStartTime();
        }
        setSpend(getSpend() + incr);
        return getSpend();
    }   
}

این کلاس زمان سپری شده رو بر حسب میلی ثانیه(long) برمیگردونه.

دقت کنید که برای محاسبه زمان سپری شده از کلاس Date استفاده کردم و نیازی به حلقه ها و نخ ها نیست.
موفق باشید
 

mood-sports

عضو جدید
سلام به همه من میخوام برنامه ای درست کنم که تایمر زمان باشه یعنی بهش تاریخ ساعت و دقیقه و ثانیه بدی بعد معکوسش کنه یعنی بگی ساعت 8:45:20 روز 1 فروردین یا بجاش بگی مثلا 10 روز دیگه رو بصورت تایمر نشون بده و کم کنه از وقتش این برنامه رو هم میخام تحت وب بنویسم هم به زبان سی پلاس پلاس لطفا کمکم کنید ممنون میشم
اینم ایمیلم اگی کسی تونست کمکم کنه
ali_moode_city@yahoo.com
 

Similar threads

بالا