В настоящее время я пытаюсь создать игру, в которой пользователь может войти в систему и зарегистрироваться, если у него нет учетной записи.Я уже сделал первую игру (бумага, ножницы, камень), и я хотел бы добавить функцию оценки, которая отслеживает количество побед / поражений пользователей.Но проблема в том, что я абсолютно не знаю, как это сделать, поэтому я хотел бы заимствовать некоторую помощь (идеи), чтобы сделать это, пожалуйста.
Сначала я подумал о создании Hashmap, но поскольку ключ будет пользователем, и у меня не будет места для записи числа побед / поражений: /.
Вот мой код:
Основной
package boitedejeux;
import java.io.IOException;
import java.util.Scanner;
public class BoiteDeJeux {
public static void main(String[] args) throws IOException, UsernameException, PasswordException {
Scanner input = new Scanner(System.in);
String username;
String password;
System.out.println("Enter your username:");
username = input.nextLine();
System.out.println("Enter your password:");
password = input.nextLine();
UserList test = new UserList();
test.inscription(username, password);
}
}
Пользователь
package boitedejeux;
import java.util.Objects;
public class User {
protected String username;
protected String password;
public User(String username, String password) throws UsernameException, PasswordException {
// On vérifie que le nom de l'utilisateur ne soit pas vide.
if (username.length() == 0 || username.length() == 1) {
throw new UsernameException("The username must contain at least two elements.");
}
// On vérifie que le nom de l'utilisateur doit commencer par une majuscule.
if (username.charAt(0) > 'Z' || username.charAt(0) < 'A') {
throw new UsernameException("The username must begin with an uppercase.");
}
// On vérifie que le nom de l'utilisateur ne doit contenir que des minuscules et des chiffres.
for (int i = 1; i < username.length(); i++) {
if ((username.charAt(i) > 'z' || username.charAt(i) < 'a') && (username.charAt(i) > '9' || username.charAt(i) < '0')) {
throw new UsernameException("The username must contain only lowercase and numbers.");
}
}
// On vérifie que le vérifie que le mot de passe de l'utilisateur ne soit pas vide.
if (password.length() == 0 || password.length() == 1) {
throw new PasswordException("The password contain at least two elements.");
}
// On vérifie que le mot de passe de l'utilisateur doit commencer par une majuscule.
if (password.charAt(0) > 'Z' || password.charAt(0) < 'A') {
throw new PasswordException("The password must begin with an uppercase.");
}
// On vérifie que le mot de passe de l'utilisateur ne doit contenir que des minuscules et des chiffres.
for (int i = 1; i < password.length(); i++) {
if ((password.charAt(i) > 'z' || password.charAt(i) < 'a') && (password.charAt(i) > '9' || password.charAt(i) < '0')) {
throw new PasswordException("The password must contain only lowercase and numbers.");
}
}
this.password = password;
this.username = username;
}
//Renvoie le pseudo de l'utilisateur.
public String getUsername() {
return username;
}
//Renvoie le mot de passe de l'utilisateur.
public String getPassword() {
return password;
}
@Override
public boolean equals(Object o) {
if (o instanceof User) {
return ((User) o).username.equals(username);
}
return false;
}
@Override
public int hashCode() {
int hash = 7;
hash = 97 * hash + Objects.hashCode(this.username);
return hash;
}
}
UserList
package boitedejeux;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashSet;
import java.util.Scanner;
import java.util.*;
public class UserList {
private HashSet<User> loginList;
//Initialise une liste vide et la remplie à partir d'un fichier texte.
public UserList() throws UsernameException, PasswordException {
Scanner scan;
loginList = new HashSet();
try {
scan = new Scanner(new File("src/boitedejeux/Logins.txt"));
String ligne = scan.nextLine();
while (scan.hasNext()) {
ligne = scan.nextLine();
String[] res = ligne.split(", ");
loginList.add(new User(res[0], (res[1])));
}
} catch (FileNotFoundException e) {
System.out.println("Error");
}
}
// Vérifie que la loginList soit bien initialisé.
//Puis l'a parcours en vérifiant que le nom d'uttilisateur et le mot de passe correspondent à un présent dans la liste. Si présent renvoie "True" sinon "False".
public boolean authenticate(String username, String password) {
if (null == loginList) {
throw new IllegalStateException("The login list isn't initialised");
}
return loginList.stream()
.filter(usern -> usern.getUsername().equals(username))
.filter(passw -> passw.getPassword().equals(password))
.findFirst()
.isPresent();
}
//Ajoute un joueur dans le fichier texte.
public void inscription(String username, String password) throws IOException, UsernameException, PasswordException {
// On vérifie que le nom d'utilisateur n'existe déjà pas.
Iterator<User> it = loginList.iterator();
while(it.hasNext()){
User u = (User) it.next();
if(username.equals(u)){
throw new UsernameException("This username already exist.");
}
}
// On vérifie que le nom de l'utilisateur ne soit pas vide.
if (username.length() == 0 || username.length() == 1) {
throw new UsernameException("The username must contain at least two elements.");
}
// On vérifie que le nom de l'utilisateur doit commencer par une majuscule.
if (username.charAt(0) > 'Z' || username.charAt(0) < 'A') {
throw new UsernameException("The username must begin with an uppercase.");
}
// On vérifie que le nom de l'utilisateur ne doit contenir que des minuscules et des chiffres.
for (int i = 1; i < username.length(); i++) {
if ((username.charAt(i) > 'z' || password.charAt(i) < 'a') && (username.charAt(i) > '9' || username.charAt(i) < '0')) {
throw new UsernameException("The username must contain only lowercase and numbers.");
}
}
// On vérifie que le mot de passe de l'utilisateur ne soit pas vide.
if (password.length() == 0 || username.length() == 1) {
throw new PasswordException("The password must contain at least two elements.");
}
// On vérifie que le mot de passe de l'utilisateur doit commencer par une majuscule.
if (password.charAt(0) > 'Z' || password.charAt(0) < 'A') {
throw new PasswordException("The password must begin with an uppercase.");
}
// On vérifie que le mot de passe de l'utilisateur ne doit contenir que des minuscules et des chiffres.
for (int i = 1; i < password.length(); i++) {
if ((password.charAt(i) > 'z' || password.charAt(i) < 'a') && (password.charAt(i) > '9' || password.charAt(i) < '0')) {
throw new PasswordException("The password must contain only lowercase and numbers.");
}
Writer output;
output = new BufferedWriter(new FileWriter("src/boitedejeux/Logins.txt", true));
output.append("\n" + username + ", " + password);
output.close();
}
}
}
UsernameException
package boitedejeux;
public class UsernameException extends Exception {
public UsernameException() {
}
public UsernameException(String msg) {
super(msg);
}
}
PasswordException
package boitedejeux;
public class PasswordException extends Exception {
public PasswordException() {
}
public PasswordException(String msg) {
super(msg);
}
}
Login.txt
Username, Password
Test, Test
Lol, Lol
TT, Te
Заранее спасибо за помощь.