急!!!用java做一个带windows的小游戏。。
将下面的代码保存为MainFrame.java?JDK1.6编译通过。
挽回我没做的事,并不难。我忽略了这个方法。你可以试着自己写。
只需将txtGuessRecord.getText()的内容写入一个文件。
*/
进口?Java . awt . dimension;
进口?Java . awt . event . action event;
进口?Java . awt . event . action listener;
进口?Java . text . parse exception;
进口?Java . text . simple date format;
进口?Java . util . date;
进口?Java . util . locale;
进口?Java . util . random;
进口?Java . util . regex . matcher;
进口?java.util.regex .格局;
进口?Java . util . regex . patternsynctaxexception;
进口?javax . swing . box;
进口?javax . swing . box layout;
进口?javax . swing . jbutton;
进口?javax . swing . jcombobox;
进口?javax . swing . jformattedtextfield;
进口?javax . swing . jframe;
进口?javax . swing . jlabel;
进口?javax . swing . jscrollpane;
进口?javax . swing . jtextarea;
进口?javax . swing . swing utilities;
进口?javax . swing . ui manager;
进口?javax . swing . text . default formatter;
公共?班级?大型机?延伸?JFrame?器物?ActionListener?{
/**
*?
*/
私人?静电?决赛?龙?serialVersionUID?=?1L;
/**
*?@param?一个参数名
*/
私人?JLabel?lblResult
私人?JLabel?lblInfo
私人?JFormattedTextField?txtInput
私人?JTextArea?txtGuessRecord
私人?JButton?btnGuess
私人?JButton?btnRestart
私人?JButton?btnClear
私人?JButton?btnSave
私人?JComboBox?cbType
//?正确吗?
私人?布尔?对吗?=?假的;
//?最大次数
私人?静电?决赛?int?MAX_TIME?=?5;
//?当前的猜测次数
私人?静电?决赛?int?NUM?=?0;
私人?静电?决赛?int?信?=?1;
私人?静电?int?当前时间?=?0;
//?当前话题
私人?夏尔?当前_谜题?=?'?';
//?用户回答
私人?夏尔?玩家_回答?=?'?';
公共?大型机()?{
init component();
setPreferredSize(新?维度(450,?220));
pack();
set visible(true);
SetTitle(“猜谜游戏”);
setDefaultCloseOperation(DISPOSE _ ON _ CLOSE);
试试?{
UIManager
。setLookAndFeel(新?com . sun . Java . swing . plaf . windows . windows lookandfeel());
swing utilities . updatecomponentreeui(mainframe . this);
}?接住?(例外?ex)?{
}
}
//?初始化组件
私人?作废?initComponent()?{
lblResult?=?新的?JLabel();
lblInfo?=?新的?JLabel("你准备好了吗?",?JLabel。左);
txtGuessRecord?=?新的?JTextArea(5,30);
btnGuess?=?新的?JButton(" guess ");
btnRestart?=?新的?JButton(" Start ");
btnClear?=?新的?JButton(" clear ");
btnSave?=?新的?JButton(" save ");
String[]?物品?=?新的?String[]?{?“数字”?“信件”?};
cbType?=?新的?JComboBox(项目);
cbType.setMaximumSize(新?维度(70,?20));
字符串?ps?=?"[a-zA-Z \ \ d]";
格局?p?=?pattern . compile(PS);
txtInput?=?新的?JFormattedTextField(新?regex formatter(p));
txtInput.setMaximumSize(新?维度(55,20));
txtInput.setMinimumSize(新?维度(55,20));
btnrestart . addactionlistener(this);
BTN guess . addactionlistener(this);
BTN clear . addactionlistener(this);
btnguess . set enabled(false);
txtguessrecord . set editable(false);
setLayout(新?BoxLayout(getContentPane(),?BoxLayout。PAGE _ AXIS));
盒子?mainBox?=?box . createverticalbox();
添加(main box);
setText('?'));
main box . add(LBL result);
盒子?盒子?=?box . createhorizontalbox();
box . add(LBL info);
main box . add(box);
盒子?b?=?box . createhorizontalbox();
b . add(txt input);
盒子?hBox?=?box . createhorizontalbox();
hbox . add(b);
hbox . add(btnGuess);
hbox . add(box . createhorizontalstrust(3));
hbox . add(BTN restart);
hbox . add(box . createhorizontalstrust(3));
hbox . add(BTN clear);
hbox . add(box . createhorizontalstrust(3));
hbox . add(BTN save);
hbox . add(box . createhorizontalstrust(3));
hbox . add(CB type);
main box . add(hBox);
JScrollPane?卷轴?=?新的?JScrollPane(txtGuessRecord);
mainBox.add(滚动);
}
@覆盖
公共?作废?actionPerformed(ActionEvent?e)?{
如果?(e.getSource()?==?btnRestart)?{
//?再玩一次
restart();
}?不然呢?如果?(e.getSource()?==?btnGuess)
//?猜测
guess();
不然呢?如果?(e.getSource()?==?btnClear)
//?收拾餐桌
clear();
不然呢?如果?(e.getSource()?==?btnSave)
save();
}
//?设置显示答案
私人?作废?setText(char?c)?{
StringBuilder?sb?=?新的?StringBuilder();
sb . append(" & lt;html & gt& lt字体?尺寸?=?72?颜色?=?红色& gt& lt中心>);
某人追加(c);
sb . append(" & lt;/center & gt;& lt/font & gt;& lt/html >);
LBL result . settext(sb . tostring());
}
//?创建随机角色
私人?夏尔?createRandomChar(int?类型)?{
随机?兰德?=?新的?random();
int?低?=?0;
int?范围?=?0;
切换?(类型)?{
案子?数量:
低?=?(int)?'0';
范围?=?(int)?'9'?-?低?+?1;
打破;
案子?信件:
低?=?(int)?a’;
范围?=?(int)?z '吗?-?低?+?1;
打破;
}
int?我?=?rand.nextInt(range)?+?低;
夏尔?c?=?(char)?我;
回归?c;
}
//?输出时间到记录框。
私人?作废?recordTime()?{
约会?约会?=?新的?date();
SimpleDateFormat?格式化器?=?新的?SimpleDateFormat("yyyy-MM-dd?时:分:秒”,
区域设置。美国);
字符串?sd?=?formater.format(日期);
txtguessrecord . append(SD);
}
私人?作废?猜()?{
如果?(txtInput.getValue()?==?空)
返回;
//?用户的回答
玩家_回答?=?character . toupper case(txt input . getvalue()。toString()
。charAt(0));
//?判断答案
如果?(玩家_回答?& lt?当前_谜题)
txtguessrecord . append(" small \ n ");
不然呢?如果?(玩家_回答?& gt?当前_谜题)
txtguessrecord . append(" big \ n ");
不然呢?{
txtguessrecord . append(" correct \ n ");
对吗?=?真实;
}
//?我猜过一次。
++ current _ time;
//?显示游戏信息
showInfo();
如果?(isRight?||?当前时间?& gt=?最大时间)
stop();
}
//?重新开始
私人?作废?重启()?{
//?记录时间
record time();
txtGuessRecord.append("?游戏开始\ n ");
//?状态清除
当前时间?=?0;
btnguess . set enabled(true);
对吗?=?假的;
当前_谜题?=?createRandomChar(CB type . getselectedindex());
setText('?'));
showInfo();
}
//?停止游戏
私人?作废?stop()?{
btnguess . set enabled(false);
setText(当前_谜题);
//?正确的情况
如果?(isRight)?{
字符串?信息?=?String.format("你猜对了\n "经过%d次?current _ time);
txtguessrecord . append(info);
}?其他
//?超过次数的情况
TxtGuessRecord.append("你输了\ n ");
record time();
txtGuessRecord.append("?游戏结束\ n”);
}
//?显示游戏信息
私人?作废?showInfo()?{
字符串?信息?=?String.format("我已经猜了%d次了,?还剩%d次是什么?”,?当前时间,
MAX_TIME?-?current _ time);
LBL info . settext(info);
}
//?清空记录框
私人?作废?clear()?{
txtguessrecord . settext(" ");
}
私人?作废?save()?{
//?尚未实现
}
公共?静电?作废?main(String[]?args)?{
//?托多?自动生成?方法?烟蒂
SwingUtilities.invokeLater(新?Runnable()?{
公共?作废?run()?{
新的?大型机();
}
});
}
//?常规格式类?文本框匹配
班级?RegexFormatter?延伸?DefaultFormatter?{
/**
*?
*/
私人?静电?决赛?龙?serialVersionUID?=?1L;
私人?格局?图案;
私人?火柴人?matcher
公共?RegexFormatter()?{
super();
}
公共?RegexFormatter(字符串?格局)?摔投?PatternSyntaxException?{
this();
set pattern(pattern . compile(pattern));
}
公共?RegexFormatter(模式?格局)?{
this();
setPattern(模式);
}
公共?作废?setPattern(模式?格局)?{
这个图案?=?图案;
}
公共?格局?getPattern()?{
回归?图案;
}
受保护?作废?setMatcher(Matcher?matcher)?{
这个.火柴人?=?matcher
}
受保护?火柴人?getMatcher()?{
回归?matcher
}
公共?对象?stringToValue(字符串?正文)?摔投?ParseException?{
格局?格局?=?get pattern();
如果?(格局?!=?null)?{
火柴人?火柴人?=?pattern.matcher(文本);
如果?(matcher.matches())?{
setMatcher(匹配器);
回归?super.stringToValue(文本);
}
扔?新的?ParseException("模式?有吗?不是吗?匹配“,?0);
}
回归?文本;
}
}
}