我用JAVA SE 写了个休闲养成游戏,里边的那些值,比如
金钱数 public static int money=10000;
年龄,public static int age=20;
等等之类什么的都是用静态变量。现在我存档和读档要怎么做?我老师说可能要序列化,反序列化。我不明白,因为他没做过这个所以也说不明白
只好向各位大大求助!只要行的通,什么方法都可以。
金钱数 public static int money=10000;
年龄,public static int age=20;
等等之类什么的都是用静态变量。现在我存档和读档要怎么做?我老师说可能要序列化,反序列化。我不明白,因为他没做过这个所以也说不明白
只好向各位大大求助!只要行的通,什么方法都可以。
因为有IO操作,写到本地,和读本地文件,所以要实现序列化和反序列化,类实现序列化接口就行。
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的需求,应该就是用备忘录模式去实现,不用序列化和反序列化,除非保存到本地。
//设定游戏中所需要的静态公共值 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="你目前还没有房子"; //房子}
那就好办多了,你直接用properties文件保存就行,把properties文件放到类路径中,正好可以打成一个JAR包。
只要看看JAVA怎么操作properties文件就行了,这也是保存到本地。哈哈
http://www.blogjava.net/action/archive/2006/08/21/64804.html
这是static静态的,不需要保存到文件吧,放在代码里,变量才保存到文件
当读取的时候就把相对应的值赋给相对应的静态变量,这样行吗?
楼上的太多唧唧歪歪
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 + "]";
}
}
序列化本身不能处理静态的问题
因为静态属性可以认为是这个“类”的信息,而序列化反序列化针对的是“对象”的信息,所以序列化根本不能处理静态内容
静态信息保存方法有两种
保存的时候把静态变量读出来,放在非静态属性里就好了
或者用反射,遍历所有属性,保存成文本文件
话说回来,这些信息为什么要做成静态的?不合理啊
从OO的角度来说,你游戏里的属性应该属于具体的对象,也就是一个个体,比如一个人,而不应该属于一个类型,或者说一个群体,比如全人类
楼主这样的抽象方法,给人的第一印象是:人这种生物,都每个个体(即实例)拥有金钱xxx元,年龄yy岁
我这个老师没教我们课,是班导,因为他做过几年的程序员,懂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="你目前还没有房子"; //房子}
/**
* 初始化生活面板(进入到其他场所)
*
* @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);
}}
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;
}}
静态不会带来任何方便,比如假设你游戏里加几个玩家,需要多个 Value 同时存在的时候,你就会发现静态的东西非常不方便。
如果你觉得写 set get 方法不方便,可以用 IDE 生成,敲键盘的次数绝对比用 static 少很多
ps。刚学两个星期,就做这么多行的程序,还真是心急
把这个类IO进去
而不是对象去IO
当写入的时候呢,就变成int jinqian=Value.jinqian;
赋值转换应该可以吧?
读回来后,在处理,Value.jinqian= jinqian,这样如何?
为什么要这么快就写这么多行的程序,是因为我想把我学到的东西串起来,照搬别人的项目那多没意思,所以自己写个,理解也更透彻不是?