CPE-LYON-APICOT / projet-cheddarcheese

projet-cheddarcheese created by GitHub Classroom
1 stars 0 forks source link

Pour la prochaine fois (27/03) #2

Open lorBorja opened 3 months ago

lorBorja commented 3 months ago

Pour la prochaine fois nous devons faire une première map qui ne contient que une planche à découper et un dépôt. Seul l'ingrédient de tomate doit être présent et le joueur pourra le prendre, le poser et le découper. L'important et d'avoir la map crée dynamiquement selon un csv, de pouvoir déplacer le perso et de pouvoir interagir avec un outil de cuisine.

AlexisPicot commented 3 months ago

N'hésitez pas pour votre architecture de comme nous l'avions évoqué à envisager de vous inspirer de la solution suivante :


@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@interface Transformables {
    Transformable[] value();
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Repeatable(value = Transformables.class)
@interface Transformable {
    Class<? extends Machine> machine();
    int duration() default 10;
    Class<? extends Aliment>transformsTo();
    boolean destroysUponTimeOut() default false;
}

Voici le code que je vous donne, Vous pouvez l'utiliser ainsi :

@Transformable(machine = Mixeur.class, transformsTo = Gazpacho.class, duration = 10, destroysUponTimeOut = false)
@Transformable(machine = Poêle.class, transformsTo = TomatesPoellees.class, duration = 5, destroysUponTimeOut = true)
public class Tomate extends Aliment {
}

class TomatesPoellees extends Aliment {
}

class Gazpacho extends Aliment {
}

class Aliment {
}

class Machine {
}
class Mixeur extends Machine {
}
class Poêle extends Machine {
}
public class Main {

    public static Aliment TryTransform(Aliment aliment, Machine machine) throws InstantiationException, IllegalAccessException, InterruptedException {
        if(aliment.getClass().isAnnotationPresent(Transformables.class)){
            Transformables transformables = aliment.getClass().getAnnotation(Transformables.class);
            Transformable[] transformable = transformables.value();
            for (Transformable t : transformable) {
                if(t.machine().equals(machine.getClass())){
                    System.out.println("On peut transformer "+aliment.getClass().getSimpleName()+" avec "+machine.getClass().getSimpleName()+" en "+t.transformsTo().getSimpleName());
                    //Thread.sleep(t.duration() * 1000);
                    return t.transformsTo().newInstance();
                }
            }
        }
        return aliment;
    }
    public static void main(String[] args) {

        Collection<Machine> machines = new ArrayList<>() {{
            add(new Mixeur());
            add(new Poêle());

        }};

        Tomate tomate = new Tomate();
        for (Machine machine : machines) {
            try {
                Aliment aliment = TryTransform(tomate, machine);
                System.out.println(aliment.getClass().getSimpleName());
            } catch (InstantiationException | IllegalAccessException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Ce qui nous donne :

On peut transformer Tomate avec Mixeur en Gazpacho
Gazpacho
On peut transformer Tomate avec Poêle en TomatesPoellees
TomatesPoellees