⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spcurve.java

📁 粉红知己Java源码
💻 JAVA
字号:
// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   SPCurve.java

package ladyconf;

import com.siemens.mp.game.ExtendedImage;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.lcdui.*;

// Referenced classes of package ladyconf:
//            SPMonth, SPKernel

public class SPCurve extends Canvas
    implements CommandListener
{

    public SPCurve(SPKernel spk)
    {
        OKCmd = new Command("\u786E\u5B9A", 4, 0);
        DetailCmd = new Command("\u8BE6\u7EC6\u63CF\u8FF0", 4, 0);
        BackCmd = new Command("\u8FD4\u56DE", 4, 1);
        ExitCmd = new Command("\u9000\u51FA", 7, 2);
        day = Calendar.getInstance();
        DHEIGHT = getHeight();
        ExScreenImg = new ExtendedImage(Image.createImage(104, DHEIGHT));
        Exg = ExScreenImg.getImage().getGraphics();
        pInput = new Form("\u751F\u7269\u8282\u5F8B\u8BA1\u7B97");
        lastdate = new DateField("\u8BF7\u8F93\u5165\u60A8\u7684\u751F\u65E5\n(\u65E5\u6708\u5E74):", 1);
        lastdate.setDate(new Date(System.currentTimeMillis()));
        pInput.append(lastdate);
        pInput.addCommand(OKCmd);
        pInput.addCommand(BackCmd);
        pInput.addCommand(ExitCmd);
        addCommand(DetailCmd);
        addCommand(BackCmd);
        addCommand(ExitCmd);
        pKernel = spk;
    }

    public void activate(Display disp)
    {
        display = disp;
        pInput.setCommandListener(this);
        display.setCurrent(pInput);
    }

    public void show()
    {
        setCommandListener(this);
        display.setCurrent(this);
    }

    public void setDate(Date sdate)
    {
        day.setTime(sdate);
        day.set(10, 0);
        day.set(12, 0);
        day.set(13, 0);
        birthday = day.getTime().getTime();
        day.setTime(new Date(System.currentTimeMillis()));
        thisYear = day.get(1);
        thisMonth = day.get(2) + 1;
        thisDay = day.get(5);
        CalcDate();
    }

    private void CalcDate()
    {
        day.set(1, thisYear);
        day.set(2, thisMonth - 1);
        day.set(5, 1);
        day.set(10, 0);
        day.set(12, 0);
        day.set(13, 0);
        firstday = day.getTime().getTime();
        lifedate = (firstday - birthday) / (long)0x5265c00;
        if(thisMonth == 12)
        {
            day.set(1, thisYear + 1);
            day.set(2, 0);
        } else
        {
            day.set(2, thisMonth);
        }
        long msdate = day.getTime().getTime();
        msdate -= 0x5265c00;
        day.setTime(new Date(msdate));
        DateCount = day.get(5);
        if(thisDay > DateCount)
            thisDay = DateCount;
    }

    protected void paint(Graphics grap)
    {
        if(type == 0)
            DrawCurve();
        redraw();
    }

    private void redraw()
    {
        ExScreenImg.blitToScreen(0, 0);
    }

    private void DrawCurve()
    {
        ExScreenImg.clear((byte)0);
        int left = 8;
        int top = 39;
        int space = 3;
        int height = 20;
        height = (DHEIGHT - 38) / 2;
        top = DHEIGHT / 2 - 1;
        Exg.setFont(SPMonth.BoldFont);
        Exg.drawString(String.valueOf(String.valueOf((new StringBuffer(String.valueOf(String.valueOf(thisYear)))).append("\u5E74").append(thisMonth).append("\u6708").append(thisDay).append("\u65E5"))), 0, 0, 20);
        Exg.setFont(SPMonth.SysFont);
        int sx = left + (thisDay - 1) * space;
        Exg.drawLine(sx, top - height - 2, sx, top - height - 2);
        Exg.drawLine(sx - 1, top - height - 3, sx + 1, top - height - 3);
        Exg.drawLine(sx - 2, top - height - 4, sx + 2, top - height - 4);
        Exg.drawLine(sx - 3, top - height - 5, sx + 3, top - height - 5);
        Exg.drawLine(sx, top + height + 2, sx, top + height + 2);
        Exg.drawLine(sx - 1, top + height + 3, sx + 1, top + height + 3);
        Exg.drawLine(sx - 2, top + height + 4, sx + 2, top + height + 4);
        Exg.drawLine(sx - 3, top + height + 5, sx + 3, top + height + 5);
        Exg.setStrokeStyle(1);
        Exg.drawLine(1, DHEIGHT - 12, 1, DHEIGHT - 1);
        Exg.setStrokeStyle(0);
        Exg.drawLine(33, DHEIGHT - 12, 33, DHEIGHT - 9);
        Exg.drawLine(33, DHEIGHT - 4, 33, DHEIGHT - 1);
        Exg.drawLine(65, DHEIGHT - 12, 65, DHEIGHT - 1);
        Exg.drawString("\u4F53\u529B", 4, DHEIGHT, 36);
        Exg.drawString("\u60C5\u7EEA", 36, DHEIGHT, 36);
        Exg.drawString("\u667A\u529B", 68, DHEIGHT, 36);
        Exg.setFont(SPMonth.SmallFont);
        Exg.drawString("+", 0, top - height - 4, 20);
        Exg.drawString("0", 0, top - 4, 20);
        Exg.drawString("-", 0, (top + height) - 4, 20);
        Exg.setFont(SPMonth.SysFont);
        Exg.drawLine(left, top - height, left, top + height);
        Exg.drawLine(left + (DateCount - 1) * space, top - height, left + (DateCount - 1) * space, top + height);
        Exg.drawLine(left, top, left + (DateCount - 1) * space, top);
        int index = (int)(lifedate % (long)23);
        if(index < 0)
            index += 23;
        int sy = top - (int)((getThew(index++) * (long)height) / (long)10000);
        boolean d = true;
        for(int i = 0; i < DateCount - 1; i++)
        {
            if(index >= 23)
                index = 0;
            int ey = top - (int)((getThew(index++) * (long)height) / (long)10000);
            if(d)
                Exg.drawLine(left + i * space, sy, left + (i + 1) * space, ey);
            d = !d;
            sy = ey;
        }

        Exg.setStrokeStyle(1);
        index = (int)(lifedate % (long)28);
        if(index < 0)
            index += 28;
        sy = top - (int)((getEmotion(index++) * (long)height) / (long)10000);
        for(int i = 0; i < DateCount - 1; i++)
        {
            if(index >= 28)
                index = 0;
            int ey = top - (int)((getEmotion(index++) * (long)height) / (long)10000);
            Exg.drawLine(left + i * space, sy, left + (i + 1) * space, ey);
            sy = ey;
        }

        Exg.setStrokeStyle(0);
        index = (int)(lifedate % (long)33);
        if(index < 0)
            index += 33;
        sy = top - (int)((getIntelligence(index++) * (long)height) / (long)10000);
        for(int i = 0; i < DateCount - 1; i++)
        {
            if(index >= 33)
                index = 0;
            int ey = top - (int)((getIntelligence(index++) * (long)height) / (long)10000);
            Exg.drawLine(left + i * space, sy, left + (i + 1) * space, ey);
            sy = ey;
        }

    }

    private void DrawDetail()
    {
        Exg.setColor(0xffffff);
        Exg.fillRect(3, 13, 94, 48);
        Exg.setColor(0);
        Exg.drawRect(3, 13, 94, 48);
        day.set(1, thisYear);
        day.set(2, thisMonth - 1);
        day.set(5, thisDay);
        day.set(10, 0);
        day.set(12, 0);
        day.set(13, 0);
        long cdate = (day.getTime().getTime() - birthday) / (long)0x5265c00;
        int index = (int)(cdate % (long)23);
        if(index < 0)
            index += 23;
        String showstr;
        if(index > 6 && index < 19)
            showstr = ",\u4E0B\u964D\u671F";
        else
            showstr = ",\u4E0A\u5347\u671F";
        long tmp = getThew(index) / (long)1000;
        String pn;
        if(tmp < (long)0)
        {
            pn = "-";
            tmp = -tmp;
        } else
        {
            pn = "+";
        }
        Exg.drawString(String.valueOf(String.valueOf((new StringBuffer("\u4F53\u529B")).append(pn).append(tmp / (long)10).append(".").append(tmp % (long)10).append(showstr))), 50, 18, 17);
        index = (int)(cdate % (long)28);
        if(index < 0)
            index += 28;
        if(index > 6 && index < 21)
            showstr = ",\u4E0B\u964D\u671F";
        else
            showstr = ",\u4E0A\u5347\u671F";
        tmp = getEmotion(index) / (long)1000;
        if(tmp < (long)0)
        {
            pn = "-";
            tmp = -tmp;
        } else
        {
            pn = "+";
        }
        Exg.drawString(String.valueOf(String.valueOf((new StringBuffer("\u60C5\u7EEA")).append(pn).append(tmp / (long)10).append(".").append(tmp % (long)10).append(showstr))), 50, 31, 17);
        index = (int)(cdate % (long)33);
        if(index < 0)
            index += 33;
        if(index > 8 && index < 26)
            showstr = ",\u4E0B\u964D\u671F";
        else
            showstr = ",\u4E0A\u5347\u671F";
        tmp = getIntelligence(index) / (long)1000;
        if(tmp < (long)0)
        {
            pn = "-";
            tmp = -tmp;
        } else
        {
            pn = "+";
        }
        Exg.drawString(String.valueOf(String.valueOf((new StringBuffer("\u667A\u529B")).append(pn).append(tmp / (long)10).append(".").append(tmp % (long)10).append(showstr))), 50, 44, 17);
    }

    protected void keyPressed(int keycode)
    {
        if(type == 1)
        {
            type = 0;
            addCommand(DetailCmd);
            addCommand(BackCmd);
            addCommand(ExitCmd);
            DrawCurve();
            redraw();
            return;
        }
        if(keycode == -1 || keycode == 53)
        {
            type = 1;
            removeCommand(BackCmd);
            removeCommand(DetailCmd);
            removeCommand(ExitCmd);
            DrawDetail();
            redraw();
        } else
        if(keycode == -59 || keycode == 50)
        {
            if(thisMonth - 1 < 1)
            {
                thisYear--;
                thisMonth = 12;
            } else
            {
                thisMonth--;
            }
            CalcDate();
            DrawCurve();
            redraw();
        } else
        if(keycode == -60 || keycode == 56)
        {
            if(thisMonth + 1 > 12)
            {
                thisYear++;
                thisMonth = 1;
            } else
            {
                thisMonth++;
            }
            CalcDate();
            DrawCurve();
            redraw();
        } else
        if(keycode == -61 || keycode == 52)
        {
            thisDay--;
            if(thisDay < 1)
                thisDay = DateCount;
            DrawCurve();
            redraw();
        } else
        if(keycode == -62 || keycode == 56)
        {
            thisDay++;
            if(thisDay > DateCount)
                thisDay = 1;
            DrawCurve();
            redraw();
        } else
        if(keycode == -12)
            pKernel.ShowSelect();
    }

    public void keyRepeated(int kcode)
    {
        if(kcode >= -62 && kcode <= -59)
            keyPressed(kcode);
    }

    public void commandAction(Command cmd, Displayable obj)
    {
        if(cmd == OKCmd)
        {
            type = 0;
            setDate(lastdate.getDate());
            show();
        } else
        if(cmd == DetailCmd)
            keyPressed(-1);
        else
        if(cmd == BackCmd)
            keyPressed(-12);
        else
        if(cmd == ExitCmd)
            pKernel.Exit();
    }

    private long getThew(int index)
    {
        if(index < 12)
            return getTdata(index);
        else
            return -getTdata(23 - index);
    }

    private long getTdata(int index)
    {
        switch(index)
        {
        case 0: // '\0'
            return 0L;

        case 1: // '\001'
            return 2698L;

        case 2: // '\002'
            return 5195L;

        case 3: // '\003'
            return 7308L;

        case 4: // '\004'
            return 8879L;

        case 5: // '\005'
            return 9791L;

        case 6: // '\006'
            return 9977L;

        case 7: // '\007'
            return 9423L;

        case 8: // '\b'
            return 8170L;

        case 9: // '\t'
            return 6311L;

        case 10: // '\n'
            return 3894L;

        case 11: // '\013'
            return 1362L;
        }
        return 0L;
    }

    private long getEmotion(int index)
    {
        if(index < 8)
            return getEdata(index);
        if(index < 15)
            return getEdata(14 - index);
        if(index < 22)
            return -getEdata(index - 14);
        else
            return -getEdata(28 - index);
    }

    private long getEdata(int index)
    {
        switch(index)
        {
        case 0: // '\0'
            return 0L;

        case 1: // '\001'
            return 2225L;

        case 2: // '\002'
            return 4339L;

        case 3: // '\003'
            return 6235L;

        case 4: // '\004'
            return 7818L;

        case 5: // '\005'
            return 9010L;

        case 6: // '\006'
            return 9749L;

        case 7: // '\007'
            return 10000L;
        }
        return 0L;
    }

    private long getIntelligence(int index)
    {
        if(index < 17)
            return getIdata(index);
        else
            return -getIdata(33 - index);
    }

    private long getIdata(int index)
    {
        switch(index)
        {
        case 0: // '\0'
            return 0L;

        case 1: // '\001'
            return 1893L;

        case 2: // '\002'
            return 3717L;

        case 3: // '\003'
            return 5406L;

        case 4: // '\004'
            return 6901L;

        case 5: // '\005'
            return 8146L;

        case 6: // '\006'
            return 9096L;

        case 7: // '\007'
            return 9718L;

        case 8: // '\b'
            return 9989L;

        case 9: // '\t'
            return 9898L;

        case 10: // '\n'
            return 9450L;

        case 11: // '\013'
            return 8660L;

        case 12: // '\f'
            return 7557L;

        case 13: // '\r'
            return 6182L;

        case 14: // '\016'
            return 4582L;

        case 15: // '\017'
            return 2817L;

        case 16: // '\020'
            return 951L;
        }
        return 0L;
    }

    private SPKernel pKernel;
    private Display display;
    private ExtendedImage ExScreenImg;
    private Graphics Exg;
    private Command OKCmd;
    private Command DetailCmd;
    private Command BackCmd;
    private Command ExitCmd;
    private DateField lastdate;
    private Form pInput;
    private Calendar day;
    private int DHEIGHT;
    private int thisYear;
    private int thisMonth;
    private int thisDay;
    private int DateCount;
    private long birthday;
    private long firstday;
    private long lifedate;
    private int type;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -