我用JAVA SE 写了个休闲养成游戏,里边的那些值,比如
金钱数 public static int money=10000;
年龄,public static int age=20;
等等之类什么的都是用静态变量。现在我存档和读档要怎么做?我老师说可能要序列化,反序列化。我不明白,因为他没做过这个所以也说不明白
只好向各位大大求助!只要行的通,什么方法都可以。

解决方案 »

  1.   

    存档可以直接IO操作保存到本地的一个文件中,当然你保存到DB表中也可以
    因为有IO操作,写到本地,和读本地文件,所以要实现序列化和反序列化,类实现序列化接口就行。
      

  2.   


    package memento.old;public class Role {private String name;private int hp;private int mp;public Role(){}public Role(String name, int hp, int mp){  this.name = name;  this.hp = hp;  this.mp = mp;}public int getHp() {  return hp;}public void fight(){  this.hp = 0;  this.mp = 0;}public void setHp(int hp) {  this.hp = hp;}public int getMp() {  return mp;}public void setMp(int mp) {  this.mp = mp;}public String getName() {  return name;}public void setName(String name) {  this.name = name;}}package memento.old;import junit.framework.TestCase;public class TestGame extends TestCase {public void testGame(){  Role role = new Role("YOYO", 100, 10);    assertEquals(role.getHp(),100);  assertEquals(role.getMp(),10);    // 新建角色对象用于备份  Role bakRole = new Role();  bakRole.setName(role.getName());  bakRole.setHp(role.getHp());  bakRole.setMp(role.getMp());    assertEquals(bakRole.getHp(),100);  assertEquals(bakRole.getMp(),10);    // 角色战斗  role.fight();  assertEquals(role.getHp(),0);  assertEquals(role.getMp(),0);    // 还原角色状态  role.setHp(bakRole.getHp());  role.setMp(bakRole.getMp());    assertEquals(role.getHp(),100);  assertEquals(role.getMp(),10);}}
    代码是我抄来的,这个存档和读档应该跟LZ说的是一样的,不是保存到本地,而是保存到内存中
    认真看了LZ的需求,应该就是用备忘录模式去实现,不用序列化和反序列化,除非保存到本地。
      

  3.   

    http://bbs.misonsoft.com/thread-554-1-1.html
      

  4.   

    http://bbs.misonsoft.com/thread-554-1-1.html
      

  5.   

    我做的只是单机游戏的,只要说JAR包里面包含那个档案文件,而且每次游戏存读档都采用那个文件进行操作
      

  6.   

    用JAVA轻松操作properties文件来存档行不行?
      

  7.   

    JAVA轻松操作properties文件  是什么?总之只要能实现效果,什么方法都可以,我不在意,我这东西就做着自己玩的,纯属学习
      

  8.   

    package mian;public class Value {
    //设定游戏中所需要的静态公共值 public static int jiankang=200; //健康
    public static int jinqian=2000000; //金钱
    public static int nengli=100; //能力
    public static int jingyan=100; //经验
    public static int kuaile=200; //心态
    public static int daode=200; //道德
    public static int jiaoji=100; //交际
    public static int nianling=22; //年龄
    public static int yuefen=96; //剩余月份
    public static int guoquyuefen=0; //已经过去的月份
    public static int gongzi=2200; //工资
    public static int shijian=0+(22*8+(30*16-22*16)); //空闲时间
    public static int gongzuo=0+Value.gongzi; //根据一个月的工作时间计算所应得到的工资数
    public static int randomj=0; //随机数0为加1为减。
    public static int random=0; //随机加减股票指数值的存放处
    public static int yingkui; //盈亏率
    public static int gupiaozhishu=1000;//股票指数
    public static int chigushoushu=0; //持股手数
    public static int jiaoyi; //交易的手数
    public static int gupiaoshizhi=0; //所持股票市值
    public static boolean boy; //主角为男孩是女,true为男,false为女.
    public static int Select; //选择播放哪首音乐
    public static boolean music=true; //片场音乐是否播放
    public static int fangchanzhishu=110; //房产指数
    public static int fangjia=80000; //1房1厅,房价基数
    public static int fangjia2=100000; //2房1厅,房价基数
    public static int fangjia3=200000; //2房2厅,房价基数
    public static int fangjia4=240000; //3房1厅,房价基数
    public static int fangjia5=300000; //3房2厅,房价基数
    public static int fangjia6=360000; //4房2厅,房价基数
    public static int fangjia7=1500000; //市郊别墅,房价基数
    public static int fangjia8=3000000; //城区别墅,房价基数
    public static int fangzileibie=0; //房子的类别,1——8分别等于上面的房子款式,0为空。
    public static int Clicked=0; //
    public static String zhiwu="国内中心公司基层员工"; //职务
    public static String banlv="你目前还没有伴侣"; //伴侣
    public static String qiche="你目前还没有汽车"; //汽车
    public static String fangzi="你目前还没有房子"; //房子}
      

  9.   


    那就好办多了,你直接用properties文件保存就行,把properties文件放到类路径中,正好可以打成一个JAR包。
    只要看看JAVA怎么操作properties文件就行了,这也是保存到本地。哈哈
    http://www.blogjava.net/action/archive/2006/08/21/64804.html
      

  10.   


    这是static静态的,不需要保存到文件吧,放在代码里,变量才保存到文件
      

  11.   

    我的思路是想用IO还是别的什么方法,做一个DAT或TXT或者别的什么类型的文件,存放那些游戏数据,
    当读取的时候就把相对应的值赋给相对应的静态变量,这样行吗?
      

  12.   

    楼主要的东西很简单,十五分钟就写完了
    楼上的太多唧唧歪歪
    bean 会被保存为文件,但不是文本文件,因此不要用文本编辑器修改
    为了突出实际业务代码,没有处理异常,楼主自己改吧
    纯原创,没有版权问题,楼主随意使用import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutput;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;public class Save {
        
        static String path = "d:\\save.dat";    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
            // 构造存档
            SaveBean saveBean = new SaveBean();
            
            // 保存存档
            save(saveBean, path);
            System.out.println("write finished");
            
            // 读取存档
            SaveBean loadBean = load(path);
            System.out.println("load: " + loadBean);
        }
        
        public static void save(Serializable saveData, String path2) throws FileNotFoundException, IOException {
            ObjectOutput output = new ObjectOutputStream(new FileOutputStream(path));
            output.writeObject(saveData);
            output.close();
        }    private static SaveBean load(String path2) throws IOException, ClassNotFoundException {
            ObjectInputStream reader = new ObjectInputStream(new FileInputStream(path2));
            Object rawData = reader.readObject();
            reader.close();
            
            return (SaveBean) rawData;
        }
    }class SaveBean implements Serializable{
        private static final long serialVersionUID = 151176696117126296L;    // 注意 static 和 transient 的属性不会被序列化,也就不会被保存
        private int i = 5;    public int getI() {
            return i;
        }    public void setI(int i) {
            this.i = i;
        }
        
        public String toString(){
            return "A SaveBean with value:[" + i + "]";
        }
    }
      

  13.   

    话说,19楼的代码是针对你老师的“老师说可能要序列化,反序列化”的要求
    序列化本身不能处理静态的问题
    因为静态属性可以认为是这个“类”的信息,而序列化反序列化针对的是“对象”的信息,所以序列化根本不能处理静态内容
    静态信息保存方法有两种
    保存的时候把静态变量读出来,放在非静态属性里就好了
    或者用反射,遍历所有属性,保存成文本文件
    话说回来,这些信息为什么要做成静态的?不合理啊
    从OO的角度来说,你游戏里的属性应该属于具体的对象,也就是一个个体,比如一个人,而不应该属于一个类型,或者说一个群体,比如全人类
    楼主这样的抽象方法,给人的第一印象是:人这种生物,都每个个体(即实例)拥有金钱xxx元,年龄yy岁
      

  14.   

    静态的不能被序列化,那么我需要把那些属性都定位非静态的才行?比如private int money;
      

  15.   

    我之所以设成静态其实是因为方便因素,再者我初学java,两个礼拜,因为是自学的,呵呵,上不了台面
    我这个老师没教我们课,是班导,因为他做过几年的程序员,懂Java,所以问他,但正好他没做过这个,他说他做过坦克大战,那种事通关的,不需要存档,所以不懂这个,只说是用序列化试试看。OK,现将目前做好的代码贴出
    package mian;import panel.Welcome;
    public class Gamemain { /**
     * @param args
     */
    public static void main(String[] args) {
     Welcome we=new Welcome();
     we.setVisible(true);
    }}package mian;
    import java.applet.*;
    public class Music
    { @SuppressWarnings("unchecked")
    public Music(){
         switch(Value.Select){
         case  1:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/zt.wav");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
         }
         case  2:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/瓦妮莎的微笑.wav");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  3:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/天空之城.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
         }
         case  4:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/遇见.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  5:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/安妮的仙境.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  6:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/克罗地亚狂想曲.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  7:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/zj01.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  8:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/zj02.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  9:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/zj03.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
         case  10:{Class music = this.getClass();
    java.net.URL url = music.getResource("/music/zj04.mid");
    AudioClip clip = Applet.newAudioClip(url);
    //设置播放条件
    if(Value.music=true){clip.play();}
    if(Value.music=false){clip.stop();}break;
    }
    }
        }
    }package mian;public class Value {
    //设定游戏中所需要的静态公共值 public static int jiankang=200; //健康
    public static int jinqian=2000000; //金钱
    public static int nengli=100; //能力
    public static int jingyan=100; //经验
    public static int kuaile=200; //心态
    public static int daode=200; //道德
    public static int jiaoji=100; //交际
    public static int nianling=22; //年龄
    public static int yuefen=96; //剩余月份
    public static int guoquyuefen=0; //已经过去的月份
    public static int gongzi=2200; //工资
    public static int shijian=0+(22*8+(30*16-22*16)); //空闲时间
    public static int gongzuo=0+Value.gongzi; //根据一个月的工作时间计算所应得到的工资数
    public static int randomj=0; //随机数0为加1为减。
    public static int random=0; //随机加减股票指数值的存放处
    public static int yingkui; //盈亏率
    public static int gupiaozhishu=1000;//股票指数
    public static int chigushoushu=0; //持股手数
    public static int jiaoyi; //交易的手数
    public static int gupiaoshizhi=0; //所持股票市值
    public static boolean boy; //主角为男孩是女,true为男,false为女.
    public static int Select; //选择播放哪首音乐
    public static boolean music=true; //片场音乐是否播放
    public static int fangchanzhishu=110; //房产指数
    public static int fangjia=80000; //1房1厅,房价基数
    public static int fangjia2=100000; //2房1厅,房价基数
    public static int fangjia3=200000; //2房2厅,房价基数
    public static int fangjia4=240000; //3房1厅,房价基数
    public static int fangjia5=300000; //3房2厅,房价基数
    public static int fangjia6=360000; //4房2厅,房价基数
    public static int fangjia7=1500000; //市郊别墅,房价基数
    public static int fangjia8=3000000; //城区别墅,房价基数
    public static int fangzileibie=0; //房子的类别,1——8分别等于上面的房子款式,0为空。
    public static int Clicked=0; //
    public static String zhiwu="国内中心公司基层员工"; //职务
    public static String banlv="你目前还没有伴侣"; //伴侣
    public static String qiche="你目前还没有汽车"; //汽车
    public static String fangzi="你目前还没有房子"; //房子}package mian;public class Value {
    //设定游戏中所需要的静态公共值 public static int jiankang=200; //健康
    public static int jinqian=2000000; //金钱
    public static int nengli=100; //能力
    public static int jingyan=100; //经验
    public static int kuaile=200; //心态
    public static int daode=200; //道德
    public static int jiaoji=100; //交际
    public static int nianling=22; //年龄
    public static int yuefen=96; //剩余月份
    public static int guoquyuefen=0; //已经过去的月份
    public static int gongzi=2200; //工资
    public static int shijian=0+(22*8+(30*16-22*16)); //空闲时间
    public static int gongzuo=0+Value.gongzi; //根据一个月的工作时间计算所应得到的工资数
    public static int randomj=0; //随机数0为加1为减。
    public static int random=0; //随机加减股票指数值的存放处
    public static int yingkui; //盈亏率
    public static int gupiaozhishu=1000;//股票指数
    public static int chigushoushu=0; //持股手数
    public static int jiaoyi; //交易的手数
    public static int gupiaoshizhi=0; //所持股票市值
    public static boolean boy; //主角为男孩是女,true为男,false为女.
    public static int Select; //选择播放哪首音乐
    public static boolean music=true; //片场音乐是否播放
    public static int fangchanzhishu=110; //房产指数
    public static int fangjia=80000; //1房1厅,房价基数
    public static int fangjia2=100000; //2房1厅,房价基数
    public static int fangjia3=200000; //2房2厅,房价基数
    public static int fangjia4=240000; //3房1厅,房价基数
    public static int fangjia5=300000; //3房2厅,房价基数
    public static int fangjia6=360000; //4房2厅,房价基数
    public static int fangjia7=1500000; //市郊别墅,房价基数
    public static int fangjia8=3000000; //城区别墅,房价基数
    public static int fangzileibie=0; //房子的类别,1——8分别等于上面的房子款式,0为空。
    public static int Clicked=0; //
    public static String zhiwu="国内中心公司基层员工"; //职务
    public static String banlv="你目前还没有伴侣"; //伴侣
    public static String qiche="你目前还没有汽车"; //汽车
    public static String fangzi="你目前还没有房子"; //房子}
      

  16.   


    /**
     * 初始化生活面板(进入到其他场所)
     *
     * @return javax.swing.JPanel
     */
    private JPanel getShenghuoPanel() {
    if (shenghuoPanel == null) {
    shenghuoPanel = new JPanel();
    shenghuoPanel.setLayout(null);
    shenghuoPanel.setBounds(new Rectangle(5, 280, 380, 100));
    shenghuoPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    shenghuoPanel.setBackground(new Color(255, 255, 102));
    shenghuoPanel.add(getZhengjuanjiaoyiButton(), null);
    shenghuoPanel.add(getRencaishichangButton(), null);
    shenghuoPanel.add(getFangchanzhongjieButton(), null);
    shenghuoPanel.add(getQicheshichangButton(), null);
    shenghuoPanel.add(getHunyinjieshaoButton(), null);
    shenghuoPanel.add(getCaipiaozhongxinButton(), null);
    }
    return shenghuoPanel;
    } /**
     * 证劵交易按钮
     *
     * @return javax.swing.JButton
     */
    private JButton getZhengjuanjiaoyiButton() {
    if (zhengjuanjiaoyiButton == null) {
    zhengjuanjiaoyiButton = new JButton();
    zhengjuanjiaoyiButton.setText("证劵交易");
    zhengjuanjiaoyiButton.setBounds(new Rectangle(15, 15, 90, 30));
    zhengjuanjiaoyiButton.setPreferredSize(new Dimension(100, 30));
    zhengjuanjiaoyiButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    new zhengjuanjiaoyi(this).setVisible(true);
    Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
    }
    });
    }
    return zhengjuanjiaoyiButton;
    } /**
     * 人才市场按钮
     *
     * @return javax.swing.JButton
     */
    private JButton getRencaishichangButton() {
    if (rencaishichangButton == null) {
    rencaishichangButton = new JButton();
    rencaishichangButton.setBounds(new Rectangle(150, 15, 90, 30));
    rencaishichangButton.setText("人才市场");
    rencaishichangButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    new rencaishichang(this).setVisible(true);
    Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
    }
    });
    }
    return rencaishichangButton;
    } /**
     * 房产中介按钮
     *
     * @return javax.swing.JButton
     */
    private JButton getFangchanzhongjieButton() {
    if (fangchanzhongjieButton == null) {
    fangchanzhongjieButton = new JButton();
    fangchanzhongjieButton.setBounds(new Rectangle(280, 15, 90, 30));
    fangchanzhongjieButton.setText("房产中介");
    fangchanzhongjieButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    new fangchanzhongjie(this).setVisible(true);
    Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
    }
    });
    }
    return fangchanzhongjieButton;
    } /**
     * 汽车市场按钮
     *
     * @return javax.swing.JButton
     */
    private JButton getQicheshichangButton() {
    if (qicheshichangButton == null) {
    qicheshichangButton = new JButton();
    qicheshichangButton.setBounds(new Rectangle(15, 58, 90, 28));
    qicheshichangButton.setText("汽车市场");
    qicheshichangButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    new qicheshichang(this).setVisible(true); Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
    }
    });
    }
    return qicheshichangButton;
    } /**
     * 婚姻介绍所按钮
     *
     * @return javax.swing.JButton
     */
    private JButton getHunyinjieshaoButton() {
    if (hunyinjieshaoButton == null) {
    hunyinjieshaoButton = new JButton();
    hunyinjieshaoButton.setBounds(new Rectangle(150, 60, 90, 29));
    hunyinjieshaoButton.setText("婚姻介绍");
    hunyinjieshaoButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    new hunyinjieshaosuo(this).setVisible(true);
    Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
    }
    });
    }
    return hunyinjieshaoButton;
    } /**
     * 彩票中心按钮
     *
     * @return javax.swing.JButton
     */
    public JToggleButton getCaipiaozhongxinButton() {
    if (caipiaozhongxinToggleButton == null) {
    caipiaozhongxinToggleButton = new JToggleButton();
    caipiaozhongxinToggleButton.setBounds(new Rectangle(280, 60, 90, 30));
    caipiaozhongxinToggleButton.setText("彩票中心");
    caipiaozhongxinToggleButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
    JToggleButton caipiaozhongxinToggleButton = (JToggleButton) e.getSource();
    if (caipiaozhongxinToggleButton.isSelected()) {
    new caipiaozhongxin(this).setVisible(true);
    Class music = this.getClass();
     java.net.URL url = music.getResource("/music/button1.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
     caipiaozhongxinToggleButton.setSelected(true);
    }
    else{
    caipiaozhongxinToggleButton.setSelected(true);
    }
    }
    });
    }
    return caipiaozhongxinToggleButton;
    }
    /**
     * 显示剩余月份数的文本框
     *
     * @return javax.swing.JTextField
     */
    private JTextField getShengyuyuefenTextField() {
    if (shengyuyuefenTextField == null) {
    shengyuyuefenTextField = new JTextField();
    shengyuyuefenTextField.setBounds(new Rectangle(486, 293, 78, 22));
    shengyuyuefenTextField.setEditable(false);
    shengyuyuefenTextField.setText(""+Value.yuefen); }
    return shengyuyuefenTextField;
    } /**
     * 下个月按钮   点击进入下个月  *
     * @return javax.swing.JButton
     */
    private JButton getNextMonthsButton() {
    if (nextMonthsButton == null) {
    nextMonthsButton = new JButton();
    nextMonthsButton.setBounds(new Rectangle(419, 325, 145, 38));
    nextMonthsButton.setText("下个月");
    nextMonthsButton.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("unchecked")
    public void actionPerformed(java.awt.event.ActionEvent e) {
     Class music = this.getClass();
     java.net.URL url = music.getResource("/music/next.wav");
     AudioClip clip = Applet.newAudioClip(url);
     clip.play();
     Xiageyue();
    } private void Xiageyue() {
    //如果还有空闲时间,花费最少时间的事件为20
    if(Value.shijian<20){
    //设置彩票中心按钮可用
    caipiaozhongxinToggleButton.setSelected(false);
    Value.yuefen=Value.yuefen-1;
    Value.jinqian=Value.jinqian+Value.gongzuo;
    //每月默认减少2点快乐,毕竟时间一点一点过去,压力越来越大。
    Value.kuaile=Value.kuaile-2;
    Value.guoquyuefen=Value.guoquyuefen+1;
    //重新初始化剩余时间和本月应得工资这两个值
    Value.shijian=0+(22*8+(30*16-22*16));
    Value.gongzuo=0+Value.gongzi;
    //股票指数改变,没有空闲时间的情况下,另一有空闲时间的情况也要产生随机数
    Value.randomj=(int)(Math.random()*2);
    if(Value.randomj==0){
    Value.gupiaozhishu=Value.gupiaozhishu+(Value.random=(int)(Math.random()*300)); //股票随机
    }
    else if(Value.randomj==1){
    Value.gupiaozhishu=Value.gupiaozhishu-(Value.random=(int)(Math.random()*300)); //股票随机
    //股票指数不能小于0,所以当出现了这个悲剧的情况只好变相重新随机了,所以实际上股票指数的趋势是上涨的!
    if(Value.gupiaozhishu<0){Value.gupiaozhishu=Value.gupiaozhishu+300;}
    } }
    else{new NextMassage(this).setVisible(true);
    }
    }
    });
    }
    return nextMonthsButton;
    } /**
     * This is the default constructor
     * 获得一个容器
     */
    public GameFrame() {
    super();
    initialize();
    update();
    } /**
     * This method initializes this
     * 初始化游戏
     * @return void
     */
    private void initialize() {
    this.setJMenuBar(getGameJMenuBar());
    this.setBounds(new Rectangle(0, 0, 580, 450));
    this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/image/sj01.gif")));
    this.setContentPane(getMainPane());
    this.setTitle("黄金岁月");
    this.setVisible(true);
    } /**
     * 初始化游戏主面板,被叠在了最底层,作为其他面板的容器
     *
     * @return javax.swing.JPanel
     */
    private JPanel getMainPane() {
    if (mainPane == null) {
    shenyuyueshuLabel = new JLabel();
    shenyuyueshuLabel.setBounds(new Rectangle(415, 292, 70, 23));
    shenyuyueshuLabel.setText("剩余月份数");
    mainPane = new JPanel();
    mainPane.setLayout(null);
    mainPane.setBackground(new Color(255, 255, 51));
    mainPane.add(getJihuaPanel(), null);
    mainPane.add(getZhuangtaiPanel(), null);
    mainPane.add(getShenghuoPanel(), null);
    mainPane.add(shenyuyueshuLabel, null);
    mainPane.add(getShengyuyuefenTextField(), null);
    mainPane.add(getNextMonthsButton(), null);
    }
    return mainPane;
    }
    public static void caipiaozhongxinToggleButtonkejian() {
    caipiaozhongxinToggleButton.setSelected(false);
    }}
      

  17.   

    package panel;import javax.swing.JPanel;
    import java.awt.Frame;
    import javax.swing.JDialog;
    import java.awt.Dimension;
    import java.awt.Color;
    import java.awt.Rectangle;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.BorderFactory;
    import javax.swing.border.EtchedBorder;
    import javax.swing.JLabel;
    import javax.swing.ImageIcon;
    import javax.swing.JTextPane;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import javax.swing.Timer;import mian.Value;
    import javax.swing.JToggleButton;public class caipiaozhongxin extends JDialog { private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JPanel jPanel = null;
    private JLabel F1 = null;
    private JTextPane jTextPane = null;
    private JTextField jTextField = null;
    private JToggleButton jToggleButton = null;
    private JButton close_jButton1 = null;
    private int number; //随机值,决定中奖与否
    private String jieguo; //中奖结果
    private Timer timer;  //  @jve:decl-index=0: public void update(){
    /**Timer类的对象可以以一定的时间间隔触发一个或多个事件
     * 建立一个定时器要创建一个Timer对象,注册一个或多个动作监听器
     * 并用start方法启动定时器
     * 此处的时间间隔为500MS,显示玩家的得分,难度级别
     */
    timer=new Timer(500,new ActionListener()
    { public void actionPerformed(ActionEvent ae)
    { //显示玩家的各项属性值
    jTextField.setText(""+jieguo);
    }
    });
    //启动定时器
    timer.start();
    }
    /**
     * @param owner
     */
    public caipiaozhongxin(Frame owner) {
    super(owner);
    initialize();
    } public caipiaozhongxin(ActionListener actionListener) {
    super();
    initialize(); } /**
     * This method initializes this
     *
     * @return void
     */
    private void initialize() {
    this.setSize(300, 435);
    this.setTitle("彩票中心");
    this.setContentPane(getJContentPane());
    } /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
    if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(null);
    jContentPane.setBackground(new Color(153, 0, 0));
    jContentPane.add(getJPanel(), null);
    jContentPane.add(getJTextPane(), null);
    jContentPane.add(getJTextField(), null);
    jContentPane.add(getJToggleButton(), null);
    jContentPane.add(getClose_jButton1(), null);
    }
    return jContentPane;
    } /**
     * This method initializes jPanel
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJPanel() {
    if (jPanel == null) {
    F1 = new JLabel();
    F1.setText("");
    F1.setLocation(new Point(-1, 1));
    F1.setIcon(new ImageIcon(getClass().getResource("/image/\u94b1.jpg")));
    F1.setSize(new Dimension(200, 148));
    jPanel = new JPanel();
    jPanel.setLayout(null);
    jPanel.setSize(new Dimension(200, 150));
    jPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    jPanel.setLocation(new Point(42, 20));
    jPanel.add(F1, null);
    }
    return jPanel;
    } /**
     * This method initializes jTextPane
     *
     * @return javax.swing.JTextPane
     */
    private JTextPane getJTextPane() {
    if (jTextPane == null) {
    jTextPane = new JTextPane();
    jTextPane.setBounds(new Rectangle(30, 180, 230, 80));
    jTextPane.setBackground(new Color(153, 0, 0));
    jTextPane.setForeground(Color.white);
    jTextPane.setText("每次购买彩票花费100元,每月只能购买一次,一等奖机率千分之一,奖金500万,二等奖机率千分之五,奖金50万,三等奖机率千分之十,奖金5万。");
    }
    return jTextPane;
    } /**
     * This method initializes jTextField
     *
     * @return javax.swing.JTextField
     */
    private JTextField getJTextField() {
    if (jTextField == null) {
    jTextField = new JTextField();
    jTextField.setBounds(new Rectangle(37, 284, 205, 30));
    jTextField.setBackground(Color.black);
    }
    return jTextField;
    } /**
     * This method initializes jButton
     *
     * @return javax.swing.JButton
     */
    private JToggleButton getJToggleButton() {
    if (jToggleButton == null) {
    jToggleButton = new JToggleButton();
    jToggleButton.setBounds(new Rectangle(35, 340, 80, 30));
    jToggleButton.setText("购买");
    jToggleButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    JToggleButton jToggleButton = (JToggleButton) e.getSource();
    if (jToggleButton.isSelected()) {
    Select();
    jToggleButton.setSelected(true);
    }
    else{ 
    jToggleButton.setSelected(true);
    }
    }
    });
    }
    return jToggleButton;
    }
    private void Select() {
    Value.jinqian=Value.jinqian-100;
    number=(int)(Math.random()*1000);
    switch(number){
    case 1: Value.jinqian=Value.jinqian+5000000;
    jieguo="恭喜你获得500万!";
    jTextField.setText(""+jieguo);
    break;
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    Value.jinqian=Value.jinqian+500000;
    jieguo="恭喜你获得50万!";
    jTextField.setText(""+jieguo);
    break;
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:Value.jinqian=Value.jinqian+50000;
    jieguo="恭喜你获得5万!";
    jTextField.setText(""+jieguo);
    break;
    default:
    jieguo="你没有中奖";
    jTextField.setText(""+jieguo);
    break;
    }
    }
    /**
     * This method initializes close_jButton1
     *
     * @return javax.swing.JButton
     */
    private JButton getClose_jButton1() {
    if (close_jButton1 == null) {
    close_jButton1 = new JButton();
    close_jButton1.setBounds(new Rectangle(161, 340, 80, 30));
    close_jButton1.setText("关闭");
    close_jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent e) { setVisible(false);
            dispose();
    }
    });
    }
    return close_jButton1;
    }}
      

  18.   

    用静态还是非静态变量,不在于用起来是不是方便,而在于你要表达的东西是一种事物类型,还是一个具体事物个体。
    静态不会带来任何方便,比如假设你游戏里加几个玩家,需要多个 Value 同时存在的时候,你就会发现静态的东西非常不方便。
    如果你觉得写 set get 方法不方便,可以用 IDE 生成,敲键盘的次数绝对比用 static 少很多
    ps。刚学两个星期,就做这么多行的程序,还真是心急
      

  19.   

    我后来改改,用了非静态的变量,把jinqian等等等等的成员变量放到一个子类里,
    把这个类IO进去
    而不是对象去IO
    当写入的时候呢,就变成int jinqian=Value.jinqian;
    赋值转换应该可以吧?
    读回来后,在处理,Value.jinqian= jinqian,这样如何?
      

  20.   

    至于说刚学两星期吧,因为之前学过C,也就大学考试的那种水平,所以学Java也算是事半功倍啦!
    为什么要这么快就写这么多行的程序,是因为我想把我学到的东西串起来,照搬别人的项目那多没意思,所以自己写个,理解也更透彻不是?