Package cnam.nsy208.sudoku.model

Source Code of cnam.nsy208.sudoku.model.Ranking

package cnam.nsy208.sudoku.model;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Vector;

/**
*
* @author lca
*/
public class Ranking {

    private Vector _players ;

    /**
   * Permet d'initialiser les variables
   * @return
   */
  public Ranking() {
        _players = new Vector();
    }

    /**
   * Modifie le score d'un joueur
   * @param number : Numéro du joueur
     * @param score : score du joueur
   * @return
   */
  public void setScore(int number, int score) {
        for (int i = 0; i < _players.size(); i++) {
            if (((Player) (_players.elementAt(i))).getNumber() == number) {
                ((Player) (_players.elementAt(i))).setScore(score);
            }
        }
    }

    /**
   * Ajoute un joueur au classement
   * @param Player : Joueur à ajouter
     * @return
   */
  public void addPlayer(Player player) {
        _players.addElement(player);
    }

    /**
   * Ajoute un joueur au classement avec son score, pseudo et numéro
   * @param number : Numéro du joueur
     * @param pseudo : pseudo du joueur
   * @param score : score du joueur
   * @return
   */
  public void addPlayer(int number, String pseudo, int score) {
        _players.addElement(new Player(number, pseudo, score));
    }

    /**
   * Supprime un joueur au classement
   * @param Player : Joueur à supprimer
     * @return
   */
  public void delPlayer(Player player) {
        _players.removeElement(player);
    }

    /**
   * Retourne le nombre de joueur du classement
     * @return Nombre de joueur du classement
   */
  public int getNbPlayer() {
        return _players.size();
    }

    /**
   * Trie les joueurs en fonction de leurs scores
     * @return Classement trié
   */
  public Vector sortRanking() {
        // Classement décroissant car le score correspond au temps en secondes
        // Donc le meilleur est le score de plus petit
        for (int i = 0; i < _players.size() - 1; ++i) {
            for (int j = i; j < _players.size(); ++j) {
                Player player1 = (Player) _players.elementAt(i);
                Player player2 = (Player) _players.elementAt(j);
                if (player1.getScore() > player2.getScore()) {
                    _players.setElementAt(player2, i);
                    _players.setElementAt(player1, j);
                }
            }
        }

        return _players;
    }

    /**
   * Retourne le classement au format texte
     * @return Classement au format texte
   */
  public String toString() {
        String msg = "";

        for (int i = 0; i < _players.size(); ++i) {
            msg = msg + ((Player) (_players.elementAt(i))).toString() + "\n";
        }

        return msg;
    }

    /**
     * Transforme le classement en tableau de BYTE
     * @return Classement au format BYTE
     */
    public byte[] getBytes() throws Exception {
        ByteArrayOutputStream baos = null;

        baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        baos.reset();

        for (int i = 0; i < 10 && i < _players.size(); ++i) {
            Player play = (Player) _players.elementAt(i);
            dos.writeInt(play.getNumber());
            dos.writeInt(play.getScore());
            char[] name = play.getPseudo().toCharArray();
            for (int j = 0; j < play.getPseudo().length(); j++) {
                dos.writeChar(name[j]);
            }
            if (play.getPseudo().length() < 5) {
                for (int j = play.getPseudo().length(); j < 5; j++) {
                    dos.writeChar(' ');
                }
            }
        }

        dos.flush();

        return baos.toByteArray();
    }

    /**
     * Affecte le classement à partir d'un tableau de BYTE
     * @param data
     *            Tableau de BYTE
     */
    public void setBytes(byte[] data) {
        try {
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            DataInputStream dis = new DataInputStream(bais);
            for (int i = 0; i < 9 && dis.available() > 0; ++i) {
                try {
                    int number = dis.readInt();
                    int score = dis.readInt();
                    char[] name = new char[5];
                    for (int j = 0; j < 5; j++) {
                        name[j] = dis.readChar();
                    }
                    String pseudo = new String(name);
                    Player play = new Player(number, pseudo, score);
                    this.addPlayer(play);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
TOP

Related Classes of cnam.nsy208.sudoku.model.Ranking

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.