Skip to content
Snippets Groups Projects
Commit 480e237d authored by Sixten Müller's avatar Sixten Müller
Browse files

feat: working click letter. Appear in box and removed from screen

parent 59685862
No related branches found
No related tags found
2 merge requests!22Resolve "Create game model",!18Draft: Resolve "Create game model"
package com.wordbattle.game.controller;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;
import com.wordbattle.game.network.FirebaseInterface;
import com.wordbattle.game.states.GamePlayState;
import com.wordbattle.game.view.CreateGameView;
import com.wordbattle.game.view.GamePlayView;
import java.util.Arrays;
import java.util.Stack;
public class GamePlayController {
private final GamePlayState state;
......@@ -13,6 +19,11 @@ public class GamePlayController {
private FirebaseInterface _FBIC;
private String pin;
private String word;
private Character selectedLetter = null;
private int selectedIndex = -1;
......@@ -24,10 +35,75 @@ public class GamePlayController {
// Fetch the word using the PIN and the category
fetchWord();
}
public void handleInput() {
if (Gdx.input.justTouched()) {
Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
state.getCam().unproject(touchPos); // Adjusts the touch position to the game's coordinate system.
System.out.println("Clicked on the screen");
for (int i = 0; i < gamePlayView.getLetterBounds().length; i++) {
if (gamePlayView.getLetterBounds()[i].contains(touchPos.x, touchPos.y)) {
// The i-th letter was clicked
// Handle the click, like selecting or deselecting a letter
selectedLetter = gamePlayView.getLetters().get(i);
System.out.println("Clicked on letter " + gamePlayView.getLetters().get(i));
selectedIndex = i;
// Try placing the selected letter in the next available box
boolean letterPlaced = false;
for (int j = 0; j < gamePlayView.getFilledBoxes().length; j++) {
if (gamePlayView.getFilledBoxes()[j] == null) { // Check if the box is empty
// Get the current filledBoxes
System.out.println("Before setting letter: " + Arrays.toString(gamePlayView.getFilledBoxes()));
Character[] currentFilledBoxes = gamePlayView.getFilledBoxes();
System.out.println(currentFilledBoxes.length);
// Place the selected letter in the j-th box
currentFilledBoxes[j] = selectedLetter;
// Update the filledBoxes in the view
gamePlayView.setFilledBoxes(currentFilledBoxes);
gamePlayView.getLetters().remove(i);
// Log the action
System.out.println("Letter " + selectedLetter + " placed in box " + j);
System.out.println("After setting letter: " + Arrays.toString(gamePlayView.getFilledBoxes()));
letterPlaced = true;
break; // Exit the loop since we've placed the letter
}
}
if (!letterPlaced) {
// All boxes are filled, handle accordingly.
System.out.println("All boxes are filled.");
}
break; // Break from the loop checking letter bounds
}
}
for (int i = 0; i < gamePlayView.getLetterBoxBounds().length; i++) {
if (gamePlayView.getLetterBoxBounds()[i].contains(touchPos.x, touchPos.y)) {
// The i-th box was clicked
// Handle the click, like selecting or deselecting a letter
}
}
}
}
public void fetchWord() {
......
package com.wordbattle.game.model;
import com.badlogic.gdx.math.Rectangle;
import org.w3c.dom.css.Rect;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
......@@ -10,6 +14,7 @@ public class LetterPool {
private String word;
private ArrayList<Character> letters;
private Random randomGenerator;
private Rectangle rectangle;
public LetterPool(String word, int extraLettersCount, String pin) {
this.word = word.toUpperCase();
......@@ -18,6 +23,7 @@ public class LetterPool {
this.randomGenerator = new Random(seed);
// Add the word's letters to the pool
for (char c : word.toCharArray()) {
letters.add(c);
......
......@@ -9,9 +9,11 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
import com.wordbattle.game.WordBattle;
import com.wordbattle.game.model.LetterPool;
import com.wordbattle.game.network.FirebaseInterface;
......@@ -19,6 +21,7 @@ import com.wordbattle.game.network.FirebaseInterface;
import org.w3c.dom.ranges.Range;
import java.util.ArrayList;
import java.util.Stack;
import jdk.internal.org.jline.terminal.Size;
......@@ -33,6 +36,13 @@ public class GamePlayView {
private LetterPool letterPool;
private BitmapFont font;
private String pin;
private Stack<Character> selectedLetters = new Stack<>();
private ArrayList<Character> letters;
private Rectangle[] letterBoxBounds;
private Rectangle[] letterBounds;
private Character[] filledBoxes;
......@@ -64,24 +74,27 @@ public class GamePlayView {
shapeRenderer = new ShapeRenderer();
}
public void setCurrentWord(String currentWord) {
this.currentWord = currentWord;
letterPool = new LetterPool(currentWord, 5, pin); // Or however you decide the number of extra letters
letterBoxBounds = new Rectangle[currentWord.length()];
filledBoxes = new Character[currentWord.length()];
}
public void render(SpriteBatch sb) {
if (letterPool != null) {
ArrayList<Character> letters = letterPool.getLetters();
letters = letterPool.getLetters();
letterBounds = new Rectangle[letters.size()];
float letterSpacing = 100;
float totalWidthLetter = ((((float) letters.size() * letterSpacing)) / 2);
float letterStartX = ((cam.viewportWidth - totalWidthLetter) - 2*letterSpacing) / 2;
float letterStartY = cam.viewportHeight / 2;
float offset = 100;
sb.setProjectionMatrix(cam.combined);
sb.begin(); // Begin the SpriteBatch for other rendering
sb.draw(backgroundTexture, 0, 0, cam.viewportWidth, cam.viewportHeight);
......@@ -104,8 +117,19 @@ public class GamePlayView {
// Draw each letter, here you might want to draw a background texture for the letter
font.setColor(Color.GREEN);
font.draw(sb, letters.get(i).toString(), x, y);
letterBounds[i] = new Rectangle(x, y-120, 120, 120);
}
sb.end();
sb.end(); // End SpriteBatch
// This is the rects around letters
shapeRenderer.setProjectionMatrix(cam.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Line); // Begin ShapeRenderer
for (int i = 0; i < getLetterBounds().length; i++) {
Rectangle rect = getLetterBounds()[i];
shapeRenderer.rect(rect.x, rect.y, rect.width, rect.height);
}
shapeRenderer.end(); // End ShapeRenderer
shapeRenderer.setProjectionMatrix(cam.combined);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
......@@ -120,15 +144,58 @@ public class GamePlayView {
for (int i = 0; i < currentWord.length(); i++) {
shapeRenderer.rect(startX + i * (boxWidth + spacing), yPosition, boxWidth, boxHeight);
float boxX = startX + i * (boxWidth + spacing);
shapeRenderer.rect(boxX, yPosition, boxWidth, boxHeight);
// Add a new box to arr
letterBoxBounds[i] = new Rectangle(boxX, yPosition, boxWidth, boxHeight);
}
shapeRenderer.end();
sb.begin(); // Begin SpriteBatch again
// This is letters being drawn in the boxes
for (int i = 0; i < filledBoxes.length; i++) {
if (filledBoxes[i] != null) {
// Draw the letter in the box
float y = getLetterBoxBounds()[i].y + 120;
float x = getLetterBoxBounds()[i].x + 10;
font.draw(sb, filledBoxes[i].toString(), x, y);
}
}
sb.end();
}
}
public Stack<Character> getSelectedLetters() {
return selectedLetters;
}
public ArrayList<Character> getLetters() {
return letters;
}
public String getCurrentWord() {
return currentWord;
}
public Rectangle[] getLetterBounds() {
return letterBounds;
}
public Rectangle[] getLetterBoxBounds() {
return letterBoxBounds;
}
public Character[] getFilledBoxes() {
return filledBoxes;
}
public void setFilledBoxes(Character[] filledBoxes) {
this.filledBoxes = filledBoxes;
}
public void dispose() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment