Skip to content

Commit 5ffe9ff

Browse files
author
nicol
committed
add card game suggester alpha gui
1 parent 3b2defe commit 5ffe9ff

6 files changed

Lines changed: 232 additions & 15 deletions

File tree

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package org.beta;
2+
3+
import java.awt.BorderLayout;
4+
import java.awt.Dimension;
5+
import java.awt.GridLayout;
6+
import java.io.IOException;
7+
8+
import javax.swing.JButton;
9+
import javax.swing.JFrame;
10+
import javax.swing.JPanel;
11+
import javax.swing.WindowConstants;
12+
13+
import org.magic.api.interfaces.MTGPictureEditor;
14+
import org.magic.gui.components.ImagePanel2;
15+
import org.magic.services.GuessGameService;
16+
import org.magic.services.MTGControler;
17+
import org.magic.services.tools.MTG;
18+
19+
public class GuessGameGUI extends JPanel{
20+
21+
/**
22+
*
23+
*/
24+
private static final long serialVersionUID = 1L;
25+
26+
public static void main(String[] args) throws Exception {
27+
MTGControler.getInstance().init();
28+
var frame = new JFrame();
29+
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
30+
31+
frame.getContentPane().add(new GuessGameGUI());
32+
33+
frame.setVisible(true);
34+
35+
36+
37+
38+
}
39+
40+
private GuessGameService game;
41+
private ImagePanel2 panelPictures;
42+
43+
private JPanel createAlphabetPanel() {
44+
var panel = new JPanel(new GridLayout(3, 12, 5, 5));
45+
46+
for (char letter = 'A'; letter <= 'Z'; letter++) {
47+
var button = new JButton(String.valueOf(letter));
48+
49+
button.addActionListener(e -> {
50+
char selectedLetter = e.getActionCommand().charAt(0);
51+
game.suggest(selectedLetter);
52+
try {
53+
refresh();
54+
} catch (IOException e1) {
55+
// TODO Auto-generated catch block
56+
e1.printStackTrace();
57+
}
58+
});
59+
60+
panel.add(button);
61+
}
62+
63+
return panel;
64+
}
65+
66+
67+
public void refresh() throws IOException
68+
{
69+
var img = MTG.getPlugin("FunCardMaker",MTGPictureEditor.class).getPicture(game.getCurrent(), game.getCurrent().getEdition());
70+
panelPictures.setImg(img);
71+
}
72+
73+
public GuessGameGUI() {
74+
setLayout(new BorderLayout());
75+
76+
77+
game = new GuessGameService();
78+
79+
panelPictures = new ImagePanel2(false,false,true,false);
80+
var btnNewGame = new JButton("NEW GAME");
81+
var panelLeft = new JPanel();
82+
var panelHaut = new JPanel();
83+
84+
panelPictures.setPreferredSize(new Dimension(500, 10));
85+
86+
87+
panelLeft.setLayout(new BorderLayout());
88+
panelLeft.add(createAlphabetPanel(),BorderLayout.SOUTH);
89+
90+
add(panelPictures, BorderLayout.EAST);
91+
add(panelLeft, BorderLayout.CENTER);
92+
93+
94+
panelLeft.add(panelHaut, BorderLayout.NORTH);
95+
96+
panelHaut.add(btnNewGame);
97+
98+
btnNewGame.addActionListener(_->{
99+
100+
try {
101+
game.init();
102+
refresh();
103+
} catch (IOException e) {
104+
MTGControler.getInstance().notify(e);
105+
}
106+
107+
});
108+
109+
110+
}
111+
112+
}

src/main/java/org/magic/api/providers/impl/ScryFallProvider.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,8 @@ public List<MTGCard> listAllCards() throws IOException {
204204
var ret = new ArrayList<MTGCard>();
205205

206206
for (var obj : URLTools.toJson(FileTools.readFile(f)).getAsJsonArray()) {
207-
try {
208-
ret.add(generateCard(obj.getAsJsonObject(), true));
209-
} catch (ExecutionException e) {
210-
logger.error("error generating", e);
211-
}
207+
ret.add(generateCard(obj.getAsJsonObject(), true));
208+
212209
}
213210

214211
return ret;
@@ -224,7 +221,13 @@ public MTGCard getCardByArenaId(String id) throws IOException {
224221
public MTGCard getCardByScryfallId(String crit) throws IOException {
225222
return getCardById(crit);
226223
}
227-
224+
225+
public MTGCard randomCard() throws IOException {
226+
return generateCard(URLTools.extractAsJson(BASE_URI + BASE_SUBURI + "random").getAsJsonObject(),false);
227+
}
228+
229+
230+
228231
@Override
229232
public MTGCard getCardById(String id) throws IOException {
230233
try {
@@ -314,11 +317,8 @@ private List<MTGCard> execute(RequestBuilder q) throws IOException {
314317
while (hasMore) {
315318
var arr = obj.get("data").getAsJsonArray();
316319
for (var e : arr) {
317-
try {
318-
list.add(generateCard(e.getAsJsonObject(), true));
319-
} catch (ExecutionException e1) {
320-
logger.error(e1);
321-
}
320+
list.add(generateCard(e.getAsJsonObject(), true));
321+
322322
}
323323

324324
hasMore = obj.get("has_more").getAsBoolean();
@@ -431,7 +431,7 @@ private Boolean readAsBoolean(JsonObject obj, String k) {
431431
}
432432
}
433433

434-
private MTGCard generateCard(JsonObject obj, boolean loadMeld) throws ExecutionException {
434+
private MTGCard generateCard(JsonObject obj, boolean loadMeld) {
435435

436436
var mc = new MTGCard();
437437
mc.setId(obj.get(ID).getAsString());

src/main/java/org/magic/gui/CardBuilder2GUI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public CardBuilder2GUI() {
255255
cardsTable.getColumnModel().getColumn(2).setCellRenderer(new ManaCellRenderer());
256256
cardsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
257257

258-
cardsModel.setDefaultHiddenComlumns(1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
258+
cardsModel.setDefaultHiddenComlumns(1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,18);
259259
UITools.initTableVisibility(cardsTable, cardsModel);
260260

261261
editionModel.setDefaultHiddenComlumns(0, 2, 4, 5, 8, 9);

src/main/java/org/magic/gui/models/MagicCardTableModel.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public class MagicCardTableModel extends GenericTableModel<MTGCard> {
1717
public MagicCardTableModel() {
1818
setColumns("CARD_NAME", "CARD_LANGUAGE", "CARD_MANA", "CARD_TYPES", "CARD_POWER", "CARD_RARITY", "CARD_NUMBER",
1919
"CARD_EDITION", "CARD_COLOR", "RESERVED LIST", "LAYOUT", "SHOWCASE", "EXTENDED ART", "BORDERLESS",
20-
"TIMESHIFTED", "RETRO", "SIDE", "SUBSETS");
20+
"TIMESHIFTED", "RETRO", "SIDE", "SUBSETS","ARTIST");
2121

22-
setDefaultHiddenComlumns(1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
22+
setDefaultHiddenComlumns(1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18);
2323

2424
}
2525

@@ -92,6 +92,8 @@ public Object getValueAt(int row, int column) {
9292
return mc.getSide();
9393
case 17 :
9494
return mc.getSubsets();
95+
case 18 :
96+
return mc.getArtist();
9597
default :
9698
return mc;
9799
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package org.magic.services;
2+
3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.magic.api.beans.MTGCard;
8+
import org.magic.api.pictures.impl.ScryFallPicturesProvider;
9+
import org.magic.api.providers.impl.ScryFallProvider;
10+
import org.magic.services.tools.BeanTools;
11+
12+
public class GuessGameService {
13+
14+
private MTGCard result;
15+
private MTGCard current;
16+
private List<Character> revealedLetters;
17+
private String hiddenString = "-";
18+
private int attempts=0;
19+
20+
21+
public void init() throws IOException
22+
{
23+
24+
var card = new ScryFallProvider().randomCard();
25+
card.setUrl(new ScryFallPicturesProvider().generateUrl(card, true));
26+
27+
init(card);
28+
}
29+
30+
31+
private void init(MTGCard mc)
32+
{
33+
revealedLetters = new ArrayList<>();
34+
this.result = mc;
35+
attempts=0;
36+
37+
suggest(null);
38+
}
39+
40+
public MTGCard getCurrent() {
41+
return current;
42+
}
43+
44+
public int getAttempts() {
45+
return attempts;
46+
}
47+
48+
public MTGCard getResult() {
49+
return result;
50+
}
51+
52+
public List<Character> getRevealedLetters() {
53+
return revealedLetters;
54+
}
55+
56+
private String anonymise(String text)
57+
{
58+
var result = new StringBuilder();
59+
for (var c : text.toCharArray()) {
60+
61+
if (!Character.isLetter(c) && !Character.isDigit(c)) {
62+
result.append(c);
63+
continue;
64+
}
65+
66+
if (revealedLetters.contains(Character.toLowerCase(c))) {
67+
result.append(c);
68+
} else {
69+
result.append(hiddenString );
70+
}
71+
}
72+
return result.toString();
73+
}
74+
75+
public void suggest( Character l) {
76+
77+
if(l!=null)
78+
revealedLetters.add(Character.toLowerCase(l));
79+
80+
try {
81+
current = BeanTools.cloneBean(result);
82+
current.setName(anonymise(result.getName()));
83+
current.setText(anonymise(result.getText()));
84+
85+
} catch (Exception e) {
86+
e.printStackTrace();
87+
}
88+
89+
}
90+
91+
92+
93+
94+
95+
96+
97+
98+
}

src/main/java/org/magic/services/threads/ThreadManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public static ThreadManager getInstance() {
3838

3939
return inst;
4040
}
41+
42+
public ThreadPoolExecutor getExecutor() {
43+
return executor;
44+
}
45+
4146

4247
public void executeThread(MTGRunnable task, String name) {
4348

0 commit comments

Comments
 (0)