Je souhaite implémenter l'annulation d'opération dans le jeu solitaire. J'ai créer une fonction save qui va copier l'état actuel des éléments et la charge de la fonction qui remplacera les éléments réels avec ces copies. Mais quand j'appelle la fonction save avant une opération avec la carte, la fonction sauvegarde les valeurs mais quand la source de ces valeurs change, ces variables changent aussi.Les variables définies dans la fonction sont constamment modifiées
Ces variables sont définies dans cette classe avant constructeur:
public class Game extends javax.swing.JPanel
comme celui-ci
ArrayList<CardStack> undo_card_stack1 = new ArrayList<>();
Fonction save_undo copie simplement état réel des valeurs à ces undo valeurs comme ceci:
private void save_undo()
{
undo_card_stack1.add(working_pack1_stack);
undo_card_stack2.add(working_pack2_stack);
....
La fonction est des appels avant chaque action avec une carte - carte est JLabel. Ce qui n'est pas clair pour moi, c'est pourquoi lors du débogage de cette partie du code, les valeurs sont correctement définies après les appels save_undo(), mais après une opération avec pop et quelques lignes après, les valeurs sont réécrites.
private void start_deckMouseClicked(java.awt.event.MouseEvent evt) {
save_undo();
discardPile_card = null;
if (!deck.isEmpty())
{
discardPile.deck.push(deck.pop());
...
charge de fonction ne juste en face de sauvegarde et des appels lorsque le bouton cliqué:
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
load_undo();
}
Merci, quelle est la meilleure et la plus rapide façon de faire une copie de ces objets? –
@ TomášDubovský Difficile à dire sans voir le code de votre classe CardStack. Si c'est juste un wrapper sur une ArrayList, créez juste une nouvelle instance de CardStack qui contient une * copie * de la liste. – Carcigenicate
@ TomášDubovský Créez un "constructeur de copie" pour votre classe CardStack afin de faciliter les copies. Faites un constructeur qui accepte un CardStack, puis demandez au constructeur de l'utiliser pour faire une copie. – Carcigenicate