Lors de l'écriture d'un Janken RPG en Java, écrire `` System.out.println '' à chaque fois était assez compliqué, alors j'ai essayé de trouver comment le rendre plus facile.
Je pense que ce sera plus facile avec des fonctions étendues, mais cette fois je vais essayer dans une direction différente.
** Le flux général est **
--Créer une méthode pour la sortie de la console
Dans l'explication, j'essaierai de m'appliquer à une seule des trois classes.
Code jusqu'à présent
Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
System.out.println("[Démarrer Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
System.out.println("["+(cnt+1)+"Rond]");
//Déterminez lequel a gagné
Player winner = judgeJanken(player1,player2);
if(winner != null) {
System.out.println("\n"+winner.getName()+"A gagné");
winner.notifyResult(true);
}else {
System.out.println("C'est un tirage au sort");
}
}
System.out.println("Fin de Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
System.out.print(player1.getWinCount()+"contre"+player2.getWinCount()+"alors");
if (finalWinner != null) {
System.out.println(finalWinner.getName()+"Est le gagnant");
}else {
System.out.println("C'est un tirage au sort");
}
}
private Player judgeJanken(Player player1,Player player2) {
Player winner = null;
int player1hand = player1.showHand();
int player2hand = player2.showHand();
printHand(player1hand);
System.out.print("vs.");
printHand(player2hand);
System.out.print("\n");
if((player1hand == Player.stone && player2hand == Player.scissors)||
(player1hand == Player.scissors && player2hand == Player.paper)||
(player1hand == Player.paper && player2hand == Player.stone)) {
winner = player1;
}else if((player1hand == Player.stone && player2hand == Player.paper)||
(player1hand == Player.scissors && player2hand == Player.stone)||
(player1hand == Player.paper && player2hand == Player.scissors)) {
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1,Player player2) {
Player winner = null;
int player1WinCount = player1.getWinCount();
int player2WinCount = player2.getWinCount();
if(player1WinCount > player2WinCount) {
winner = player1;
}else if(player1WinCount < player2WinCount) {
winner = player2;
}
return winner;
}
private void printHand(int hand) {
switch(hand) {
case Player.stone:
System.out.print("Goo");
break;
case Player.scissors:
System.out.print("Choki");
break;
case Player.paper:
System.out.print("Par");
break;
default:
break;
}
}
}
Essayez d'ajouter une méthode comme celle ci-dessous
//ici! !! !!
public static void put(String str) {
System.out.println(str);
}
Ensuite, au lieu de taper System.out.println '', je ne pouvais faire que
put```
Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Démarrer Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Rond]");
//Déterminez lequel a gagné
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"A gagné");
winner.notifyResult(true);
}else {
put("C'est un tirage au sort");
}
}
put("Fin de Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
System.out.print(player1.getWinCount()+"contre"+player2.getWinCount()+"alors");
if (finalWinner != null) {
put(finalWinner.getName()+"Est le gagnant");
}else {
put("C'est un tirage au sort");
}
}
private Player judgeJanken(Player player1,Player player2) {
Player winner = null;
int player1hand = player1.showHand();
int player2hand = player2.showHand();
printHand(player1hand);
System.out.print("vs.");
printHand(player2hand);
System.out.print("\n");
if((player1hand == Player.stone && player2hand == Player.scissors)||
(player1hand == Player.scissors && player2hand == Player.paper)||
(player1hand == Player.paper && player2hand == Player.stone)) {
winner = player1;
}else if((player1hand == Player.stone && player2hand == Player.paper)||
(player1hand == Player.scissors && player2hand == Player.stone)||
(player1hand == Player.paper && player2hand == Player.scissors)) {
winner = player2;
}
return winner;
}
private Player judgeFinalWinner(Player player1,Player player2) {
Player winner = null;
int player1WinCount = player1.getWinCount();
int player2WinCount = player2.getWinCount();
if(player1WinCount > player2WinCount) {
winner = player1;
}else if(player1WinCount < player2WinCount) {
winner = player2;
}
return winner;
}
private void printHand(int hand) {
switch(hand) {
case Player.stone:
System.out.print("Goo");
break;
case Player.scissors:
System.out.print("Choki");
break;
case Player.paper:
System.out.print("Par");
break;
default:
break;
}
}
//ici! !! !!
public static void put(String str) {
System.out.println(str);
}
}
C'est une méthode, donc ça peut être un peu gênant lors du passage des classes, mais c'est beaucoup plus facile lol
Dans mon cas, je le savais en chemin, j'ai donc dû réécrire tout ce que j'avais écrit jusqu'à présent pour `` mettre ''.
J'étudiais juste Linux, alors essayez d'utiliser la commande sed`
~$ sed -e s/Caractère avant le remplacement/Caractère remplacé/g [nom de fichier]
―― «-e» peut être présent ou non --Si g n'est pas entré, remplacez uniquement le premier caractère
Il y a diverses choses comme, mais je les omettrai ici.
Maintenant, remplacez-le au terminal!
tarminal.
~$ sed -e s/System.out.println/put/g Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Démarrer Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Rond]");
//Déterminez lequel a gagné
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"A gagné");
winner.notifyResult(true);
}else {
put("C'est un tirage au sort");
}
}
put("Fin de Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
put(str);
}
}
Vérifiez le dossier
tarminal.
~$ cat Judge.java
public class Judge {
public void startJanken(Player player1, Player player2) {
System.out.println("[Démarrer Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
System.out.println("["+(cnt+1)+"Rond]");
//Déterminez lequel a gagné
Player winner = judgeJanken(player1,player2);
if(winner != null) {
System.out.println("\n"+winner.getName()+"A gagné");
winner.notifyResult(true);
}else {
System.out.println("C'est un tirage au sort");
}
}
System.out.println("Fin de Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
System.out.println(str);
}
}
Je pensais que le remplacement était terminé ici, mais quand je l'ai vérifié avec l'éditeur, il n'a pas été remplacé. ..
Quand je l'ai regardé ici, la commande sed n'était visible que dans l'aperçu et n'était pas réellement reflétée.
Je veux que vous le reflétiez, donc si vous le cherchez Facultatif `` -i '' (reflété directement dans le fichier)
Alors je vais réessayer
~$ sed -i -e s/System.out.println/put/g Judge.java
#### **`tarminal.`**
~$ cat Judge.java public class Judge {
public void startJanken(Player player1, Player player2) {
put("[Démarrer Janken]\n");
for (int cnt = 0;cnt < 3; cnt++) {
put("["+(cnt+1)+"Rond]");
//Déterminez lequel a gagné
Player winner = judgeJanken(player1,player2);
if(winner != null) {
put("\n"+winner.getName()+"A gagné");
winner.notifyResult(true);
}else {
put("C'est un tirage au sort");
}
}
put("Fin de Janken");
Player finalWinner = judgeFinalWinner(player1,player2);
:
:
:
:
public static void put(String str) {
put(str);
}
}
Cela se reflète fermement.
Après cela, la méthode a également été remplacée, alors je me demande si je devrais la réparer.
### résultat
C'est devenu plus facile (^ ∀ ^)
Recommended Posts