From 912bbc980abb294c51ff213b5d8438094933cebd Mon Sep 17 00:00:00 2001 From: marc Date: Tue, 22 Sep 2020 10:30:17 +0200 Subject: [PATCH] debut du code des deck et de la main --- app/src/main/AndroidManifest.xml | 1 + .../myapplication/Game/Decks/Deck.java | 25 ++++++ .../myapplication/Game/Decks/DeckDemo.java | 38 ++++++++ .../Game/Decks/DeckRegister.java | 21 +++++ .../myapplication/Game/GameLogicThread.java | 88 ++++++++++++------- .../com/iutlaval/myapplication/Game/Hand.java | 36 ++++++++ .../myapplication/Game/HandActivity.java | 30 +++++++ .../myapplication/Game/TouchHandler.java | 29 +++--- .../Video/Drawables/DrawableCard.java | 2 +- app/src/main/res/layout/activity_hand.xml | 9 ++ 10 files changed, 238 insertions(+), 41 deletions(-) create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Hand.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java create mode 100644 app/src/main/res/layout/activity_hand.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16ae7ec..77f6ad6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java new file mode 100644 index 0000000..73003d9 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java @@ -0,0 +1,25 @@ +package com.iutlaval.myapplication.Game.Decks; + +import com.iutlaval.myapplication.Game.Cards.Card; + +import java.util.Collections; +import java.util.Stack; + +/** + * TOUT DECK CREE DOIT ETRE AJOUTER A DECKREGISTER + */ +public abstract class Deck { + public abstract Stack getCards(); + + public void suffle() + { + Collections.shuffle(getCards()); + } + + /** + * retourne le nom du deck ex: ww2 , science + * ce nom doit être unique + * @return + */ + public abstract String getDeckName(); +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java new file mode 100644 index 0000000..cc7c0b0 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java @@ -0,0 +1,38 @@ +package com.iutlaval.myapplication.Game.Decks; + +import android.content.Context; + +import com.iutlaval.myapplication.Game.Cards.Card; +import com.iutlaval.myapplication.Game.Cards.DemoCard; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +public class DeckDemo extends Deck{ + + Stack cards; + + public DeckDemo(String id, Context constext) + { + cards = new Stack<>(); + + //generating cards randomly + for(int i = 0 ; i < 50 ; i++) + { + cards.add(new DemoCard(id +"_card_"+ i,constext)); + } + + + } + + @Override + public Stack getCards() { + return cards; + } + + public String getDeckName() { + return "demo"; + } + +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java new file mode 100644 index 0000000..b9eff0d --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java @@ -0,0 +1,21 @@ +package com.iutlaval.myapplication.Game.Decks; + +import android.content.Context; + +import com.iutlaval.myapplication.Game.HandActivity; + +import java.util.Objects; + +public class DeckRegister { + public static Deck getClassFromName(String name, Context context) + { + //switch case non utilisable MAIS c'est pas important car c'ette foction n'est que pour + //HandActivity + + if(name.equals("demo")) + { + return new DeckDemo(name,context); + } + return null; + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java index cc15172..ddc3ea2 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -1,14 +1,17 @@ package com.iutlaval.myapplication.Game; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.os.Bundle; import android.view.MotionEvent; import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.Game.Cards.DemoCard; +import com.iutlaval.myapplication.Game.Decks.Deck; +import com.iutlaval.myapplication.Game.Decks.DeckDemo; import com.iutlaval.myapplication.GameActivity; -import com.iutlaval.myapplication.MainActivity; import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.DrawableCard; @@ -20,14 +23,24 @@ public class GameLogicThread extends Thread{ private Renderer renderer; private boolean ready; private TouchHandler touch; + private GameActivity gameActivity; - public GameLogicThread(Context cont, Renderer renderer) + private Deck localPlayerDeck; + private Hand localPlayerHand; + + + public GameLogicThread(GameActivity gameActivity, Renderer renderer) { ready=false; - this.cont = cont; + this.cont = gameActivity; this.renderer = renderer; renderer.setEngine(this); touch = new TouchHandler(renderer); + localPlayerDeck = new DeckDemo("local",cont); + localPlayerDeck.suffle(); + localPlayerHand = new Hand(); + localPlayerHand.fillHand(localPlayerDeck); + this.gameActivity=gameActivity; } private float i=0; @@ -36,31 +49,39 @@ public class GameLogicThread extends Thread{ @Override public void run() { - - //renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE)); + //affichage de l'arriere plan Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background); renderer.addToDraw(new Drawable(bitmap, 0,0, "background", 100, 100 )); + //renderer.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F)); //renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont)); - Card card2 = new DemoCard("card3",cont); + /*Card card2 = new DemoCard("card3",cont); renderer.addToDraw(card2.getDrawableCard()); Card card1 = new DemoCard("card1",cont); - renderer.addToDraw(card1.getDrawableCard()); - + renderer.addToDraw(card1.getDrawableCard());*/ + drawHandPreview(); ready=true; while(true) { //Do Stuff - renderer.moveToDraw(20,20,"card1"); - renderer.moveToDraw(40,20,"card3"); break; } - ((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(false); renderer.updateFrame(); } + private void drawHandPreview() { + int i = 0; + for(Card c : localPlayerHand.getHand()) + { + renderer.addToDraw(c.getDrawableCard()); + renderer.moveToDraw(i*DrawableCard.CARD_WITH,90F,c.getDrawableCard().getName()); + i++; + } + + } + /** * cette fonction est appeller a chaque fin de frame * CETTE FONCTION A UN IMPACT DIRRECT SUR LES FPS ELLE SE DOIT D'être OPTIMAL @@ -69,27 +90,10 @@ public class GameLogicThread extends Thread{ * TOUT APELLE DE CETTE FONCTION SE DOIT D'ÊTRE PROTEGER PAR isReady() * * /!\ renderer.updateFrame(); va forcer le system a redessiner l'afficher qui ensuite reappelera onFrameDoneRendering() ce qui peut causer si le updateFrame() n'est pas proteger - * une utilisation de la batterie massivz + * une utilisation de la batterie massive */ public void onFrameDoneRendering() { - if(i < 100) - { - i+=increm; - //((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(increm <= 0); - }else{ - increm=-increm; - i+=increm; - //((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(increm > 0); - } - if(i==0)increm=-increm; - - - // - //TODO get x,y coordinate form name - //r.moveToDraw(i,i,"card2"); - //renderer.moveToDraw(i,i,"card3"); - } /** @@ -106,6 +110,30 @@ public class GameLogicThread extends Thread{ * @param event */ public void onTouchEvent(MotionEvent event) { - if(isReady())touch.onTouchEvent(event); + if(isReady()){ + float unscalled_Y = event.getY() / GameActivity.screenHeight * 100; + if(unscalled_Y >= 90F) { + float unscalled_X = event.getX() / GameActivity.screenWidth * 100; + //TODO : display fullscreen cards + Intent HandActivity = new Intent(gameActivity, HandActivity.class); + String[] serializedHand = new String[localPlayerHand.getHand().size() +1]; + int i = 0; + serializedHand[i] = localPlayerDeck.getDeckName(); + for(Card c : localPlayerHand.getHand()) + { + i++; + serializedHand[i] = c.getName(); + + } + HandActivity.putExtra("hand",serializedHand); + Bundle cardSelectedBundle = new Bundle(); + gameActivity.startActivity(HandActivity,cardSelectedBundle); + + + }else{ + touch.onTouchEvent(event); + } + } + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java b/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java new file mode 100644 index 0000000..434f97e --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java @@ -0,0 +1,36 @@ +package com.iutlaval.myapplication.Game; + +import com.iutlaval.myapplication.Game.Cards.Card; +import com.iutlaval.myapplication.Game.Decks.Deck; + +import java.util.ArrayList; +import java.util.List; + +public class Hand { + + private static final int NUMBER_OF_CARDS_IN_STARTING_HAND = 5; + + private List hand; + + public Hand() + { + hand = new ArrayList<>(); + } + + public void pickCardFromDeck(Deck deck,int amount) + { + for(int i = 0 ; i < NUMBER_OF_CARDS_IN_STARTING_HAND;i++) + { + hand.add(deck.getCards().pop()); + } + } + + public void fillHand(Deck deck) + { + pickCardFromDeck(deck,NUMBER_OF_CARDS_IN_STARTING_HAND); + } + + public List getHand() { + return hand; + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java b/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java new file mode 100644 index 0000000..cb088c6 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java @@ -0,0 +1,30 @@ +package com.iutlaval.myapplication.Game; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +import com.iutlaval.myapplication.Game.Decks.Deck; +import com.iutlaval.myapplication.Game.Decks.DeckRegister; +import com.iutlaval.myapplication.R; + +public class HandActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_hand); + + String[] serializedHand = getIntent().getStringArrayExtra("hand"); + Deck d = DeckRegister.getClassFromName(serializedHand[0],this); + + + Intent data = new Intent(); + String text = "Result to be returned...."; + //---set the data to pass back--- + data.setData(Uri.parse(text)); + setResult(RESULT_OK, data); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java index dfe8990..6abde2c 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java @@ -1,16 +1,19 @@ package com.iutlaval.myapplication.Game; +import android.content.Intent; import android.view.MotionEvent; import com.iutlaval.myapplication.GameActivity; +import com.iutlaval.myapplication.MainActivity; import com.iutlaval.myapplication.Video.Drawables.DrawableCard; import com.iutlaval.myapplication.Video.Renderer; public class TouchHandler { - //TODO mettre sa dans une classe isolé - private float deltaX = 0; - private float deltaY = 0; + private float TouchDeltaX = 0; + private float TouchDeltaY = 0; + private float originalPositionX = 0; + private float originalPositionY = 0; private DrawableCard moveEventCard = null; private Renderer renderer; @@ -28,17 +31,23 @@ public class TouchHandler { float unscalled_Y = event.getY() / GameActivity.screenHeight * 100; if (event.getAction() == MotionEvent.ACTION_DOWN) { - moveEventCard = renderer.getCardOn(unscalled_X, unscalled_Y); - if(moveEventCard != null) { - deltaY = unscalled_Y - moveEventCard.getY(); - deltaX = unscalled_X - moveEventCard.getX(); + if(unscalled_Y <= 90F) { + moveEventCard = renderer.getCardOn(unscalled_X, unscalled_Y); + if (moveEventCard != null) { + TouchDeltaY = unscalled_Y - moveEventCard.getY(); + TouchDeltaX = unscalled_X - moveEventCard.getX(); + originalPositionX = moveEventCard.getX(); + originalPositionY = moveEventCard.getY(); + } } } else if (event.getAction() == MotionEvent.ACTION_UP) { + TouchDeltaY = 0; + TouchDeltaX = 0; + //TODO detect zones + if(moveEventCard != null)renderer.moveToDraw(originalPositionX,originalPositionY,moveEventCard.getName()); moveEventCard = null; - deltaY = 0; - deltaX = 0; } else if (moveEventCard != null) { - moveEventCard.setCoordinates(unscalled_X - deltaX, unscalled_Y - deltaY); + moveEventCard.setCoordinates(unscalled_X - TouchDeltaX, unscalled_Y - TouchDeltaY); renderer.updateFrame(); } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java index 4bdc6df..7d7ad49 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java @@ -19,7 +19,7 @@ import com.iutlaval.myapplication.Video.Rectangle; */ public class DrawableCard extends Drawable{ - private static final int CARD_WITH = 14; + public static final int CARD_WITH = 14; private static final int CARD_HEIGHT = 40; private static final float HP_ATK_FONT_SIZE_BIG_CARD =30F; private static final float HP_ATK_FONT_SIZE_BOARD =70F; diff --git a/app/src/main/res/layout/activity_hand.xml b/app/src/main/res/layout/activity_hand.xml new file mode 100644 index 0000000..8901dfb --- /dev/null +++ b/app/src/main/res/layout/activity_hand.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file