史上最难游戏,hardest2,退出程序后关卡清零,在线等帮助!紧急,紧急,紧急
还没完。代码太长。我用另一个电话号码然后粘上。
导入的javax.swing
导入的javax.swing.JOptionPane
导入javax . swing . border . border;导入javax.swing.border.etched边框
导入的软件包java.awt *
从java.awt.event *导入;
/ **
*主游戏类继承自JFrame类,负责游戏的全局控制。
包括
* 1,引用GameCanvas类的一个例子。
保存当前活动块(ErsBlock)的实例
* 3、保存的控制面板(control panel)的例子;* /
公共* * *类ErsBlocksGame {
/ **
*每行有多少个点*/
最终静态int PER _ LINE _ SCORE = 100;
/ **
*图表中的点数可以升级*/
最终静态int per _ level _ score = per _ line _ score * 20;
/ **
*最大级数为10 */
最终静态int MAX _ LEVEL = 10;系统默认值
/ **
*系列*/
public的最终静态解释为DEFAULT _ LEVEL = 5;
私有GameCanvas
私有ErsBlock块;
私有布尔play = FALSE
私人控制面板“ctrlPanel”
Private JMenuBar的bar new JMenuBar();
列兵吉米努的
MGAME的新JMenu(“游戏设置”),
MControl的新JMenu(游戏控制)
MWindowStyle = new JMenu(" windowed ");
个人JMenuItem
MiNewGame = new JMenuItem("新游戏")
MiSetBlockColor = new JMenuItem("设置颜色..."),
MiSetBackColor的新JMenuItem("设置背景颜色..."),
MiTurnHarder = new JMenuItem(" upgrade ")
MiTurnEasier = new JMenuItem("调整后的最低级别")
MiExit = new JMenuItem ("exit ")
MiPlay = new JMenuItem("开始游戏"),
MiPause = new JMenuItem ("pause "),
mire sume new JMenuItem(" continue ");
Private JCheckBoxMenuItem
MiAsWindows:新的JCheckBoxMenuItem ("style "),/& gt;MiAsMotif =新的JCheckBoxMenuItem one ("style "),
mias metal = new JCheckBoxMenuItem A(" style ",real);
/ **
*主游戏类构造函数
。参数标题字符串窗口的_ at _ Title */
:男***ErsBlocksGame(字符串名) (
超(职称);
//this . settitle(" lsk df ");
setSize(315392);
和大小scrsize =工具包。getdefaulttoolkit()。getScreenSize();
//获取屏幕的大小
to parallel set location((scrsize . width-getsize()width))/2。
(scrsize . height-getSize()height)/2);
create menu();
container container = getContentPane();
container . set layout(new borderlayout(6,0));
Canvas =新游戏画布(20,12);
CtrlPanel新建控制面板”(本);
使用Container.add (canvas,使用BorderLayout。居中)
使用Container.add(ctrlPanel,BorderLayout的。东);
AddWindowListener页面(new WindowAdapter(){
无效的窗口关闭(WindowEvent us) {
JooptionPane的covenant = new JooptionPane的();
stop game();
system . exit(0);}
});
AddComponentListener(new component adapter(){
canvas . fanning();
}
});
show();
canvas . fanning();BR/>;}
//“重置”游戏
无效的重置(){
ctrl panel . reset();
canvas.reset()。
} BR/& gt;/ **
*判断游戏还在进行中。
_at_返回一个布尔值,还在运行的real fake已经停止*/
基于(){
回玩;
}
/ **
*当前活动块
_at_ returns,当前活动的ErsBlock的块引用*/
GetCurBlock "男* * *" () {
返回块;
}
/ **
*到当前画布
* _at_ returns,参考GameCanvas中的当前画布*/
GameCanvas getCanvas (){
返回画布
/ **
*开始游戏*/男* * *无效。
笑话(){
& gtplay();
ctrl panel . setplaybuttonenable(false);
mi play . set enabled(false);
ctrl panel . request focus();}
/* * BR/& gt;*游戏暂停*/
无效的pauseGame(){
(挡!= NULL)block . pause move();
ctrl panel . setpausebuttonlabel(false);
& gtmipause . set enabled(false);
米雷苏梅.的set enabled();
}
/ **
让我们继续暂停游戏*/
无效的resume name(){
(block = empty)block . resume move "();
ctrl panel . setpausebuttonlabel(TRUE);
Set enabled(真);
mire sume . set enabled(false);
ctrl panel . request focus();
}
/ **
*用户停止游戏*/
无效的公共stopGame(){
玩=假;
(挡!= NULL)block . stop move();
Set enabled(真);
mipause . set enabled(TRUE);
mire sume . set enabled(false);
ctrl panel setPlayButtonEnable();
ctrl panel . setpausebuttonlabel(TRUE);
}
/ **
*游戏设置游戏难度
_at_以int难度返回游戏-MAX_LEVEL */
男***getLevel(){
返回ctrl panel . getlevel();
}
/ **
*允许用户* @说明参数等级,游戏难度为1 MAX_LEVEL */
男性* * *无效设置级别{
(级别0) ctrlPanel.setLevel(级别);
}
/ **
*获取局部点
_at_ returns int,不可分。* /
男***getScore(){
(画布!= NULL)返回canvas . get score();
返回0;}
/* * BR/& gt;*获取office,因为自从上次升级之后,升级之后,这个就清楚了。
_at_返回int整数。* /
男* * * getscorefolevelupdate () {
(画布!= NULL)返回canvas . getscoreforlevelupdate();
返回0;}
/* * BR/& gt;当分数累积到某个数字或班级时。
_at_ of返回布尔true更新成功,false更新失败。
* /
公共布尔levelUpdate(){
解释cur level getLevel();
(curLevel & ltMAX_LEVEL){
set level(cur level+1);
canvas . resetscoreforlevelupdate();
返回true
}
返回FALSE
}
/ **
*游戏开启*/
私人无效游戏(){
重置()
Hit = TRUE
Thread的thread =新主题(新游戏());
thread . start();
}
/ **
*报告游戏结束*/
无效的private reportGameOver(){
JOptionPane.showMessageDialog(此时“游戏结束!”);
} & ltBR / / **
*创建和设置窗口菜单*/
无效的私有createMenu(){
bar . add(MGAME);
bar . add(m control);
bar . add(mWindowStyle);
mgame . add(miNewGame);
mgame . add separator();
mgame . add(miSetBlockColor);
& gtMGAME .add(miSetBackColor);
mgame . add separator();
mgame . add(miTurnHarder);
mgame . add(miTurnEasier);
mgame . add separator();& ltBR/mgame . add(mi exit);
m control . add(mi play);
m control . add(m pause);
m control . add(mire sume);
BR/>;mwindowstyle . add(mias windows);
mwindowstyle . add(mias motif);
mwindowstyle . add(mias metal);
SetJMenuBar(列);
BR/>;miPause.setAccelerator(
keystone . get keystone(key event。VK_P,关键事件。CTRL _ MASK));
mire sume . set accelerator(keystroke . get keystroke(key event。VK_ENTER,0));
BR/>;MiNewGame.addActionListener(新ActionListener(){
无效的action performed(AE){ of action event){
stop game();
reset();
set LEVEL(DEFAULT _ LEVEL);BR/>;}
});
MisetBlockColor。AddActionListener(新的ActionListener(){
无效的action performed(AE){ of action event){
Color newFrontColor =
颜色选择器。ShowDialog(ErsBlocksGame.this,
"设置建筑颜色块canvas . get block color());
(newFrontColor!=空)
canvas . set block color(new front color);/& gt;}
});
Misetbackcolor。addActionListener(新的ActionListener(){
无效的action performed(AE){ of action event){
颜色newBackColor =
Jcolorchooser。showdialog (ersblocksgame设置基本颜色。这个,
" canvas.getBackgroundColor "的();
(newBackColor!=空)
canvas . set background color(new back color);
} });
miturnharder . addactionlistener(new action listener(){
无效的action performed(AE){ of action event){
解释cur level getLevel();
(curLevel & lt;MAX _ LEVEL)set LEVEL(cur LEVEL+1);
}
});
miturneasier . addactionlistener(new action listener(){
无效的action performed(AE){ of action event){
cur level = getLevel();
(curLevel & gt1)set level(cur level-1);
}
});
mi exit . addactionlistener(new action listener(){ BR/& gt;无效的action performed(AE){ of action event){
(0);
}
});
MiPlay.addActionListener(新actionlistener () {
笑话();
}
});
MiPause.addActionListener(新ActionListener(){
无效的actionPerformed( ActionEvent) {
pauseGame();}
});
mire sume . addactionlistener(new action listener(){
无效的action performed(action event的AE){ br/> resume name();
}
});
MiAsWindows.addActionListener页(新ActionListener(){
执行的操作无效(操作事件的AE)AE){....../& gt;string plaf = " com . sun . Java . swing . plaf . windows . windows观感。
setWindowStyle(PLAF);
canvas . fanning();
ctrl panel . fanning();
mias windows . setstate(TRUE);
mias metal . setstate(false);
mias motif . setstate(false);
}
});
瘴气运动.(new ActionListener(){
无效的action performed(AE){ of action event){
string plaf = " com . sun . Java . swing . plaf . motif . motif外观";
setWindowStyle(PLAF);
canvas . fanning();
ctrl panel . fanning();
mias windows . setstate(false);
mias metal . setstate(false);
瘴气运动.setState();
}
});
MiAsMetal.addActionListener(新ActionListener(){
无效的action performed(AE){ of action event){
字符串plaf " javax . swing . plaf . metal . metal look and feel ";
setWindowStyle(PLAF);
canvas . fanning();
ctrl panel . fanning();
miAsWindows .SetState(假)
mias metal . set state(TRUE);
mias motif . setstate(false);
}
});}
/* * & lt;BR/*根据字符串设置窗口的外观。
参数PLAF字符串_at_的窗口的外观,描述
*/
无效的私有setWindowStyle(字符串PLAF){
尝试{
UIManager.setLookAndFeel(PLAF)
摇摆公用事业。updatecomponentreeui(Ben);
}追赶(例外5) {
}
}
/ *
*在游戏过程中,Runnable界面
*游戏是一个大周期,每100毫秒。
检查当前块是否在游戏中,是否在年末,如果不是,
继续等。如果在最后,你看到一个完整的舱口。
*删除的话给玩家加点,随机生成一个。
*当前块,它会自动下降。*要创建一个新块,首先检查画布上的线条。
占领,而且如果能判断游戏结束。* /
Runnable {通过私人游戏实现
无效的运行(){
//快速创建新的聚会
整数mark =(int)(math . random()*(canvas . get cols()-3)),
Style = ersblock.styles [(int)(数学。Random () * 7)] [(int)(数学。random()* 4)];....../& gt;和(播放){
如果(挡!= NULL){//第一个循环,防止空值。
(block.isAlive()){
请尝试{topic currentThread()。睡眠(100);
} catch(中断异常的IE浏览器){
ie . printstacktrace();
}
继续;
}
}
checkfully()//检查该行
如果完全填满(,是game over()){//检查游戏应该结束。
mi play . set enabled(TRUE);
miPause的set enabled();
mire sume . set enabled(false);
ctrl panel . setplaybuttonenable(TRUE);
ctrl panel . setpausebuttonlabel(TRUE);
reportGameOver()
返回;
}
Block = new ErsBlock (style,-1,在山中,getLevel(),canvas);
阻止。start();
column =(int)(math . random()*(canvas . get cols()-3));
Style = ErsBlock。STYLES [(INT)(数学随机()* 7)] [(INT)(数学随机()* 4)];
ctrl panel . settipstyle(style);
}
} / **
*只需检查画布是否完全填满。如果你删除*/
无效的checkfully () {
is(int I = 0;我& ltCanvas.getRows(),I++) {
line =-1;
Boolean fullLineColorBox = TRUE
(J = 0,J & ltcanvas . get cols();+ +){
(,!canvas.getBox(I,J).isColorBox()){
fullLineColorBox = FALSE
突破;
}
}
(fullLineColorBox){
line =-;
canvas . remove line(line);
}
}
}
/ **
基于帐户的顶行,确定游戏是否已经结束。* @返回一个布尔值,不管真实游戏是否结束*/
私有布尔isGameOver是(){
(INT I = 0;我& ltcanvas . get cols();i + +){
ErsBox box = canvas.getBox(0,I);
(box.isColorBox())返回true}
返回false
}
}