GamePosition.java
Upload User: topstarc
Upload Date: 2016-10-10
Package Size: 291k
Code Size: 6k
Category:

Game Engine

Development Platform:

Java

  1. package game.position;
  2. import java.util.Vector;
  3. import javax.microedition.lcdui.Canvas;
  4. import javax.microedition.lcdui.Font;
  5. import javax.microedition.lcdui.Graphics; //import javax.microedition.lcdui.Image;
  6. import game.Game;
  7. import game.card.Card;
  8. import game.card.CardDrawer;
  9. import game.card.Set;
  10. import game.locator.GameLocator;
  11. public class GamePosition extends CardPosition implements RandomPosition {
  12. public GamePosition(Game game, int posx, int posy) {
  13. super();
  14. dimension = game.dimension;
  15. super.setPositions(posx, posy);
  16. // Vector with all cards
  17. card = new Vector();
  18. locator = new GameLocator();
  19. this.image = null;
  20. }
  21. public void addCloseCard(Card card) {
  22. // card.setOpen(false);
  23. this.card.addElement(card);
  24. reset();
  25. }
  26. public void draw(Graphics g, int x, int y, boolean move, boolean enhance) {
  27. g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
  28. Font.SIZE_SMALL));
  29. if (x == posX && y == posY) {
  30. // yellow
  31. g.setColor(225, 220, 24);
  32. g.fillRect(dimension.getPositionX(posX), dimension
  33. .getPositionY(posY), dimension.widthCard + 4,
  34. dimension.heightCard + 5);
  35. }
  36. // black
  37. g.setColor(225, 225, 225);
  38. g.fillRect(dimension.getPositionX(posX), dimension.getPositionY(posY),
  39. dimension.widthCard, dimension.heightCard);
  40. g.setColor(0, 0, 0);
  41. g.drawRect(dimension.getPositionX(posX), dimension.getPositionY(posY),
  42. dimension.widthCard, dimension.heightCard);
  43. int first = getfirstOpen();
  44. if (first == -1) {
  45. if (card.size() != 0) {
  46. CardDrawer.draw(g, dimension.getPositionX(posX), dimension
  47. .getPositionY(posY), dimension.widthCard,
  48. dimension.heightCard);
  49. }
  50. /*
  51.  * else{ g.setColor(255,255,255); g.drawRect(
  52.  * dimension.getPositionX(posX), dimension.getPositionY(posY),
  53.  * dimension.widthCard, dimension.heightCard ); }
  54.  */
  55. } else {
  56. boolean dist = (move && x == posX && y == posY)
  57. || (move && enhance);
  58. // System.out.println("X:"+posX+", Y"+posY+", dist:"+dist+",
  59. // move:"+" poss "+(x==posX && y==posY)+", enhance "+enhance);
  60. for (int i = first - 1, j = 0; i < card.size(); i++) {
  61. Card next = (Card) card.elementAt(i);
  62. int inc = 0;
  63. if (dist && i == card.size() - 1) {
  64. inc = 2;
  65. }
  66. if (enhance && i >= current - 1) {
  67. inc = 2;
  68. }
  69. g.setColor(0, 0, 0);
  70. g.drawRect(dimension.getPositionX(posX) + inc, dimension
  71. .getPositionY(posY)
  72. + j + inc, dimension.widthCard, dimension.heightCard);
  73. if (dist && i == card.size() - 1) {
  74. // choose the color
  75. g.setColor(225, 220, 24);
  76. } else {
  77. if (i == current - 1) {
  78. g.setColor(210, 210, 210);// dark gray
  79. } else {
  80. g.setColor(243, 243, 243);// light gray
  81. }
  82. }
  83. g.fillRect(dimension.getPositionX(posX) + inc, dimension
  84. .getPositionY(posY)
  85. + j + inc, dimension.widthCard, dimension.heightCard);
  86. g.setColor(0, 0, 0);
  87. g.drawRect(dimension.getPositionX(posX) + inc, dimension
  88. .getPositionY(posY)
  89. + j + inc, dimension.widthCard, dimension.heightCard);
  90. next.drawColor(g);
  91. if (next.getName().equals(Set.card_10)) {
  92. g.drawString(next.getName(), dimension.getPositionX(posX)
  93. + inc, dimension.getPositionY(posY) + 2 + j + inc,
  94. Graphics.TOP | Graphics.LEFT);
  95. } else {
  96. g.drawString(next.getName(), dimension.getPositionX(posX)
  97. + 1 + inc, dimension.getPositionY(posY) + 2 + j
  98. + inc, Graphics.TOP | Graphics.LEFT);
  99. }
  100. /**
  101.  * The last contains the image
  102.  */
  103. if (i == card.size() - 1) {
  104. g.drawImage(next.getImage(), dimension.getPositionX(posX)
  105. + 1 + inc, dimension.getPositionY(posY)
  106. + (dimension.heightCard / 2) + j + 3 + inc,
  107. Graphics.TOP | Graphics.LEFT);
  108. }
  109. j += (dimension.heightCard / 3);
  110. }
  111. }
  112. }
  113. public boolean isCloseCard() {
  114. if (card.isEmpty()) {
  115. return false;
  116. } else {
  117. Card last = (Card) card.lastElement();
  118. return !last.isOpen();
  119. }
  120. }
  121. /**
  122.  * Card Vector
  123.  */
  124. public Object getCard() {
  125. if (card.isEmpty()) {
  126. return null;
  127. } else {
  128. if (current == card.size()) {
  129. return card.lastElement();
  130. } else {
  131. Vector vector = new Vector();
  132. for (int i = current - 1; i < card.size(); i++) {
  133. vector.addElement(card.elementAt(i));
  134. }
  135. return vector;
  136. }
  137. }
  138. }
  139. public boolean removeCard(Object card) {
  140. boolean res = false;
  141. if (card instanceof Card) {
  142. res = this.card.removeElement(card);
  143. } else {
  144. Vector vector = (Vector) card;
  145. for (int i = 0; i < vector.size(); i++) {
  146. res = this.card.removeElement(vector.elementAt(i));
  147. }
  148. }
  149. reset();
  150. return res;
  151. }
  152. public boolean putCard(Object card) {
  153. boolean res = false;
  154. if (card instanceof Card) {
  155. res = locator.allocate(this, (Card) card);
  156. } else {
  157. Vector vector = (Vector) card;
  158. for (int i = 0; i < vector.size(); i++) {
  159. res = locator.allocate(this, (Card) vector.elementAt(i));
  160. }
  161. }
  162. reset();
  163. return res;
  164. }
  165. public void openCard() {
  166. Card last = (Card) card.lastElement();
  167. last.setOpen(true);
  168. reset();
  169. }
  170. public void reset() {
  171. current = card.size();
  172. }
  173. private int getfirstOpen() {
  174. int i = 0;
  175. boolean key = true;
  176. // int init=0;
  177. while (i < card.size() && key) {
  178. Card current = (Card) card.elementAt(i);
  179. key = !current.isOpen();
  180. i++;
  181. }
  182. if (key == true) {
  183. i = -1;
  184. }
  185. return i;
  186. }
  187. public boolean moveInside(int move) {
  188. boolean response = true;
  189. int i = getfirstOpen();
  190. switch (move) {
  191. case Canvas.UP: {
  192. if (current == i || i == -1) {
  193. response = false;
  194. } else {
  195. current--;
  196. response = true;
  197. }
  198. }
  199. break;
  200. case Canvas.DOWN: {
  201. if (current == card.size()) {
  202. response = false;
  203. } else {
  204. current++;
  205. response = true;
  206. }
  207. }
  208. break;
  209. }
  210. return response;
  211. }
  212. protected void protectedRestart() {
  213. locator.restart();
  214. }
  215. }