2017-01-13 1 views
0

Donc, j'ai pu faire fonctionner mon code, mais j'ai des problèmes avec le code highscore. Je suis incapable d'utiliser les fonctions bufferedreader et printwriter parce que pour une raison que je ne comprends pas, ils ne fonctionnent pas. Je veux que le programme compare le score au highscore, et si le score est plus grand que le highscore, le highscore sera mis à jour sur un fichier txt. la raison pour laquelle le fichier txt est nécessaire est due au fait qu'une fois le programme fermé, j'ai besoin d'une méthode pour vérifier le meilleur score précédent. Je suis vraiment nouveau dans l'utilisation du traitement et de l'écriture et la lecture de fichiers txt en utilisant des programmes, et aucun des autres sites et forums que j'ai examinés n'a aidé parce qu'ils n'écrivent pas la variable highscore sur un fichier txt. S'il vous plaît aider, je suis prêt à briser mon ordinateur. EM1.score = le score accumulé au cours du programme.J'ai du mal à faire mon traitement PrintWriter et BufferedReader fonctionnent

class High_Score { 
int highscore = 0; 
PrintWriter output; //imports the writer 
BufferedReader reader; //imports the reader 
int state = 0; //sets the varoable for the keyboard 

void scoring() { 
int score = EM1.score; 
if (score > highscore) { 
    highscore = score; 
} 
textSize(30); 
text("Your score is "+ score, 150, height/4); 
text("The current highscore is "+highscore+".", 75, height/2); 
text("Try to beat it.", 200, 450); 
textSize(12); 
text("Press esc to exit this page.", 225, 550); 
} 

void reader() { 
importHS(); 
updateHS(); 
} 

void updateHS() { 
int score = EM1.score; 
output = createWriter("highscore.txt"); //creates the file that will be 
if (highscore < score) { 
highscore = score; 
output.print(highscore); 
output.close(); 
} 
} 

void importHS() { 
reader = createReader("highscore.txt"); //reads the current highscore 
if (reader == null) { 
    highscore = 0; 
    return; 
} 
String line; 
try { 
    line = reader.readLine(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
    line = null; 
} 
if (line != null) { 
    highscore = int(line); 
    println(highscore); 
} 
try { 
    reader.close(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 
} 

void type() { //allows the screen to close is esc is pressed on the keyboard 
state = key; 
if (key == ESC) { 
    exit(); 
} 
} 
} 

Répondre

0

Vous y êtes presque. Il y a seulement deux ou trois choses que je vois légèrement:

  1. vous n'êtes pas appeler flush() sur l'auteur à écrit les données restantes dans le fichier
  2. vérification if (highscore < score) en updateHS() empêche la écriture: vous n » T en a vraiment besoin car scoring() vérifie déjà si le score actuel est un meilleur score et se met à jour en conséquence.

est ici la plupart de votre code modifié pour écrire/lire à partir du disque:

EM1Class EM1 = new EM1Class(); 
High_Score hs = new High_Score(); 

void setup(){ 
    size(800,600); 

    EM1.score = 500; 

    hs.reader(); 
} 

void draw(){ 
    background(0); 
    hs.scoring(); 
    hs.updateHS(); 
} 

void keyPressed(){ 
    if(keyCode == UP) EM1.score += 10; 
    if(keyCode == DOWN) EM1.score -= 10; 
} 

class EM1Class{ 
    int score; 
} 
class High_Score { 
    int highscore = 0; 
    PrintWriter output; //imports the writer 
    BufferedReader reader; //imports the reader 
    int state = 0; //sets the varoable for the keyboard 

    void scoring() { 
    int score = EM1.score; 
    if (score > highscore) { 
     highscore = score; 
    } 
    textSize(30); 
    text("Your score is "+ score, 150, height/4); 
    text("The current highscore is "+highscore+".", 75, height/2); 
    text("Try to beat it.", 200, 450); 
    textSize(12); 
    text("Press esc to exit this page.", 225, 550); 
    } 

    void reader() { 
    importHS(); 
    updateHS(); 
    } 

    void updateHS() { 
    int score = EM1.score; 
    output = createWriter("highscore.txt"); //creates the file that will be 
    output.print(highscore); 
    output.flush(); 
    output.close(); 
    } 

    void importHS() { 
    reader = createReader("highscore.txt"); //reads the current highscore 
    if (reader == null) { 
     highscore = 0; 
     return; 
    } 
    String line; 
    try { 
     line = reader.readLine(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
     line = null; 
    } 
    if (line != null) { 
     highscore = int(line); 
     println(highscore); 
    } 
    try { 
     reader.close(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

    void type() { //allows the screen to close is esc is pressed on the keyboard 
    state = key; 
    if (key == ESC) { 
     exit(); 
    } 
    } 
} 

There'a espace réservé EM1Class il juste pour une esquisse pourrait compiler.

Je ne suis pas sûr que la classe High_Score devrait savoir sur EM1 directement. Vous voudrez peut-être refactoriser le code un peu et vous assurer qu'il n'est pas aussi étroitement couplé qu'il l'est actuellement puisque vous utilisez des classes de toute façon.

Vérifiez également un Java style guide: il vous aidera à écrire du code cohérent et bien organisé. Il sera certainement rentable de construire la discipline pour le faire à long terme, mais aussi immédiatement que votre code sera plus facile à lire/lire rapidement et à en déduire le flux.

Une autre option consiste à utiliser les fonctions intégrées de traitement XML et JSON qui seront plus faciles à analyser (et qui ont également des fonctions pratiques de chargement/sauvegarde).

int score = 0; 
int highScore; 

void setup(){ 
    loadHighScore(); 
} 
void draw(){ 
    background(0); 
    text("score:"+score+"\nhighScore:"+highScore+"\n\nuse UP/DOWN\narrows",10,15); 
} 
void keyPressed(){ 
    if(keyCode == UP) score += 10; 
    if(keyCode == DOWN) score -= 10; 
    if(score > highScore) highScore = score; 
} 

void loadHighScore(){ 
    try{ 
    JSONObject jsonScore = loadJSONObject("highScore.json"); 
    highScore = jsonScore.getInt("highScore"); 
    }catch(Exception e){ 
    println("error loading/parsing highScore.json"); 
    e.printStackTrace(); 
    } 
} 
void saveHighScore(){ 
    JSONObject jsonScore = new JSONObject(); 
    jsonScore.setInt("highScore",highScore); 
    saveJSONObject(jsonScore,"highScore.json"); 
} 

//save on close 
void exit(){ 
    saveHighScore(); 
    super.exit(); 
}