Skip to content

Commit

Permalink
Dokonywanie selekcji wież i wysyłanie jednostek między wieżami jedneg…
Browse files Browse the repository at this point in the history
…o gracza.
  • Loading branch information
aenain committed Dec 8, 2012
1 parent cde608e commit 8e3b644
Show file tree
Hide file tree
Showing 9 changed files with 198 additions and 58 deletions.
2 changes: 2 additions & 0 deletions res/values/strings.xml
@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MainActivity</string>
<string name="choose_selection">Selection</string>
<string name="choose_transport">Transport</string>
</resources>
41 changes: 40 additions & 1 deletion src/com/test/nanowar/MainActivity.java
Expand Up @@ -5,13 +5,18 @@
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.test.nanowar.model.MainGamePanel;
import com.test.nanowar.model.Player;

public class MainActivity extends Activity {

public static int BACKGROUND_COLOR = Color.rgb(16, 171, 226);
protected MainLayout layout;

Expand All @@ -37,9 +42,43 @@ public void onCreate(Bundle savedInstanceState) {

// models
int levelNumber = 1;
MainGamePanel gamePanel = new MainGamePanel(layout, levelNumber);
final MainGamePanel gamePanel = new MainGamePanel(layout, levelNumber);
gamePanel.initPlayers();

// controls
LinearLayout controls = new LinearLayout(this);
RelativeLayout.LayoutParams controlListParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
controlListParams.alignWithParent = true;
controlListParams.topMargin = 0;
layout.addView(controls, controlListParams);

// choose selection
LinearLayout.LayoutParams controlParams;
Button chooseSelection = new Button(this);
chooseSelection.setText(R.string.choose_selection);
controlParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
chooseSelection.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
gamePanel.getUserPlayer().setSelectionMode(Player.SelectionMode.SELECT);
}
});
controls.addView(chooseSelection, controlParams);

// choose transport
Button chooseTransport = new Button(this);
chooseTransport.setText(R.string.choose_transport);
controlParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
chooseTransport.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
gamePanel.getUserPlayer().setSelectionMode(Player.SelectionMode.TRANSPORT);
}
});
controls.addView(chooseTransport, controlParams);

// start game
gamePanel.initLevel();
gamePanel.startGame();

}

@Override
Expand Down
46 changes: 45 additions & 1 deletion src/com/test/nanowar/model/MainGamePanel.java
Expand Up @@ -20,6 +20,7 @@
public class MainGamePanel {

protected HashMap< Player, List<Tower>> playerTowers;
protected HashMap< Player, List<Tower>> selectedPlayerTowers;
protected HashMap< Player, List<Troops>> playerTroops;
protected MainLayout layout;
protected Level level;
Expand All @@ -38,9 +39,14 @@ public MainGamePanel(MainLayout layout, int levelNumber) {
playerTowers.put(nonePlayer, new LinkedList());
playerTowers.put(computerPlayer, new LinkedList());

selectedPlayerTowers = new HashMap();
selectedPlayerTowers.put(userPlayer, new LinkedList());
selectedPlayerTowers.put(nonePlayer, new LinkedList());
selectedPlayerTowers.put(computerPlayer, new LinkedList());

playerTroops = new HashMap();
playerTroops.put(userPlayer, new LinkedList());
playerTowers.put(nonePlayer, new LinkedList());
playerTroops.put(nonePlayer, new LinkedList()); // NOTE: to chyba zbedne, right?
playerTroops.put(computerPlayer, new LinkedList());

this.level = new Level(levelNumber);
Expand All @@ -54,11 +60,21 @@ public MainGamePanel(Player user, Player comp, Level lvl) {
playerTowers.put(user, user.getTowers());
playerTowers.put(comp, comp.getTowers());

selectedPlayerTowers = new HashMap();
selectedPlayerTowers.put(user, new LinkedList());
selectedPlayerTowers.put(comp, new LinkedList());

playerTroops = new HashMap();
playerTroops.put(user, user.getTroops());
playerTroops.put(comp, comp.getTroops());
}

public void initPlayers() {
userPlayer.setGamePanel(this);
computerPlayer.setGamePanel(this);
nonePlayer.setGamePanel(this);
}

public Player getComputerPlayer() {
return computerPlayer;
}
Expand Down Expand Up @@ -142,6 +158,14 @@ public List<Tower> getPlayerTowers(Player owner) {
return playerTowers.get(owner);
}

public HashMap< Player, List<Tower>> getSelectedPlayerTowers() {
return playerTowers;
}

public List<Tower> getSelectedPlayerTowers(Player owner) {
return selectedPlayerTowers.get(owner);
}

public HashMap< Player, List<Troops>> getPlayerTroops() {
return playerTroops;
}
Expand All @@ -150,6 +174,22 @@ public List<Troops> getPlayerTroops(Player owner) {
return playerTroops.get(owner);
}

public void selectTower(Tower tower, Tower.Selection selectionType) {
if (selectionType == Tower.Selection.SELECTED) {
getSelectedPlayerTowers(tower.owner).add(tower);
}
else {
getSelectedPlayerTowers(tower.owner).remove(tower);
}
tower.select(selectionType);
}

public void sendTroops(Integer percentageShare, Player player, Tower destination) {
sendTroops(percentageShare, getSelectedPlayerTowers(player), destination);
getSelectedPlayerTowers(player).clear();
player.selectionMode = Player.SelectionMode.SELECT;
}

// wysyla wojska z wiez zrodlowych do wiezy docelowej
public void sendTroops(Integer percentageShare, List<Tower> sources, Tower destination) {
for (Tower source : sources) {
Expand All @@ -159,6 +199,7 @@ public void sendTroops(Integer percentageShare, List<Tower> sources, Tower desti
if (bubble != null) {
playerTroops.get(source.getOwner()).add(bubble);
}
source.select(Tower.Selection.NONE);
Log.d("wysylam troopsy", "poszly");
}
}
Expand Down Expand Up @@ -197,6 +238,9 @@ public void changeOwner(Tower tower, Player oldOwner, Player newOwner) {
List<Tower> oldOwnerTowers = playerTowers.get(oldOwner);
oldOwnerTowers.remove(tower);

List<Tower> oldOwnerSelectedTowers = selectedPlayerTowers.get(oldOwner);
oldOwnerSelectedTowers.remove(tower);

List<Tower> newOwnerTowers = playerTowers.get(newOwner);
newOwnerTowers.add(tower);

Expand Down
2 changes: 1 addition & 1 deletion src/com/test/nanowar/model/MainThread.java
Expand Up @@ -14,7 +14,7 @@
public class MainThread extends Thread {

private boolean running;
protected MainGamePanel gamePanel;
final protected MainGamePanel gamePanel;

public MainThread(MainGamePanel gamePanel) {
super();
Expand Down
57 changes: 44 additions & 13 deletions src/com/test/nanowar/model/Player.java
Expand Up @@ -11,23 +11,27 @@
*
* @author artur
*/


public class Player {

public enum PlayerType {

USER, COMPUTER, NONE
}


public enum SelectionMode {

SELECT, TRANSPORT
}
protected PlayerType playerType;
protected MainGamePanel gamePanel;
protected SelectionMode selectionMode = SelectionMode.SELECT;

public Player(PlayerType type) {
this.playerType = type;
/*this.towers = new ArrayList<Tower>();
this.troops = new ArrayList<Troops>();*/
this.troops = new ArrayList<Troops>();*/
}

public Player(PlayerType type, MainGamePanel gamePanel) {
this.playerType = type;
this.gamePanel = gamePanel;
Expand All @@ -36,7 +40,11 @@ public Player(PlayerType type, MainGamePanel gamePanel) {
public Player(PlayerType playerType, ArrayList<Tower> towers, ArrayList<Troops> troops) {
this.playerType = playerType;
/*this.towers = (towers == null ? new ArrayList<Tower>() : towers);
this.troops = (troops == null ? new ArrayList<Troops>() : troops);*/
this.troops = (troops == null ? new ArrayList<Troops>() : troops);*/
}

public void setGamePanel(MainGamePanel gamePanel) {
this.gamePanel = gamePanel;
}

public PlayerType getPlayerType() {
Expand All @@ -54,22 +62,45 @@ public List<Tower> getTowers() {
public List<Troops> getTroops() {
return gamePanel.getPlayerTroops(this);
}


public void selectTower(Tower tower) {
// synchronized (tower) {
if (tower.getOwner().equals(this)) {
if (isSelecting()) {
if (tower.isSelected()) {
gamePanel.selectTower(tower, Tower.Selection.NONE);
} else {
gamePanel.selectTower(tower, Tower.Selection.SELECTED);
}
return;
}
}

gamePanel.sendTroops(50, this, tower);
// }
}

public void sendTroops(List<Tower> selectedTowers, Tower destination, Integer percentageShare) {
gamePanel.sendTroops(percentageShare, selectedTowers, destination);
}



public boolean isComputer() {
return this.playerType == PlayerType.COMPUTER;
}

public boolean isUser() {
return this.playerType == PlayerType.USER;
}

public boolean isNone() {
return this.playerType == PlayerType.NONE;
}


public void setSelectionMode(SelectionMode selectionMode) {
this.selectionMode = selectionMode;
}

public boolean isSelecting() {
return selectionMode == SelectionMode.SELECT;
}
}
51 changes: 36 additions & 15 deletions src/com/test/nanowar/model/Tower.java
Expand Up @@ -10,37 +10,44 @@

/**
*
* @author artur
* klasa reprezentujaca wszystko, co zwiazane z duza komorka (nazwana wieza)
*
* @author artur klasa reprezentujaca wszystko, co zwiazane z duza komorka
* (nazwana wieza)
*
*/
public class Tower {
public static final int MAX_CAPACITY = 100;

public enum Selection {
SELECTED, NONE
}

public static final int MAX_CAPACITY = 100;
// określa wielkosc wiezy (pojemnosc), w ktorej szybkosc powstawania jednostek jest
// proporcjonalna do wielkosci.
protected Integer capacity,
// okresla aktualna ilosc wojsk w wiezy, nie moze przekroczyc _capacity_
troopsCount;

// okresla aktualna ilosc wojsk w wiezy, nie moze przekroczyc _capacity_
troopsCount;
protected double internalTroopsCount;

protected MainGamePanel panel;
protected Rect location;
protected com.test.nanowar.view.Tower view;

protected Selection selection;
// in percentage of width and height of the screen
protected Point relativeCenter;
protected Player owner;

public Tower(MainGamePanel panel) {
this.panel = panel;
// this.selection = Selection.NONE;
}

public void addView(com.test.nanowar.view.Tower view) {
this.view = view;
}

public MainGamePanel getGamePanel() {
return panel;
}

public Point getRelativeCenter() {
return relativeCenter;
}
Expand All @@ -65,7 +72,7 @@ public void setInitTroopsCount(int count) {
this.troopsCount = count;
this.internalTroopsCount = count;
}

public Integer getTroopsCount() {
return troopsCount;
}
Expand All @@ -91,8 +98,8 @@ public void run() {
*/
public Troops sendTroops(Integer percentageShare, Tower destination) {
Troops bubble = null;
int count = (int)Math.floor(troopsCount * percentageShare / 100);
int count = (int) Math.floor(troopsCount * percentageShare / 100);

if (count > 0) {
bubble = new Troops(owner, count, this.relativeCenter);
bubble.sendBetween(this, destination);
Expand All @@ -108,8 +115,7 @@ public Troops sendTroops(Integer percentageShare, Tower destination) {
public void troopsArrived(Troops bubble) {
if (owner == bubble.getOwner()) {
troopsCount += bubble.count();
}
else {
} else {
troopsCount -= bubble.count();
// jesli bylo wiecej jednostek wroga, to nastepuje przejecie wiezy
if (troopsCount < 0) {
Expand All @@ -123,6 +129,22 @@ public void troopsArrived(Troops bubble) {
bubble.getView().remove();
}

public Selection select(final Selection selection) {
this.selection = selection;

view.post(new Runnable() {
public void run() {
view.select(selection);
}
});

return this.selection;
}

public boolean isSelected() {
return (selection == Selection.SELECTED);
}

protected void changeOwner(Player newOwner) {
Player oldOwner = this.owner;
this.owner = newOwner;
Expand All @@ -139,5 +161,4 @@ public void setOwner(Player owner) {
public Player getOwner() {
return owner;
}

}

0 comments on commit 8e3b644

Please sign in to comment.