⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameplayer.java~66~

📁 坦克大战的游戏以及游戏管理 包括注册
💻 JAVA~66~
📖 第 1 页 / 共 3 页
字号:
package GameClient;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;

class TankInfor    //用于保存敌人的坦克信息,包括当前坐标和行进方向
{
        int x;
        int y;
        int dir;   //方向,1--向上,2--向下,3--向左,4--向右
        int bomb;   //是否放炮,1--YES

        public TankInfor(int x, int y, int dir, int bomb)
        {
                this.x = x;
                this.y = y;
                this.dir = dir;
                this.bomb = bomb;
        }
}

class BombInfor   //用于保存炮弹信息;
{
        int x;
        int y;
        int dir;

        public BombInfor(int x, int y, int dir)
        {
                this.x = x;
                this.y = y;
                this.dir = dir;
        }
}

class MyTank   //用于保存自己坦克的资料
{
        int x;
        int y;
        int dir;
        int bombRemainder;   //自己所剩炮弹数,初始为MYBOMBTOTAL=20,当炮弹用尽而还没有完全消灭敌人时为输

        public MyTank(int x, int y, int dir, int bombRemainder)
        {
                this.x = x;
                this.y = y;
                this.dir = dir;
                this.bombRemainder = bombRemainder;
        }
}

class Message implements Serializable  //用于玩家程序与验证程序之间的消息通信类
{
        String m1;
        String m2;
        int m3;
}


public class GamePlayer extends JApplet implements ActionListener
{
        String userName;
        String userPass;

        ObjectOutputStream oos;
        ObjectInputStream ois;

        JLabel lUser;
        JTextField tfName;
        JLabel lPass;
        JPasswordField pfPass;
        JButton btLogin;
        JButton btReset;
        JPanel mPanel;

        AudioClip acBack;
        AudioClip acExplode;
        AudioClip acGun;
        AudioClip acCollide;

        int paintStage=0;

        final int TANKWIDTH = 28, TANKHEIGHT = 28;  //敌人坦克的宽度和高度
        final int GAMEX = 15, GAMEY = 15, GAMEWIDTH = 500, GAMEHEIGHT = 500;//坦克的起始位置,游戏界面的大小
        final int MYTANKWIDTH=25, MYTANKHEIGHT=25;  //我方坦克的宽度和高度

        final int DIRUP=1, DIRDOWN=2, DIRLEFT=3, DIRRIGHT=4;
        final int MYBOMBTOTAL = 20;

        Image tank1, tank2, tank3, tank4;   //敌人的四个行进方向的坦克;
        Image myTank1,myTank2,myTank3,myTank4;  //自己的四个行进方向的坦克;
        Image bomb;                         //炮弹图片
        Image tankExa;
        Vector tankGroup;    //保存敌人的敌人的坦克信息
        Vector bombGroup;    //保存敌人打炮信息;

        MyTank me;           //自己的坦克信息
        Vector myBomb;       //自己打出去的炮弹;

        int score = 0;
        int level = 1;
        String messageFromServer = "不要沉迷游戏";

        boolean gameOver = false;
        boolean victory = false;

        public void init()
        {
                paintStage=0;

                //建立需要的坦克图片
                tank1 = this.getImage(this.getCodeBase(),"tankaru.jpg");
                tank2 = this.getImage(this.getCodeBase(),"tankard.jpg");
                tank3 = this.getImage(this.getCodeBase(),"tankarl.jpg");
                tank4 = this.getImage(this.getCodeBase(),"tankarr.jpg");

                myTank1 = this.getImage(this.getCodeBase(),"tankmeu.jpg");
                myTank2 = this.getImage(this.getCodeBase(),"tankmed.jpg");
                myTank3 = this.getImage(this.getCodeBase(),"tankmel.jpg");
                myTank4 = this.getImage(this.getCodeBase(),"tankmer.jpg");

                bomb = this.getImage(this.getCodeBase(),"bomb.jpg");

                tankExa = this.getImage(this.getCodeBase(),"tank2.jpg");

                //建立需要的各种声音
                acBack = this.getAudioClip(this.getCodeBase(), "bgr.au");
                acExplode = this.getAudioClip(this.getCodeBase(), "explode.au");
                acGun = this.getAudioClip(this.getCodeBase(), "pgun.au");
                acCollide = this.getAudioClip(this.getCodeBase(), "collide.au");

                //以下为建立第一登录界面
                mPanel = (JPanel)this.getContentPane();
                mPanel.setLayout(null);

            lUser = new JLabel("UserName :");
            lUser.setBounds(10,10,100,20);
            tfName = new JTextField(10);
            tfName.setBounds(100, 10, 160, 20);
            lPass = new JLabel("PassWord :");
            lPass.setBounds(10, 40, 100, 20);
            pfPass = new JPasswordField(10);
            pfPass.setBounds(100, 40, 160, 20);
            btLogin = new JButton("Login");
            btLogin.setBounds(40, 90, 80, 20);
            btLogin.addActionListener(this);
            btReset = new JButton("Reset");
            btReset.setBounds(130, 90, 80, 20);
            btReset.addActionListener(this);

                mPanel.add(lUser);
                mPanel.add(tfName);
                mPanel.add(lPass);
                mPanel.add(pfPass);
                mPanel.add(btLogin);
                mPanel.add(btReset);

                //建立敌人坦克资料
                //因为初始为1级,在1级时,只有3辆敌人坦克,2级时,有4辆敌人坦克,依此类推
                tankGroup = new Vector(8);
                tankGroup.addElement(new TankInfor(30, 15, 4, 0));
                tankGroup.addElement(new TankInfor(250, 15, 4, 0));
                tankGroup.addElement(new TankInfor(470, 15, 4, 0));

                bombGroup = new Vector(10);

                me = new MyTank(GAMEX+GAMEWIDTH/2,GAMEY+GAMEHEIGHT-MYTANKHEIGHT,1,MYBOMBTOTAL);
                myBomb = new Vector(10);
        }

        public void start()
        {
                acBack.loop();
        }

        public void stop()
        {
                acBack.stop();
        }

        public void actionPerformed(ActionEvent e)
        {
                //处理对登录界面按钮的点击
                if (e.getSource() == btLogin)
                {
                        /*
                        try
                        {
                            Socket cs = new Socket("127.0.0.1", 10000);

                            oos = new ObjectOutputStream(cs.getOutputStream());
                            ois = new ObjectInputStream(cs.getInputStream());

                            //向验证程序发信息,请求验证用户身份
                            Message u = new Message();
                            u.m1 = tfName.getText();
                            u.m2 = String.valueOf(pfPass.getPassword());
                            oos.writeObject(u);

                            Message tu = (Message)ois.readObject();
                            if (tu.m1.equalsIgnoreCase(new String("OK")))
                            {
                          */
                                    //若为合法用户,则出现游戏界面
                                    gameScreen();

                                    //消息监听线程序:时刻监听从验证来的信息
                                    //MsgReceiver th = new MsgReceiver(ois);
                                    //th.start();

                                    //随机改变敌人坦克的位置和方向,并移动敌人打出的和我方已经打出的炮弹
                                    RandomTank rt = new RandomTank();
                                    rt.start();
                      /*
                            }
                            else    //在信息栏或出现一个对话框提示玩家用户名/密码部队
                            {
                                    //学生自己编写此处代码
                            }
                        }
                        catch(Exception e1)
                        {
                                e1.printStackTrace();
                        }
                    */
                }
                else
                {
                        tfName.setText("");
                        pfPass.setText("");
                }
        }


        //出现游戏界面
        public void gameScreen()
        {
            paintStage = 1;

                mPanel.removeAll();

                this.addKeyListener(new KeyHandler());  //设置键盘监听
                this.dispatchEvent(new FocusEvent(this, FocusEvent.FOCUS_GAINED, true));
                this.requestFocusInWindow();    //设置该APPLET得到程序焦点,因此才可以监听键盘事件

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -