Premier commit - Introduction au système git

This commit is contained in:
Mysaa 2021-05-26 22:02:07 +02:00
commit 3897fafc01
23 changed files with 942 additions and 0 deletions

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
# Ignore Gradle project-specific cache directory
.gradle/
gradlew
gradlew.bat
gradle/
# Ignore Gradle build output directory
build/
bin/
# Eclipse files
.classpath
.settings
.project

33
build.gradle Normal file
View File

@ -0,0 +1,33 @@
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java Library project to get you started.
* For more details take a look at the Java Libraries chapter in the Gradle
* User Manual available at https://docs.gradle.org/6.0/userguide/java_library_plugin.html
*/
plugins {
// Apply the java-library plugin to add support for Java Library
id 'java-library'
}
repositories {
// Use jcenter for resolving dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
mavenCentral()
}
dependencies {
compile 'com.amihaiemil.web:eo-yaml:4.3.3'
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:28.0-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
}

10
settings.gradle Normal file
View File

@ -0,0 +1,10 @@
/*
* This file was generated by the Gradle 'init' task.
*
* The settings file is used to specify which projects to include in your build.
*
* Detailed information about configuring a multi-project build in Gradle can be found
* in the user manual at https://docs.gradle.org/6.0/userguide/multi_project_builds.html
*/
rootProject.name = 'Murderator'

View File

@ -0,0 +1,21 @@
package com.bernard.murder;
import com.bernard.murder.view.MurderatorMainFrame;
public class Murderator {
static MurderatorMainFrame mainFrame;
public static void main(String[] args) {
mainFrame = new MurderatorMainFrame();
/*File f = new File("/home/mysaa/Documents/eclipse-workspace/Murderator/uneMurder.bernard.tmurder");
try {
System.out.println(GameCreator.genFromFile(f));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
mainFrame.startFrame();
}
}

View File

@ -0,0 +1,74 @@
package com.bernard.murder;
import java.awt.Color;
import java.io.IOException;
import java.util.Collection;
import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import com.amihaiemil.eoyaml.Yaml;
import com.amihaiemil.eoyaml.YamlMapping;
import com.amihaiemil.eoyaml.YamlNode;
import com.amihaiemil.eoyaml.YamlSequence;
public class ParseUtils {
static Pattern timeLengthPattern = Pattern.compile("^(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s?)?$");
public static long parseTimeLength(String tl) {
Matcher mtch = timeLengthPattern.matcher(tl);
if(!mtch.matches())throw new IllegalArgumentException("La chaine de caractères «"+tl+"» ne décrit pas un intervalle de temps normalisé");
int h = mtch.group(2)==null?0:Integer.parseInt(mtch.group(2));
int m = mtch.group(4)==null?0:Integer.parseInt(mtch.group(4));
int s = mtch.group(6)==null?0:Integer.parseInt(mtch.group(6));
return h*3600+m*60+s;
}
public static <T> Set<T> union(Collection<T> c1, Collection<T> c2){
Set<T> out = c1.stream().collect(Collectors.toSet());
out.addAll(c2);
return out;
}
public static Set<String> mappingKeys(YamlMapping mapping) throws IOException{
return mapping.keys().stream().map(n ->{
try {
return Yaml.createYamlInput(n.toString()).readYamlSequence().string(0);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}).collect(Collectors.toSet());
}
public static Stream<YamlNode> sequenceStream(YamlSequence sequence){
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(sequence.iterator(),Spliterator.ORDERED),false);
}
public static String node(YamlNode n){
try {
return Yaml.createYamlInput(n.toString()).readYamlSequence().string(0);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static <T> Function<YamlNode,T> wetherMapping(Function<YamlNode,T> fnot,Function<YamlMapping,T> fyes){
return n -> (n instanceof YamlMapping)?fyes.apply((YamlMapping)n):fnot.apply(n);
}
public static Color randColor() {
return Color.getHSBColor((float) Math.random(), 1.0f, 1.0f);
}
public static Color getContrastColor(Color color) {
double y = (299 * color.getRed() + 587 * color.getGreen() + 114 * color.getBlue()) / 1000;
return y >= 128 ? Color.black : Color.white;
}
}

View File

@ -0,0 +1,149 @@
package com.bernard.murder.game;
import static com.bernard.murder.ParseUtils.mappingKeys;
import static com.bernard.murder.ParseUtils.node;
import static com.bernard.murder.ParseUtils.parseTimeLength;
import static com.bernard.murder.ParseUtils.sequenceStream;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import com.amihaiemil.eoyaml.Yaml;
import com.amihaiemil.eoyaml.YamlInput;
import com.amihaiemil.eoyaml.YamlMapping;
import com.amihaiemil.eoyaml.YamlNode;
import com.amihaiemil.eoyaml.YamlSequence;
import com.bernard.murder.ParseUtils;
import com.bernard.murder.model.Action;
import com.bernard.murder.model.Objet;
import com.bernard.murder.model.Partie;
import com.bernard.murder.model.Personnage;
import com.bernard.murder.model.Piece;
import com.bernard.murder.model.Status;
public class GameCreator {
public static Partie genFromFile(File toread) throws IOException{
YamlInput input = Yaml.createYamlInput(toread);
YamlMapping globalMap = input.readYamlMapping();
YamlMapping yjoueurs = globalMap.yamlMapping("joueurs");
System.out.println(yjoueurs);
// Pour pouvoir créer les objets et les espaces personnels
Set<String> playerNames = mappingKeys(yjoueurs).stream().map(n -> n.toString()).collect(Collectors.toSet());
YamlMapping yactions = globalMap.yamlMapping("actions");
Set<Action> actions = yactions.keys()
.stream()
.map(n -> new Action(node(n), parseTimeLength(yactions.string(n))))
.collect(Collectors.toSet());
Map<String,Set<Action>> persActions = playerNames.stream()
.collect(Collectors.toMap(Function.identity(), s -> actions.stream().map(Action::clone).collect(Collectors.toSet())));
YamlSequence yinventory = globalMap.yamlSequence("inventaire");
Set<String> objets = StreamSupport.stream(Spliterators.spliteratorUnknownSize(yinventory.iterator(),Spliterator.ORDERED),false)
.map(n ->ParseUtils.node(n))
.collect(Collectors.toSet());
Map<String,Set<Objet>> persObjets = playerNames.stream()
.collect(Collectors.toMap(Function.identity(),p -> objets.stream().map(o ->new Objet(String.format(o,p))).collect(Collectors.toSet())));
YamlSequence ystatus = globalMap.yamlSequence("status");
Set<Status> status = sequenceStream(ystatus).map(n -> new Status(node(n))).collect(Collectors.toSet());
YamlMapping yespaces = globalMap.yamlMapping("espaces");
Map<String, Map<Objet, Integer>> objetsDansEspaces = yespaces.keys().stream().collect(Collectors.toMap(
n -> node(n),
n-> parseHiddenObjects(yespaces.yamlSequence(n))
));
Set<Piece> espaceObjets = yespaces.keys().stream()
.map(n -> new Piece(node(n), objetsDansEspaces.get(node(n))))
.collect(Collectors.toSet());
YamlMapping yespacesPersos = globalMap.yamlMapping("espacesPersos");
Map<String,Set<Piece>> persespacesPersos = playerNames.stream().collect(Collectors.toMap(
Function.identity(),
p -> yespacesPersos.keys().stream()
.map(e -> new Piece(
String.format(node(e), p),
parseHiddenObjects(yespacesPersos.yamlSequence(e),p)
))
.collect(Collectors.toSet())
));
//Per perso settings
for(YamlNode pn : yjoueurs.keys()) {
String pname = node(pn);
System.out.println(pn);
System.out.println(yjoueurs.yamlMapping(pn));
persActions.get(pname).addAll(
yjoueurs.yamlMapping(pn).yamlMapping("actions").keys()
.stream()
.map(n -> new Action(node(n), parseTimeLength(yjoueurs.yamlMapping(pn).yamlMapping("actions").string(n))))
.collect(Collectors.toSet())
);
persObjets.get(pname).addAll(
StreamSupport.stream(Spliterators.spliteratorUnknownSize(yjoueurs.yamlMapping(pn).yamlSequence("inventaire").iterator(),Spliterator.ORDERED),false)
.map(n ->ParseUtils.node(n))
.map(o ->new Objet(o))
.collect(Collectors.toSet())
);
if(yjoueurs.yamlMapping(pn).yamlMapping("espacePerso")!= null)
// Plusieurs espaces
yjoueurs.yamlMapping(pn).yamlMapping("espacePerso").keys().forEach(n ->
persespacesPersos.get(pname)
.stream()
.filter(p -> p.getNom().contentEquals(node(n)))
.findAny()
.orElseGet(() -> new Piece(node(n)))
.insertObjects(parseHiddenObjects(yjoueurs.yamlMapping(pn).yamlMapping("espacePerso").yamlSequence(n)))
);
else
((persespacesPersos.get(pname).isEmpty())?
Stream.of(new Piece(String.format("Espace de %s",pname))):persespacesPersos.get(pname).stream())
.forEach(p -> p.insertObjects(parseHiddenObjects(yjoueurs.yamlMapping(pn).yamlSequence("espacePerso"))));
}
Set<Personnage> personnages = playerNames.stream().map(p -> new Personnage(
p,
persObjets.get(p),
persActions.get(p),
status.stream().filter(st -> sequenceStream(ystatus)
.filter(n -> n instanceof YamlMapping)
.filter(n -> ((YamlMapping)n).string(st.getName())!=null)
.filter(n -> ((YamlMapping)((YamlMapping)n).yamlMapping(st.getName())).string("onStart").contentEquals("true"))
.findAny().isPresent())
.collect(Collectors.toSet()),
persespacesPersos.get(p)
)).collect(Collectors.toSet());
return new Partie(personnages, status, espaceObjets);
}
private static Map<Objet,Integer> parseHiddenObjects(YamlSequence sequence,Object... nameFormat){
return sequenceStream(sequence).collect(Collectors.toMap(
on -> new Objet(String.format((on instanceof YamlMapping)?(((YamlMapping)on).keys().stream().map(nn -> node(nn)).findAny().get()):node(on),nameFormat)),
on -> ((on instanceof YamlMapping)?(((YamlMapping)on).integer(((YamlMapping)on).keys().stream().findAny().get())):-1)
));
}
private static Map<Objet,Integer> parseHiddenObjects(YamlSequence sequence){
return parseHiddenObjects(sequence, new Object[0]);
}
}

View File

@ -0,0 +1,13 @@
package com.bernard.murder.game;
import com.bernard.murder.model.Partie;
public class GameManager {
Partie partie;
public GameManager(Partie partie) {
this.partie = partie;
}
}

View File

@ -0,0 +1,29 @@
package com.bernard.murder.model;
public class Action implements Cloneable{
String action;
long basetime;
long triggertime;
public Action(String action, long basetime) {
this.action = action;
this.basetime = basetime;
this.triggertime = Long.MIN_VALUE;
}
@Override
public Action clone() {
Action actions = new Action(action, basetime);
actions.triggertime = triggertime;
return actions;
}
@Override
public String toString() {
return "Action [action=" + action + ", basetime=" + basetime + ", triggertime=" + triggertime + ", transient id=" + System.identityHashCode(this) + "]";
}
}

View File

@ -0,0 +1,9 @@
package com.bernard.murder.model;
import java.util.Set;
public interface Inventaire {
Set<Objet> getObjects();
}

View File

@ -0,0 +1,22 @@
package com.bernard.murder.model;
public class Objet {
String nom;
public Objet(String nom) {
this.nom = nom;
}
public String getNom() {
return nom;
}
@Override
public String toString() {
return "Objet [nom=" + nom + "]";
}
}

View File

@ -0,0 +1,39 @@
package com.bernard.murder.model;
import java.util.Set;
import java.util.stream.Stream;
public class Partie {
Set<Personnage> personnages;
Set<Status> statuz;
Set<Piece> piece;
public Partie(Set<Personnage> personnages, Set<Status> statuz, Set<Piece> piece) {
this.personnages = personnages;
this.statuz = statuz;
this.piece = piece;
}
public int persoCount() {
return personnages.size();
}
public Stream<Personnage> personnagesStream() {
return personnages.stream();
}
public Stream<Piece> piecesStream() {
return piece.stream();
}
@Override
public String toString() {
return "Partie [personnages=" + personnages + ", statuz=" + statuz + ", piece=" + piece + "]";
}
}

View File

@ -0,0 +1,59 @@
package com.bernard.murder.model;
import java.util.Set;
import java.util.stream.Stream;
public class Personnage implements Inventaire{
String nom;
Set<Objet> inventaire;
Set<Action> actions;
Set<Status> status;
Set<Piece> espacesPersos;
public Personnage(String nom, Set<Objet> inventaire, Set<Action> actions, Set<Status> status,
Set<Piece> espacesPersos) {
super();
this.nom = nom;
this.inventaire = inventaire;
this.actions = actions;
this.status = status;
this.espacesPersos = espacesPersos;
}
public String getNom() {
return nom;
}
public Set<Objet> getInventaire() {
return inventaire;
}
public Stream<Piece> streamEspacesPersos(){
return espacesPersos.stream();
}
@Override
public String toString() {
return "Personnage [nom=" + nom + ", inventaire=" + inventaire + ", actions=" + actions + ", status=" + status
+ ", espacesPersos=" + espacesPersos + "]";
}
@Override
public Set<Objet> getObjects() {
return inventaire;
}
}

View File

@ -0,0 +1,43 @@
package com.bernard.murder.model;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Piece implements Inventaire{
String nom;
Map<Objet,Integer> contenu;
public Piece(String nom) {
this(nom, new HashMap<Objet, Integer>());
}
public Piece(String nom, Map<Objet, Integer> contenu) {
this.nom = nom;
this.contenu = contenu;
}
@Override
public String toString() {
return "Piece [nom=" + nom + ", contenu=" + contenu + "]";
}
public String getNom() {
return nom;
}
@Override
public Set<Objet> getObjects() {
return contenu.keySet();
}
public void insertObjects(Map<Objet, Integer> objs) {
contenu.putAll(objs);
}
}

View File

@ -0,0 +1,21 @@
package com.bernard.murder.model;
public class Status {
String name;
public Status(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Status [name=" + name + "]";
}
}

View File

@ -0,0 +1,6 @@
module murder{
requires com.amihaiemil.eoyaml;
requires java.desktop;
}

View File

@ -0,0 +1,60 @@
package com.bernard.murder.view;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.swing.JPanel;
import com.bernard.murder.model.Inventaire;
import com.bernard.murder.model.Objet;
public class GlobalUIManager implements MouseListener{
public GlobalUIManager(JPanel globalPan) {
globalPan.addMouseListener(this);
}
Set<Objet> currentUIselection = new HashSet<Objet>();
Map<JPanel,Inventaire> inventaire = new HashMap<>();
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println(e.getSource());
System.out.println(e.getComponent());
}
@Override
public void mouseReleased(MouseEvent e) {
if(e.getButton()==MouseEvent.NOBUTTON) {
currentUIselection.clear();
}
}
@Override
public void mouseEntered(MouseEvent e) {
if(e.getButton()==MouseEvent.NOBUTTON) {
// Le clic a peut être été laché à l'exterieur
currentUIselection.clear();
}
}
@Override
public void mouseExited(MouseEvent e) {
}
}

View File

@ -0,0 +1,49 @@
package com.bernard.murder.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.bernard.murder.game.GameManager;
import com.bernard.murder.model.Partie;
import com.bernard.murder.model.Personnage;
import com.bernard.murder.view.minel.InventaireMinel;
import com.bernard.murder.view.minel.Minel;
import com.bernard.murder.view.minel.TextPanMinel;
public class MinelsCreator {
public static Map<String, List<Minel>> genSupMinels(Partie partie, GameManager manager) {
Map<String, List<Minel>> outPute = new HashMap<String, List<Minel>>();
List<Minel> generalMinels = new ArrayList<Minel>();
partie.piecesStream().map(p -> new InventaireMinel(manager, p)).forEach(m -> generalMinels.add(m));
generalMinels.add(new TextPanMinel(manager));
outPute.put("Général", generalMinels);
return outPute;
}
public static Map<Personnage, List<Minel>> genMinels(Partie partie, GameManager manager) {
return partie.personnagesStream().collect(Collectors.toMap(Function.identity(), p -> genMinelsForPerso(partie,manager,p)));
}
private static List<Minel> genMinelsForPerso(Partie partie, GameManager manager, Personnage personnage){
List<Minel> minels = new ArrayList<Minel>();
minels.add(new InventaireMinel(manager, personnage));
personnage.streamEspacesPersos().map(p -> new InventaireMinel(manager, p)).forEach(m -> minels.add(m));
minels.add(new TextPanMinel(manager));
return minels;
}
}

View File

@ -0,0 +1,128 @@
package com.bernard.murder.view;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.File;
import java.util.List;
import java.util.Map;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import com.bernard.murder.game.GameCreator;
import com.bernard.murder.game.GameManager;
import com.bernard.murder.model.Partie;
import com.bernard.murder.model.Personnage;
import com.bernard.murder.view.minel.Minel;
public class MurderatorMainFrame extends JFrame{
private static final long serialVersionUID = -4512350072325470066L;
public MurderatorMainFrame() {
}
public void startFrame() {
this.setSize(700, 500);
this.setMinimumSize(new Dimension(575, 200));
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("En attente d'un fichier");
this.setContentPane(genFirstPanel());
this.setVisible(true);
}
public JPanel genFirstPanel() {
JPanel globalPanel = new JPanel();
globalPanel.setLayout(new BoxLayout(globalPanel, BoxLayout.PAGE_AXIS));
JPanel semiPan = new JPanel();
semiPan.setLayout(new BoxLayout(semiPan, BoxLayout.LINE_AXIS));
JButton loadFile = new JButton("Ouvrir un fichier");
loadFile.addActionListener(e -> {
this.setEnabled(false);
JFileChooser chooser = new JFileChooser();
int returnState = chooser.showOpenDialog(this);
if(returnState==JFileChooser.APPROVE_OPTION) {
File toread = chooser.getSelectedFile();
try {
Partie partie = GameCreator.genFromFile(toread);
GameManager manager = new GameManager(partie);
Map<String,List<Minel>> minelsSup = MinelsCreator.genSupMinels(partie,manager);
Map<Personnage,List<Minel>> minels = MinelsCreator.genMinels(partie,manager);
this.setContentPane(genGamePane(partie,manager,minelsSup,minels));
this.getContentPane().repaint(20);
}catch(Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, ex.getLocalizedMessage(), "Impossible de lire le fichier", JOptionPane.ERROR_MESSAGE);
}
}
this.setEnabled(true);
});
semiPan.add(loadFile);
globalPanel.add(semiPan);
return globalPanel;
}
public JPanel genGamePane(Partie partie,GameManager manager,Map<String,List<Minel>> minelsSup,Map<Personnage,List<Minel>> minels) {
JPanel globalPan = new JPanel(new BorderLayout());
GlobalUIManager guim = new GlobalUIManager(globalPan);
//Center Panel
CardLayout centerLayout = new CardLayout();
JPanel centerPan = new JPanel(centerLayout);
for(String s : minelsSup.keySet()) {
JPanel centralLocalBpanPan = new JPanel(new GridLayout(2,(minelsSup.get(s).size()+1)/2));
minelsSup.get(s).stream().map(m -> m.genContentPane(guim)).forEach(mpan -> centralLocalBpanPan.add(mpan));
JScrollPane centralLocalPan = new JScrollPane(centralLocalBpanPan);
centerPan.add(centralLocalPan, s);
}
for(Personnage p : minels.keySet()) {
JPanel centralLocalBpanPan = new JPanel(new GridLayout(2, (minels.get(p).size()+1)/2));
minels.get(p).stream().map(m -> m.genContentPane(guim)).forEach(mpan -> centralLocalBpanPan.add(mpan));
JScrollPane centralLocalPan = new JScrollPane(centralLocalBpanPan);
centerPan.add(centralLocalPan, personnageIdentifier(p));
}
//Left Panel
JPanel leftPan = new JPanel(new GridLayout(minels.size() + minelsSup.size(), 1));
for(String s : minelsSup.keySet()) {
JButton localButton = new JButton(s);
localButton.addActionListener(e -> centerLayout.show(centerPan, s));
leftPan.add(localButton);
}
for(Personnage p : minels.keySet()) {
JButton localButton = new JButton(p.getNom());
localButton.addActionListener(e -> centerLayout.show(centerPan, personnageIdentifier(p)));
leftPan.add(localButton);
}
globalPan.add(leftPan, BorderLayout.WEST);
globalPan.add(centerPan, BorderLayout.CENTER);
return globalPan;
}
public String personnageIdentifier(Personnage personnage) {
return String.format("%08X",System.identityHashCode(personnage))+personnage.getNom();
}
}

View File

@ -0,0 +1,58 @@
package com.bernard.murder.view.minel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import com.bernard.murder.ParseUtils;
import com.bernard.murder.game.GameManager;
import com.bernard.murder.model.Inventaire;
import com.bernard.murder.model.Objet;
import com.bernard.murder.view.GlobalUIManager;
public class InventaireMinel extends Minel {
public InventaireMinel(GameManager manager, Inventaire inv) {
super(manager);
this.inv = inv;
}
JList<Objet> objets;
Inventaire inv;
@Override
public JPanel genContentPane(GlobalUIManager guim) {
JPanel globalpan = new JPanel(new BorderLayout());
globalpan.setBackground(ParseUtils.randColor());
JPanel inventaire = new JPanel();
inventaire.setBackground(ParseUtils.randColor());
JButton voler = new JButton("RandomItem");
voler.addActionListener(e -> {
objets.setSelectedIndex((int) (Math.random() * objets.getModel().getSize()));
});
// TODO dragndrop multiple items
objets = new JList<Objet>();
objets.addMouseListener(guim);
updateObjets();
inventaire.add(objets);
globalpan.add(voler, BorderLayout.SOUTH);
globalpan.add(inventaire, BorderLayout.CENTER);
return globalpan;
}
private void updateObjets() {
Objet[] objz = new Objet[inv.getObjects().size()];
objz = inv.getObjects().toArray(objz);
objets.setListData(objz);
}
}

View File

@ -0,0 +1,21 @@
package com.bernard.murder.view.minel;
import javax.swing.JPanel;
import com.bernard.murder.game.GameManager;
import com.bernard.murder.view.GlobalUIManager;
public abstract class Minel{
GameManager manager;
public Minel(GameManager manager) {
this.manager = manager;
}
public abstract JPanel genContentPane(GlobalUIManager guim);
}

View File

@ -0,0 +1,37 @@
package com.bernard.murder.view.minel;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import com.bernard.murder.ParseUtils;
import com.bernard.murder.game.GameManager;
import com.bernard.murder.view.GlobalUIManager;
public class TextPanMinel extends Minel {
public TextPanMinel(GameManager manager) {
super(manager);
}
@Override
public JPanel genContentPane(GlobalUIManager guim) {
JPanel globalPan = new JPanel(new BorderLayout());
globalPan.setBackground(ParseUtils.randColor());
JTextArea textArea = new JTextArea();
textArea.setBorder(new EmptyBorder(23,23,23,23));
Color col = ParseUtils.randColor();
textArea.setBackground(col);
textArea.setForeground(ParseUtils.getContrastColor(col));
globalPan.add(new JScrollPane(textArea),BorderLayout.CENTER);
return globalPan;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -0,0 +1,46 @@
actions:
Doudou: 23s
Chanter: 42s
status:
- Mort
- Paralysie
- NoKill:
onStart: true
inventaire:
# Tout le monde en a un au départ, sera nommé Portefeuille_Bernard, Portefeuille_Jach
-"Portefeuille de %s"
espaces:
"Cabine du capitaine":
- "Clés du bateau": 12
- "Carte grise"
espacesPersos:
# Un espace chacun, appelé Chambre_Jach, Chambre_Bernard
"Chambre de %s":
- "Manteau de %s"
joueurs:
Bernard:
actions:
DominerLeMonde: 42s
inventaire:
- "JuL'IA"
- "MasterKey"
espacePerso:
"Chambre de Bernard":
- "Pipi"
Jach:
actions:
Python: 2h15m
status:
- "Rage du normalien"
inventaire:
- "PB ENS"
espacePerso:
- "Guide Richard"
# Par défaut, se place dans le seul espace personnel (Si il y en a deux, pas bon)