?? game.java
字號:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
/*
*J2SE俄羅斯方塊1.0
*作者:hangtao
*http://hangtao.5d6d.com
*最后修改時間2008/8/5
*
*/
@SuppressWarnings("serial")
class DrawGround extends JPanel
{
private BackGround BG;
public DrawGround(BackGround BG)
{
this.BG=BG;
}
public void paint(Graphics g)
{
//setVisible(false);
Image[] bg= new Image[6];
bg[5]=Toolkit.getDefaultToolkit().getImage("block.png");
bg[4]=Toolkit.getDefaultToolkit().getImage("blank.png");
bg[3]=Toolkit.getDefaultToolkit().getImage("block.png");
bg[2]=Toolkit.getDefaultToolkit().getImage("wall.png");
for(int ly=0;ly<=630;ly=ly+30)
{
for(int lx=0;lx<=330;lx=lx+30)
{
g.drawImage(bg[BG.ground[ly/30+4][lx/30]], lx, ly, this);
}
}
//setVisible(true);
}
}
@SuppressWarnings("serial")
class ShowNextBoxPane extends JPanel
{
private Box box;
public ShowNextBoxPane(Box B)
{
this.box=B;
}
public void paint(Graphics g)
{
//setVisible(false);
Image[] img=new Image[2];
img[0]=Toolkit.getDefaultToolkit().getImage("blank.png");
img[1]=Toolkit.getDefaultToolkit().getImage("block.png");
g.drawString("Next:", 0, 0);
for(int ly=0;ly<=90;ly=ly+30)
{
for(int lx=0;lx<=90;lx=lx+30)
{
g.drawImage(img[box.box[box.nextType][box.nextStat][ly/30][lx/30]],lx+30,ly+30,this);
}
}
// setVisible(true);
}
}
@SuppressWarnings("serial")
class ShowScore extends Canvas
{
private Box box;
private int rec;
private String name;
public ShowScore(Box box,String name,int rec)
{
this.box=box;
this.name=name;
this.rec=rec;
}
public void paint(Graphics g)
{
//setVisible(false);
g.drawLine(0, 0, 200, 0);
g.setFont(new Font("宋體",Font.BOLD,30));
g.drawString("目前得分", 30, 30);
g.setColor(Color.blue);
g.drawString(""+box.score, 40, 70);
g.setColor(Color.black);
g.drawString("最高紀(jì)錄",30,100);
g.setColor(Color.red);
g.drawString(""+rec, 40, 140);
g.setColor(Color.black);
g.drawString("記錄保持者", 30, 170);
g.setColor(Color.blue);
g.drawString(name, 40, 210);
//setVisible(true);
}
}
public class Game
{
JFrame jf=new JFrame();
JFrame jf2=new JFrame();
Box b=new Box();
JPanel KeyPane=new JPanel();
JPanel infPane=new JPanel();
JPanel BackPane=new JPanel();
JMenuBar bar=new JMenuBar();
JMenu jm1=new JMenu("游戲");
JMenu jm2=new JMenu("幫助");
JMenuItem ji1=new JMenuItem("開始/暫停");
JMenuItem ji2=new JMenuItem("重新開始");
JMenuItem ji3=new JMenuItem("退出游戲");
JMenuItem ji4=new JMenuItem("關(guān)于游戲");
ShowNextBoxPane ShowNext=new ShowNextBoxPane(b);
BackGround BG=new BackGround();
DrawGround DG=new DrawGround(BG);
Action action=new Action(b,BG);
DataIO IO=new DataIO(BG,b);
JButton right=new JButton("right");
JButton left=new JButton("left");
JButton down=new JButton("down");
JButton up=new JButton("up");
JButton space= new JButton("space");
String name;
int rec;
File file;
static Game game=new Game();
public static void main(String agrs[])
{
game.start();
}
public void start()
{
///
file=new File("rec.dat");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.seek(0);
name=raf.readUTF();
rec=raf.readInt();
raf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ShowScore showscore =new ShowScore(b,name,rec);
bar.add(jm1);
bar.add(jm2);
jm1.add(ji1);
jm1.add(ji2);
jm1.add(ji3);
jm2.add(ji4);
ji1.addActionListener(new MenuListener(b,game));
ji2.addActionListener(new MenuListener(b,game));
ji3.addActionListener(new MenuListener(b,game));
ji4.addActionListener(new MenuListener(b,game));
///
BackPane.setLayout(new GridLayout(1,2));
infPane.setLayout(new GridLayout(2,1));
infPane.add(ShowNext);
infPane.add(showscore);
///
right.setSize(0, 0);
right.registerKeyboardAction(new KeyRight(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
left.setSize(0, 0);
left.registerKeyboardAction(new KeyLeft(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
down.setSize(0, 0);
down.registerKeyboardAction(new KeyDown(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
up.setSize(0, 0);
up.registerKeyboardAction(new KeyUP(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_UP,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
space.setSize(0, 0);
space.registerKeyboardAction(new KeySpace(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_Z,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
///
jf.setSize(750,750);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(right,BorderLayout.SOUTH);
jf.add(left,BorderLayout.SOUTH);
jf.add(down,BorderLayout.SOUTH);
jf.add(up,BorderLayout.SOUTH);
jf.add(space,BorderLayout.SOUTH);
jf.add(KeyPane,BorderLayout.SOUTH);
jf.add(bar,BorderLayout.NORTH);
BackPane.add(DG);
BackPane.add(infPane);
infPane.setLocation(30, 0);
jf.add(BackPane);
jf.setLocation(60,0);
jf.setResizable(false);
jf.setVisible(true);
for(;;)
{
if(b.score<1000)
b.delay=1000-(b.score/100)*100;
action.newbox();
ShowNext.repaint();
showscore.repaint();
for(;;)
{
while (b.cmd==0)
{
//空循環(huán)用于暫停
}
if(action.down())
{
DG.repaint();
action.delay(b.delay);
}
else
{
IO.WriteBoxToGround();
action.clear();
DG.repaint();
if(b.y<=1)game.gameover();
break;
}
}
/*
for(int y=3;y<26;y++)
{
for(int x=0;x<12;x++)
{
System.out.printf("%d", BG.ground[y][x]);
}
System.out.println();
}
*/
//System.out.println(b.score);
}
}
public void restart()
{
BackGround bg2=new BackGround();
BG.ground=bg2.ground;
b.score=0;
b.x=5;
b.y=0;
}
public void gameover()
{
int rcd=rec;
if(b.score>rcd)
{
name=JOptionPane.showInputDialog("恭喜你打破了記錄,請輸入您的大名:")+"\n";
rec=b.score;
file=new File("rec.dat");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.seek(0);
raf.writeUTF(name);
raf.writeInt(rec);
raf.close();
game.restart();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
JOptionPane.showMessageDialog(null,"很遺憾,請繼續(xù)努力吧!","游戲結(jié)束",JOptionPane.INFORMATION_MESSAGE);
b.cmd=0;
game.restart();
}
}
public void about()
{
String message=String.format("%s\n%s\n%s\n%s","J2SE俄羅斯方塊1.0,游戲版權(quán)歸俄羅斯方塊發(fā)明人","俄國人Alexey Pajitnov和Vadim Gerassimov所有!","程序代碼歸hangtao所有!","歡迎訪問:http://hangtao.5d6d.com");
JOptionPane.showMessageDialog(null, message, "關(guān)于游戲 Tonysoft",JOptionPane.INFORMATION_MESSAGE);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -