JAVA SE 静态变量与存读档问题

huiyang2010 2010-02-04 02:41:50
我用JAVA SE 写了个休闲养成游戏,里边的那些值,比如
金钱数 public static int money=10000;
年龄,public static int age=20;
等等之类什么的都是用静态变量。

现在我存档和读档要怎么做?我老师说可能要序列化,反序列化。我不明白,因为他没做过这个所以也说不明白
只好向各位大大求助!只要行的通,什么方法都可以。
...全文
224 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
huiyang2010 2010-02-05
  • 打赏
  • 举报
回复
至于说刚学两星期吧,因为之前学过C,也就大学考试的那种水平,所以学Java也算是事半功倍啦!
为什么要这么快就写这么多行的程序,是因为我想把我学到的东西串起来,照搬别人的项目那多没意思,所以自己写个,理解也更透彻不是?
huiyang2010 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jokerdx 的回复:]
实现序例化用Java IO操作
[/Quote]
这个我也是知道的,只是我用起来出问题而已,所以需要比较详细的例子作为参考
huiyang2010 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 mhoudg 的回复:]
用静态还是非静态变量,不在于用起来是不是方便,而在于你要表达的东西是一种事物类型,还是一个具体事物个体。
静态不会带来任何方便,比如假设你游戏里加几个玩家,需要多个 Value 同时存在的时候,你就会发现静态的东西非常不方便。
如果你觉得写 set get 方法不方便,可以用 IDE 生成,敲键盘的次数绝对比用 static 少很多
ps。刚学两个星期,就做这么多行的程序,还真是心急
[/Quote]
我后来改改,用了非静态的变量,把jinqian等等等等的成员变量放到一个子类里,
把这个类IO进去
而不是对象去IO
当写入的时候呢,就变成int jinqian=Value.jinqian;
赋值转换应该可以吧?
读回来后,在处理,Value.jinqian= jinqian,这样如何?


fhuibo212 2010-02-05
  • 打赏
  • 举报
回复
学习一下
jokerdx 2010-02-05
  • 打赏
  • 举报
回复
实现序例化用Java IO操作
mhoudg 2010-02-05
  • 打赏
  • 举报
回复
用静态还是非静态变量,不在于用起来是不是方便,而在于你要表达的东西是一种事物类型,还是一个具体事物个体。
静态不会带来任何方便,比如假设你游戏里加几个玩家,需要多个 Value 同时存在的时候,你就会发现静态的东西非常不方便。
如果你觉得写 set get 方法不方便,可以用 IDE 生成,敲键盘的次数绝对比用 static 少很多
ps。刚学两个星期,就做这么多行的程序,还真是心急
zhangjun460 2010-02-05
  • 打赏
  • 举报
回复
学习了
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
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;
}

}
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复

/**
* 初始化生活面板(进入到其他场所)
*
* @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);
}

}
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
我之所以设成静态其实是因为方便因素,再者我初学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="你目前还没有房子"; //房子



}
knightzhuwei 2010-02-04
  • 打赏
  • 举报
回复
因为他没做过这个所以也说不明白

你们老师真够可以的。。
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
静态的不能被序列化,那么我需要把那些属性都定位非静态的才行?比如private int money;
mhoudg 2010-02-04
  • 打赏
  • 举报
回复
话说,19楼的代码是针对你老师的“老师说可能要序列化,反序列化”的要求
序列化本身不能处理静态的问题
因为静态属性可以认为是这个“类”的信息,而序列化反序列化针对的是“对象”的信息,所以序列化根本不能处理静态内容
静态信息保存方法有两种
保存的时候把静态变量读出来,放在非静态属性里就好了
或者用反射,遍历所有属性,保存成文本文件
话说回来,这些信息为什么要做成静态的?不合理啊
从OO的角度来说,你游戏里的属性应该属于具体的对象,也就是一个个体,比如一个人,而不应该属于一个类型,或者说一个群体,比如全人类
楼主这样的抽象方法,给人的第一印象是:人这种生物,都每个个体(即实例)拥有金钱xxx元,年龄yy岁
mhoudg 2010-02-04
  • 打赏
  • 举报
回复
楼主要的东西很简单,十五分钟就写完了
楼上的太多唧唧歪歪
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 + "]";
}
}

huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
我的思路是想用IO还是别的什么方法,做一个DAT或TXT或者别的什么类型的文件,存放那些游戏数据,
当读取的时候就把相对应的值赋给相对应的静态变量,这样行吗?
bobo364 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gardner2010 的回复:]
属性太多了,还是以流的形式保存到本地吧,就是IO操作。那样正规点。属性文件不是用来存这个用的
[/Quote]

这是static静态的,不需要保存到文件吧,放在代码里,变量才保存到文件
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gardner2010 的回复:]
属性太多了,还是以流的形式保存到本地吧,就是IO操作。那样正规点。属性文件不是用来存这个用的
[/Quote]
流么?我翻翻书
huiyang2010 2010-02-04
  • 打赏
  • 举报
回复
我迫不及待的去试试看了,不管成不成,总之,谢谢你O(∩_∩)O~
小贝壳666 2010-02-04
  • 打赏
  • 举报
回复
属性太多了,还是以流的形式保存到本地吧,就是IO操作。那样正规点。属性文件不是用来存这个用的
小贝壳666 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huiyang2010 的回复:]
JAVA轻松操作properties文件  是什么?总之只要能实现效果,什么方法都可以,我不在意,我这东西就做着自己玩的,纯属学习
[/Quote]

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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧