📄 planegame.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
class userclass implements Serializable//玩家信息类
{
int uscore;
String uname;
}
class Login//登陆窗体类
{
JFrame frame;
JPanel panel;
JLabel user,pass;
JTextField Tu;
JPasswordField Tp;
JButton ok,cancle;
String username;
String pass1;
public Login()
{
frame=new JFrame("Login");
panel=new JPanel();
panel.setLayout(null);
panel.setBackground(Color.yellow);
user=new JLabel("UserName:");
pass=new JLabel("PassWord:");
Tu=new JTextField(10);
Tp=new JPasswordField(10);
ok=new JButton("确 定");
cancle=new JButton("取 消");
okand o=new okand();
user.setBounds(20,20,100,50);
pass.setBounds(20,40,100,50);
Tu.setBounds(90,30,150,20);
Tp.setBounds(90,60,150,20);
ok.setBounds(50,100,70,30);
ok.addActionListener(o);
ok.setMnemonic(KeyEvent.VK_ENTER);
cancle.setBounds(150,100,70,30);
cancle.addActionListener(o);
username="longking";
pass1="game";
panel.add(user);
panel.add(pass);
panel.add(Tu);
panel.add(Tp);
panel.add(ok);
panel.add(cancle);
frame.getContentPane().add(panel);
frame.setSize(300,200);
frame.setVisible(true);
}
class okand implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JButton source=(JButton)e.getSource();
if(source==ok)
{
if(username.equals(Tu.getText()) && pass1.equals(Tp.getText()))
{
new GameFrame();
}
else
{
JOptionPane.showMessageDialog(null,"你的输入有误,请重新输入","错误",JOptionPane.CANCEL_OPTION);
}
}
if(source==cancle)
{
System.exit(0);
}
}
}
}
class GameFrame//游戏主窗体类
{
JFrame frame;
JLabel backgroud;
JPanel panel;
JLabel planeLabel;
JLabel lifeLabel;
JLabel scoreLabel;
JLabel gamendLabel;
JLabel sname;
JLabel sscore;
Icon []dong;
int score=0;//分数
int life=100;//生命值
int myboombx,myboomby;//用于存放我机子弹的随机位置
Icon []boom;
int x=250,y=550;//我机的初始位置
Random r1=new Random();
Random r2=new Random();
Random r3=new Random();
Random r4=new Random();
int x1,y1,x2,y2;
boolean flag=true;
boolean flag1=true;
planeMove p=new planeMove();//
GameFrame()
{
boom=new Icon[16];//爆炸的16张图片
boom[0]= new ImageIcon("e1.gif");
boom[1]= new ImageIcon("e2.gif");
boom[2]= new ImageIcon("e3.gif");
boom[3]= new ImageIcon("e4.gif");
boom[4]= new ImageIcon("e5.gif");
boom[5]= new ImageIcon("e6.gif");
boom[6]= new ImageIcon("e7.gif");
boom[7]= new ImageIcon("e8.gif");
boom[8]= new ImageIcon("e9.gif");
boom[9]= new ImageIcon("e10.gif");
boom[10]= new ImageIcon("e11.gif");
boom[11]= new ImageIcon("e12.gif");
boom[12]= new ImageIcon("e13.gif");
boom[13]= new ImageIcon("e14.gif");
boom[14]= new ImageIcon("e15.gif");
boom[15]= new ImageIcon("e16.gif");
dong=new Icon[10];//广告的10张动态图片
dong[0]=new ImageIcon("001.gif");
dong[1]=new ImageIcon("002.gif");
dong[2]=new ImageIcon("003.gif");
dong[3]=new ImageIcon("004.gif");
dong[4]=new ImageIcon("005.gif");
dong[5]=new ImageIcon("006.gif");
dong[6]=new ImageIcon("007.gif");
dong[7]=new ImageIcon("008.gif");
dong[8]=new ImageIcon("009.gif");
dong[9]=new ImageIcon("010.gif");
userclass us=new userclass();
try
{
FileInputStream file=new FileInputStream("data.txt");//从文件读入玩家信息
ObjectInputStream in=new ObjectInputStream(file);
us=(userclass)in.readObject();
}
catch(Exception e){}
System.out.println("reader has done");
sname=new JLabel("上次玩家姓名:"+us.uname);
sname.setBounds(450,550,150,30);
sname.setForeground(Color.green);
sscore=new JLabel("上次玩家分数:"+us.uscore);
sscore.setBounds(450,567,110,30);
sscore.setForeground(Color.white);
scoreLabel=new JLabel("分数为:"+score);
scoreLabel.setBounds(450,612,100,30);
scoreLabel.setForeground(Color.WHITE);
lifeLabel=new JLabel("生命值:"+life);
lifeLabel.setBounds(450,595,100,30);
lifeLabel.setForeground(Color.RED);
gamendLabel=new JLabel("GAME OVER");
gamendLabel.setForeground(Color.WHITE);
gamendLabel.setBounds(219,500,100,50);
gamendLabel.setVisible(false);
Icon girls=new ImageIcon("123.jpg");
JLabel tu=new JLabel(girls);
tu.setBounds(456,30,230,200);
Icon tian=new ImageIcon("069.jpg");
JLabel Tian=new JLabel(tian);
Tian.setBounds(450,0,250,550);
frame=new JFrame("女子星际大战");//为什么是女子,因为我喜欢
frame.getContentPane().setLayout(null);
frame.getContentPane().setBackground(Color.BLACK);
frame.getContentPane().add(tu);
panel=new JPanel();
panel.setLayout(null);
panel.setBackground(Color.BLACK);
Icon plane=new ImageIcon("plane.gif");
planeLabel=new JLabel(plane);
planeLabel.setBounds(x,y,50,50);
planeboomb o=new planeboomb();
JTextField jf=new JTextField(10);
jf.addKeyListener(o);
new BackView();
new BackView();
panel.add(jf);
panel.add(planeLabel);
panel.add(gamendLabel);
frame.getContentPane().add(sname);
frame.getContentPane().add(sscore);
frame.getContentPane().add(lifeLabel);
frame.getContentPane().add(scoreLabel);
panel.setAutoscrolls(false);
panel.setBounds(0,0,450,700);
frame.getContentPane().add(panel);
frame.getContentPane().add(Tian);
frame.setSize(700,700);
frame.setVisible(true);
}
class jilu//记录玩家的信息类
{
JFrame frame;
JPanel panel;
JLabel user,pass;
JTextField Tu;
JButton ok,cancle;
Socket s;
userclass u;
ObjectOutputStream ou;
ObjectInputStream oi;
public jilu()
{
frame=new JFrame("玩家签名");
panel=new JPanel();
panel.setLayout(null);
user=new JLabel("PlayerName:");
Tu=new JTextField(10);
ok=new JButton("OK");
okand o=new okand();
cancle=new JButton("Cancle");
user.setBounds(20,20,100,50);
Tu.setBounds(100,36,150,20);
ok.setBounds(50,75,90,30);
cancle.setBounds(160,75,90,30);
ok.addActionListener(o);
cancle.addActionListener(o);
panel.add(Tu);
panel.add(ok);
panel.add(user);
panel.add(cancle);
panel.setBackground(Color.PINK);
frame.getContentPane().add(panel);
frame.setSize(300,150);
frame.setVisible(true);
}
class okand implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JButton source=(JButton)e.getSource();
if(source==ok)
{
try
{
u=new userclass();
u.uscore=score;
u.uname=Tu.getText();
s=new Socket("127.0.0.1",5000);
ou=new ObjectOutputStream(s.getOutputStream());
ou.writeObject(u);
}
catch(Exception bb){System.out.println(bb);}
System.exit(0);
}
if(source==cancle)
{
System.exit(0);
}
}
}
}
class BackView extends Thread //背景类
{
Random r7=new Random();
JLabel planeboom;
JLabel dongtu;
int k;
public BackView()
{
dongtu=new JLabel(dong[5]);
dongtu.setBounds(490,520,290,180);
planeboom=new JLabel(boom[0]);
panel.add(planeboom);
frame.getContentPane().add(dongtu);
new Thread(this).start();
this.setPriority(10);
}
public void run()
{
while(y1<=700)
{
k=r7.nextInt(10);
dongtu.setIcon(dong[k]);
x1=r1.nextInt(500);
y1=r2.nextInt(300);
planeboom.setBounds(x1,y1,100,100);
try
{
this.wait(1000);
}
catch(Exception w){}
for(int i=1;i<16;i++)
{
planeboom.setIcon(boom[i]);
try
{
this.sleep(80);
}
catch(InterruptedException e)
{
}
}
}
}
}
class planeboomb implements KeyListener //键盘事件,用来控制我机子弹的发射和敌机的出现
{
public void keyTyped(KeyEvent e)
{}
public void keyPressed(KeyEvent e)
{
char c=e.getKeyChar();
if(c=='s')
{
if(flag==true)
{
new myboomMove(planeLabel);
}
}
if(c=='w')
{
panel.addMouseMotionListener(p);
if(flag==true)
{
new EnemyPlane();
}
}
}
public void keyReleased(KeyEvent e)
{}
}
class planeMove implements MouseMotionListener//鼠标事件,用来控制我机的运动
{
public void mouseMoved(MouseEvent e)
{
x=e.getX();
y=e.getY();
if(flag==true)
{
planeLabel.setLocation(x-20,y-20);
}
}
public void mouseDragged(MouseEvent e)
{
}
}
class myboomMove extends Thread//我机子弹的线程
{
JLabel picplane;
JLabel Eplane;
JLabel planeboom;
enemy enemyplane;
myboomMove(JLabel pic)
{
picplane=pic;
planeboom=new JLabel(boom[0]);
planeboom.setBounds(x+25,y,50,50);
panel.add(planeboom);
planeboom.setLocation(planeboom.getX()-45,planeboom.getY()-78);
new Thread(this).start();
}
public void run()
{
while(true)
{
myboombx=planeboom.getX();myboomby=planeboom.getY();
planeboom.setLocation(myboombx,myboomby-50);
try
{
this.sleep(70);
if(planeboom.getY()<=10)
{
this.stop();
}
}
catch(Exception e){}
}
}
}
class EnemyPlane extends Thread//敌机的运动线程
{
JLabel Eplane;
JLabel planeboom;
int k=0;
int x,y;
Random r3=new Random();
Random r4=new Random();
public EnemyPlane()
{
x2=r3.nextInt(500);
y2=r4.nextInt(80);
Icon Ep=new ImageIcon("plane2.gif");
Eplane=new JLabel(Ep);
panel.add(Eplane);
Eplane.setBounds(x2,y2,60,100);
planeboom=new JLabel(boom[0]);
planeboom.setVisible(true);
panel.add(planeboom);
new Thread(this).start();
Eplane.setVisible(true);
}
public void run()
{
//Random r8=new Random();
Random r6=new Random();
while(Eplane.getY()<=700&&Eplane.getX()<=600)
{
double ro=300;
double ex=Eplane.getX();
double ey=Math.sqrt(ro*ro-ex*ex);
Eplane.setLocation((int)ex+10,(int)ey+5);
x1=Eplane.getX();
y1=Eplane.getY();
if(flag==true&&k%8==0)
{
new Enemyboomb(x1+15,y1);
}
try
{
this.sleep(100);
if((myboombx+25)<=(Eplane.getX()+50)&&(myboombx+25)>=(Eplane.getX())&&(myboomby+25)<=(Eplane.getY()+50))
{
score+=100;
String a=Integer.toString(score);
scoreLabel.setText("分数为:"+a);
for(int m=0;m<16;m++)
{
Eplane.setIcon(boom[m]);
try
{
this.sleep(100);
}
catch(InterruptedException e)
{
}
}
Eplane.setVisible(false);
Eplane=null;
flag1=false;
this.stop();
}
}
catch(Exception e){}
if(flag1==false&&flag==true)
{
new EnemyPlane();
flag1=true;
}
}
}
}
class Enemyboomb extends Thread//敌机子弹的线程
{
JLabel Eboomb;
public Enemyboomb(int a,int b)
{
int c=a,d=b;
Eboomb=new JLabel(boom[0]);
Eboomb.setBounds(c,d,50,100);
Eboomb.setVisible(true);
lifeLabel.setVisible(true);
panel.add(Eboomb);
new Thread(this).start();
};
public void run()
{
while(Eboomb.getY()<=700)
{
Eboomb.setLocation(Eboomb.getX(),Eboomb.getY()+50);
if(Eboomb.getX()>=planeLabel.getX()-30&&Eboomb.getX()<=planeLabel.getX()+30&&Eboomb.getY()>=planeLabel.getY()-40&&Eboomb.getY()<=planeLabel.getY()+40)
{
life-=5;
String b=Integer.toString(life);
lifeLabel.setText("生命值:"+b);
if(life==0)
{
planeLabel.setVisible(false);
planeLabel=null;
flag=false;
for(int i=1;i<16;i++)
{
Eboomb.setIcon(boom[i]);
try
{
this.sleep(150);
}
catch(Exception e)
{
}
}
lifeLabel.setText("生命值:"+b);
while(gamendLabel.getY()>=300)
{
gamendLabel.setVisible(true);
gamendLabel.setLocation(gamendLabel.getX(),gamendLabel.getY()-4);
try
{
this.sleep(50);
}
catch(Exception e){}
}
new jilu();
}
Eboomb.setVisible(false);
Eboomb=null;
}
try
{
this.sleep(150);
}
catch(Exception e){}
}
}
}
}
public class planeGame
{
public static void main(String s[])
{
new Login();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -