From 29adb3166ad4e2836ac4e3c30d201e7fb0153dbf Mon Sep 17 00:00:00 2001 From: gumartinm Date: Tue, 22 Nov 2011 04:49:34 +0100 Subject: [PATCH] Creating new Android directory and moving old AndroidTetris directory into this new one. --- Android/AndroidTetris/AndroidManifest.xml | 18 + .../gen/de/android/androidtetris/R.java | 26 ++ Android/AndroidTetris/proguard.cfg | 40 +++ Android/AndroidTetris/project.properties | 11 + Android/AndroidTetris/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes Android/AndroidTetris/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes Android/AndroidTetris/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes Android/AndroidTetris/res/drawable/greenstar.png | Bin 0 -> 7020 bytes Android/AndroidTetris/res/drawable/redstar.png | Bin 0 -> 6680 bytes Android/AndroidTetris/res/drawable/yellowstar.png | Bin 0 -> 6653 bytes Android/AndroidTetris/res/layout/main.xml | 7 + Android/AndroidTetris/res/values/strings.xml | 5 + .../androidtetris/AndroidTetrisActivity.java | 22 ++ .../src/de/android/androidtetris/CurrentPiece.java | 152 +++++++++ .../src/de/android/androidtetris/DrawView.java | 373 ++++++++++++++++++++ .../src/de/android/androidtetris/PrePiece.java | 152 +++++++++ .../src/de/android/androidtetris/Tile.java | 118 +++++++ AndroidTetris/AndroidManifest.xml | 18 - AndroidTetris/gen/de/android/androidtetris/R.java | 26 -- AndroidTetris/proguard.cfg | 40 --- AndroidTetris/project.properties | 11 - AndroidTetris/res/drawable-hdpi/icon.png | Bin 4147 -> 0 bytes AndroidTetris/res/drawable-ldpi/icon.png | Bin 1723 -> 0 bytes AndroidTetris/res/drawable-mdpi/icon.png | Bin 2574 -> 0 bytes AndroidTetris/res/drawable/greenstar.png | Bin 7020 -> 0 bytes AndroidTetris/res/drawable/redstar.png | Bin 6680 -> 0 bytes AndroidTetris/res/drawable/yellowstar.png | Bin 6653 -> 0 bytes AndroidTetris/res/layout/main.xml | 7 - AndroidTetris/res/values/strings.xml | 5 - .../androidtetris/AndroidTetrisActivity.java | 22 -- .../src/de/android/androidtetris/CurrentPiece.java | 152 --------- .../src/de/android/androidtetris/DrawView.java | 374 --------------------- .../src/de/android/androidtetris/PrePiece.java | 152 --------- .../src/de/android/androidtetris/Tile.java | 118 ------- 34 files changed, 924 insertions(+), 925 deletions(-) create mode 100644 Android/AndroidTetris/AndroidManifest.xml create mode 100644 Android/AndroidTetris/gen/de/android/androidtetris/R.java create mode 100644 Android/AndroidTetris/proguard.cfg create mode 100644 Android/AndroidTetris/project.properties create mode 100644 Android/AndroidTetris/res/drawable-hdpi/icon.png create mode 100644 Android/AndroidTetris/res/drawable-ldpi/icon.png create mode 100644 Android/AndroidTetris/res/drawable-mdpi/icon.png create mode 100644 Android/AndroidTetris/res/drawable/greenstar.png create mode 100644 Android/AndroidTetris/res/drawable/redstar.png create mode 100644 Android/AndroidTetris/res/drawable/yellowstar.png create mode 100644 Android/AndroidTetris/res/layout/main.xml create mode 100644 Android/AndroidTetris/res/values/strings.xml create mode 100644 Android/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java create mode 100644 Android/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java create mode 100644 Android/AndroidTetris/src/de/android/androidtetris/DrawView.java create mode 100644 Android/AndroidTetris/src/de/android/androidtetris/PrePiece.java create mode 100644 Android/AndroidTetris/src/de/android/androidtetris/Tile.java delete mode 100644 AndroidTetris/AndroidManifest.xml delete mode 100644 AndroidTetris/gen/de/android/androidtetris/R.java delete mode 100644 AndroidTetris/proguard.cfg delete mode 100644 AndroidTetris/project.properties delete mode 100644 AndroidTetris/res/drawable-hdpi/icon.png delete mode 100644 AndroidTetris/res/drawable-ldpi/icon.png delete mode 100644 AndroidTetris/res/drawable-mdpi/icon.png delete mode 100644 AndroidTetris/res/drawable/greenstar.png delete mode 100644 AndroidTetris/res/drawable/redstar.png delete mode 100644 AndroidTetris/res/drawable/yellowstar.png delete mode 100644 AndroidTetris/res/layout/main.xml delete mode 100644 AndroidTetris/res/values/strings.xml delete mode 100644 AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java delete mode 100644 AndroidTetris/src/de/android/androidtetris/CurrentPiece.java delete mode 100644 AndroidTetris/src/de/android/androidtetris/DrawView.java delete mode 100644 AndroidTetris/src/de/android/androidtetris/PrePiece.java delete mode 100644 AndroidTetris/src/de/android/androidtetris/Tile.java diff --git a/Android/AndroidTetris/AndroidManifest.xml b/Android/AndroidTetris/AndroidManifest.xml new file mode 100644 index 0000000..046dc01 --- /dev/null +++ b/Android/AndroidTetris/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/AndroidTetris/gen/de/android/androidtetris/R.java b/Android/AndroidTetris/gen/de/android/androidtetris/R.java new file mode 100644 index 0000000..17497a4 --- /dev/null +++ b/Android/AndroidTetris/gen/de/android/androidtetris/R.java @@ -0,0 +1,26 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package de.android.androidtetris; + +public final class R { + public static final class attr { + } + public static final class drawable { + public static final int greenstar=0x7f020000; + public static final int icon=0x7f020001; + public static final int redstar=0x7f020002; + public static final int yellowstar=0x7f020003; + } + public static final class layout { + public static final int main=0x7f030000; + } + public static final class string { + public static final int app_name=0x7f040001; + public static final int hello=0x7f040000; + } +} diff --git a/Android/AndroidTetris/proguard.cfg b/Android/AndroidTetris/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/Android/AndroidTetris/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/Android/AndroidTetris/project.properties b/Android/AndroidTetris/project.properties new file mode 100644 index 0000000..730e911 --- /dev/null +++ b/Android/AndroidTetris/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-14 diff --git a/Android/AndroidTetris/res/drawable-hdpi/icon.png b/Android/AndroidTetris/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/Android/AndroidTetris/res/drawable-ldpi/icon.png b/Android/AndroidTetris/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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

BsdSrL=avd$Fao=bOnxaYL^Nf?oJ- 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 F{txGYnoj@# literal 0 HcmV?d00001 diff --git a/Android/AndroidTetris/res/drawable/yellowstar.png b/Android/AndroidTetris/res/drawable/yellowstar.png new file mode 100644 index 0000000000000000000000000000000000000000..134b2343cfa6e46a181de327a6d2912d8f13dc0c GIT binary patch literal 6653 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 literal 0 HcmV?d00001 diff --git a/Android/AndroidTetris/res/layout/main.xml b/Android/AndroidTetris/res/layout/main.xml new file mode 100644 index 0000000..4361cfe --- /dev/null +++ b/Android/AndroidTetris/res/layout/main.xml @@ -0,0 +1,7 @@ + + + diff --git a/Android/AndroidTetris/res/values/strings.xml b/Android/AndroidTetris/res/values/strings.xml new file mode 100644 index 0000000..8c45b4c --- /dev/null +++ b/Android/AndroidTetris/res/values/strings.xml @@ -0,0 +1,5 @@ + + + Hello World, AndroidTetrisActivity! + AndroidTetris + diff --git a/Android/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java b/Android/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java new file mode 100644 index 0000000..82b604f --- /dev/null +++ b/Android/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java @@ -0,0 +1,22 @@ +package de.android.androidtetris; + +import android.app.Activity; +import android.os.Bundle; +import android.util.DisplayMetrics; + +public class AndroidTetrisActivity extends Activity { + DrawView drawView; + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DisplayMetrics displayMetrics = new DisplayMetrics(); + this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + + setContentView(R.layout.main); + drawView = new DrawView(this); + //drawView.setDimensions(displayMetrics.widthPixels, displayMetrics.heightPixels); + this.setContentView(drawView); + drawView.requestFocus(); + } +} \ No newline at end of file diff --git a/Android/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java b/Android/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java new file mode 100644 index 0000000..11bbbd0 --- /dev/null +++ b/Android/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java @@ -0,0 +1,152 @@ +/** + * + */ +package de.android.androidtetris; + +import java.util.HashMap; +import java.util.Map; + +/** + * This enum stores every piece and the square related to that piece. + * + * @author gusarapo + * + */ +public enum CurrentPiece { + /*The tower piece*/ + I(0) { + @Override + void fill() { + size[1][0]=Tile.RED; + size[1][1]=Tile.RED; + size[1][2]=Tile.RED; + size[1][3]=Tile.RED; + } + }, + /*The box piece*/ + O(1) { + @Override + void fill() { + size[1][1]=Tile.BLUE; + size[1][2]=Tile.BLUE; + size[2][1]=Tile.BLUE; + size[2][2]=Tile.BLUE; + } + }, + /*The pyramid piece*/ + T(2) { + @Override + void fill() { + size[1][1]=Tile.YELLOW; + size[0][2]=Tile.YELLOW; + size[1][2]=Tile.YELLOW; + size[2][2]=Tile.YELLOW; + } + }, + /*The left leaner piece*/ + Z(3) { + @Override + void fill() { + size[0][1]=Tile.CYAN; + size[1][1]=Tile.CYAN; + size[1][2]=Tile.CYAN; + size[2][2]=Tile.CYAN; + } + }, + /*The right leaner piece*/ + S(4) { + @Override + void fill() { + size[2][1]=Tile.GREEN; + size[1][1]=Tile.GREEN; + size[1][2]=Tile.GREEN; + size[0][2]=Tile.GREEN; + } + }, + /*The left knight piece*/ + L(5) { + @Override + void fill() { + size[1][1]=Tile.MAGENTA; + size[2][1]=Tile.MAGENTA; + size[2][2]=Tile.MAGENTA; + size[2][3]=Tile.MAGENTA; + } + }, + /*The right knight piece*/ + J(6) { + @Override + void fill() { + size[2][1]=Tile.WHITE; + size[1][1]=Tile.WHITE; + size[1][2]=Tile.WHITE; + size[1][3]=Tile.WHITE; + } + }; + + + //Every piece is contained in a square. This is the square's width. + public static final int WIDTH = 4; + //Every piece is contained in a square. This is the square's height. + public static final int HEIGHT = 4; + //Stores the x coordinate (the position of this piece on the grid) + public int x; + //Stores the y coordinate (the position of this piece on the grid) + public int y; + //Every piece is contained in a square. + public final Tile[][] size = new Tile[WIDTH][HEIGHT]; + //Stores the argument of the enum constant (passed to the constructor) JLS§8.9.1 + public final int pieceNumber; + //Map with every enum constant. Class variable initializer. JLS§12.4.2 Executed in textual order. + private static final Map pieceMap = new HashMap(); + + + //Static initializer. JLS§12.4.2 Executed in textual order. + static { + for (CurrentPiece piece : CurrentPiece.values()) + { + pieceMap.put(piece.pieceNumber, piece); + } + } + + + /** + * Because we have enum constants with arguments we have to create this constructor. + * It initializes the piece with the right values. + * + * @param pieceNumber It is the argument of the enum constant + */ + private CurrentPiece (final int pieceNumber) + { + this.pieceNumber = pieceNumber; + + //Pre-Initialization of matrix size + for (int i=0; i< WIDTH; i++) + for (int j=0; j< HEIGHT; j++) + size[i][j]= Tile.NOCOLOR; + + this.x = 0; + this.y = 0; + //It depends on what kind of piece, we have to fill the square in the right way. + this.fill(); + } + + + /** + * This method is used to retrieve the enum piece related to its number + * + * @param pieceNumber The piece number is associated to the argument of the enum constant. + * @return the enum whose argument of the enum constant matches the pieceNumber. + */ + public static final CurrentPiece getPiece (final int pieceNumber) + { + return pieceMap.get(pieceNumber); + } + + + /** + * This method is intended to be overridden by every piece to fill the square which contains the piece's shape. + */ + abstract void fill(); + +} diff --git a/Android/AndroidTetris/src/de/android/androidtetris/DrawView.java b/Android/AndroidTetris/src/de/android/androidtetris/DrawView.java new file mode 100644 index 0000000..c4a1e76 --- /dev/null +++ b/Android/AndroidTetris/src/de/android/androidtetris/DrawView.java @@ -0,0 +1,373 @@ +/** + * + */ +package de.android.androidtetris; + +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.view.KeyEvent; +import android.view.SurfaceHolder; +import android.view.SurfaceView; + +/** + * @author gusarapo + * + */ +public class DrawView extends SurfaceView { + private SurfaceHolder holder; + private final MainLoop mainLoop; + private static final int TILESIZE=16; + private static final int MAPWIDTH=10; + private static final int MAPHEIGHT=20; + private static final int GREY=8; + private Bitmap[] tileArray; + private Tile[][] mapMatrix; + private PrePiece prePiece; + private CurrentPiece currentPiece; + private final ExecutorService exec; + + private class MainLoop implements Runnable + { + private final DrawView view; + + public MainLoop(final DrawView view) { + this.view = view; + } + + + @Override + public void run() + { + while (true) + { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + synchronized (view.getHolder()) + { + Canvas c = view.getHolder().lockCanvas(); + view.move(0, 1); + view.drawMap(c); + //view.onDraw(c); + view.getHolder().unlockCanvasAndPost(c); + } + } + } + } + + + public DrawView(final Context context) + { + super(context); + + //I have so much to learn... + //The OnKeyListener for a specific View will only be called if the key is pressed + //while that View has focus. For a generic SurfaceView to be focused it first needs to be focusable + //http://stackoverflow.com/questions/975918/processing-events-in-surfaceview + setFocusableInTouchMode(true); + setFocusable(true); + + + this.newGame(); + + //Our main loop. + mainLoop = new MainLoop(this); + exec = Executors.newSingleThreadExecutor(); + + holder = getHolder(); + holder.addCallback(new SurfaceHolder.Callback() { + @Override + public void surfaceDestroyed(final SurfaceHolder holder) { + exec.shutdown(); + try { + exec.awaitTermination(20L, TimeUnit.SECONDS); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void surfaceCreated(final SurfaceHolder holder) { + exec.execute(mainLoop); + } + + @Override + public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) { + + } + }); + } + + + private void resetTiles(int tilecount) { + tileArray = new Bitmap[tilecount]; + } + + + private void loadTile(int key, int color) + { + + final Bitmap bitmap = Bitmap.createBitmap(TILESIZE, TILESIZE, Bitmap.Config.ARGB_8888); + for (int x = 0; x < TILESIZE; x++) { + for (int y=0; y< TILESIZE; y++) { + bitmap.setPixel(x, y, color); + } + } + tileArray[key] = bitmap; + } + + + private void newGame() + { + this.resetTiles(10); + for (Tile color : Tile.values() ) + { + this.loadTile(color.getColor(), color.getColorRGBA()); + } + mapMatrix = new Tile[MAPWIDTH][MAPHEIGHT+1]; + + //Start Map + this.startMap(); + } + + private CurrentPiece newCurrentBlock() + { + final Random random = new Random(); + + return CurrentPiece.getPiece(random.nextInt(7)%7); + } + + + private PrePiece newPreBlock() + { + final Random random = new Random(); + + return PrePiece.getPiece(random.nextInt(7)%7); + } + + private void drawTile(Canvas canvas, int color, int x, int y) + { + canvas.drawBitmap(tileArray[color], x*TILESIZE, y*TILESIZE, null); + } + + private void drawMap(Canvas canvas) + { + canvas.drawColor(Color.WHITE); + //We have to center the grid in the middle of our canvas. + //canvas.getWidth() <----------------- retrieve the screen width + //canvas.getWidth()/TILESIZE <-------- the tile size is 16, so we have to count on it when finding the center + //((canvas.getWidth()/TILESIZE))/2 <-- this is the middle of our screen, it depends on the tile size. + final int initX = (((canvas.getWidth()/TILESIZE)/2) - MAPWIDTH); + + + //draw the left bar (with scores, and next pieces + for(int x=MAPWIDTH; x< MAPWIDTH + GREY; x++) + for(int y=0; y< MAPHEIGHT; y++) + drawTile(canvas, Tile.GRAY.getColor(), x + initX, y); + + //draw the pre-piece + for(int x=0; x < PrePiece.WIDTH; x++) + for(int y=0; y< PrePiece.HEIGHT; y++) + if(prePiece.size[x][y] != Tile.NOCOLOR) + drawTile(canvas, prePiece.size[x][y].getColor(), prePiece.x + x + initX, prePiece.y +y); + + //draw grid + for(int x=0; x < MAPWIDTH; x++) + for(int y=0; y < MAPHEIGHT; y++) + drawTile(canvas, mapMatrix[x][y].getColor(), x + initX, y); + + //draw the current block + for(int x=0; x < CurrentPiece.WIDTH; x++) + for(int y=0; y < CurrentPiece.HEIGHT; y++) + if(currentPiece.size[x][y] != Tile.NOCOLOR) + drawTile(canvas, currentPiece.size[x][y].getColor(), currentPiece.x + x + initX, currentPiece.y +y); + } + + + private void startMap() { + for(int x=0;x< MAPWIDTH;x++) + { + for(int y=0; y<= MAPHEIGHT;y++) + { + mapMatrix[x][y]=Tile.BLACK; + } + } + currentPiece = newCurrentBlock(); + currentPiece.x = MAPWIDTH/2-2; + currentPiece.y = -1; + prePiece = newPreBlock(); + prePiece.x = MAPWIDTH+2; + prePiece.y = GREY/4; + } + + + private void move (int x, int y) + { + if (this.collisionTest(x, y)) + { + if (y == 1) + { + if (currentPiece.y == -1) + { + //GAMEOVER + startMap(); + } + else + { + //Adding block to Grid + for(int i=0; i0; y--) + mapMatrix[x][y]=mapMatrix[x][y-1]; + } + + + private boolean collisionTest(int cx, int cy) + { + int newx = currentPiece.x + cx; + int newy = currentPiece.y + cy; + + return this.checkCollision(currentPiece.size, newx, newy); + } + + + private boolean checkCollision(Tile[][] tiles, int xposition, int yposition) { + //Check grid boundaries + for(int x=0; x= MAPHEIGHT) || (yposition + y < 0) || (xposition + x >= MAPWIDTH) || (xposition + x < 0)) + return true; + + //Check collisions with other blocks + for(int x=0; x< MAPWIDTH; x++) + for(int y=0; y< MAPHEIGHT; y++) + if(x >= xposition && x < xposition + CurrentPiece.WIDTH) + if(y >= yposition && y < yposition + CurrentPiece.HEIGHT) + if(mapMatrix[x][y] != Tile.BLACK) + if(tiles[x - xposition][y - yposition] != Tile.NOCOLOR) + return true; + return false; + } + + + private void rotateBlock() { + Tile[][] temporal = new Tile[CurrentPiece.WIDTH][CurrentPiece.HEIGHT]; + + //Copy and rotate current piece to the temporary array + for(int x=0; x pieceMap = new HashMap(); + + + //Static initializer. JLS§12.4.2 Executed in textual order. + static { + for (PrePiece piece : PrePiece.values()) + { + pieceMap.put(piece.pieceNumber, piece); + } + } + + + /** + * Because we have enum constants with arguments we have to create this constructor. + * It initializes the piece with the right values. + * + * @param pieceNumber It is the argument of the enum constant + */ + private PrePiece (final int pieceNumber) + { + this.pieceNumber = pieceNumber; + + //Pre-Initialization of matrix size + for (int i=0; i< WIDTH; i++) + for (int j=0; j< HEIGHT; j++) + size[i][j]= Tile.NOCOLOR; + + this.x = 0; + this.y = 0; + //It depends on what kind of piece, we have to fill the square in the right way. + this.fill(); + } + + + /** + * This method is used to retrieve the enum piece related to its number + * + * @param pieceNumber The piece number is associated to the argument of the enum constant. + * @return the enum whose argument of the enum constant matches the pieceNumber. + */ + public static final PrePiece getPiece (final int pieceNumber) + { + return pieceMap.get(pieceNumber); + } + + + /** + * This method is intended to be overridden by every piece to fill the square which contains the piece's shape. + */ + abstract void fill(); + +} diff --git a/Android/AndroidTetris/src/de/android/androidtetris/Tile.java b/Android/AndroidTetris/src/de/android/androidtetris/Tile.java new file mode 100644 index 0000000..5bb79b1 --- /dev/null +++ b/Android/AndroidTetris/src/de/android/androidtetris/Tile.java @@ -0,0 +1,118 @@ +package de.android.androidtetris; + +import android.graphics.Color; + +/** + * This enum stores every tile and its associated RGBA color. + * + * @author gusarapo + * + */ +public enum Tile { + /*The red color*/ + RED(0) { + @Override + int getColorRGBA() { + return Color.RED; + } + }, + /*The blue color*/ + BLUE(1) { + @Override + int getColorRGBA() { + return Color.BLUE; + } + }, + /*The cyan color*/ + CYAN(2) { + @Override + int getColorRGBA() { + return Color.CYAN; + } + }, + /*The green color*/ + GREEN(3) { + @Override + int getColorRGBA() { + return Color.GREEN; + } + }, + /*The yellow color*/ + YELLOW(4) { + @Override + int getColorRGBA() { + return Color.YELLOW; + } + }, + /*The white color*/ + WHITE(5) { + @Override + int getColorRGBA() { + return Color.WHITE; + } + }, + /*The magenta color*/ + MAGENTA(6) { + @Override + int getColorRGBA() { + return Color.MAGENTA; + } + }, + /*The gray color*/ + GRAY(7) { + @Override + int getColorRGBA() { + return Color.GRAY; + } + }, + /*The black color*/ + BLACK(8) { + @Override + int getColorRGBA() { + return Color.BLACK; + } + }, + /*No color. It is used in pieces in order to create the piece's shape filling squares with color and no color*/ + NOCOLOR(9) { + @Override + int getColorRGBA() { + return Color.TRANSPARENT; + } + }; + + + //Stores the argument of the enum constant (passed to the constructor) JLS§8.9.1 + private final int color; + + + /** + * Because we have enum constants with arguments we have to create this constructor. + * It initializes the tile with the right values. + * + * @param color It is the argument of the enum constant + */ + Tile (final int color) + { + this.color = color; + } + + + /** + * This method retrieves the argument associated to the enum constant. + * + * @return integer value associated to the enum constant. + */ + public int getColor() + { + return color; + } + + + /** + * This method is intended to be overridden by every tile to retrieve the + * RGBA color associated to that tile. + * + * @return RGBA color + */ + abstract int getColorRGBA(); +} \ No newline at end of file diff --git a/AndroidTetris/AndroidManifest.xml b/AndroidTetris/AndroidManifest.xml deleted file mode 100644 index 046dc01..0000000 --- a/AndroidTetris/AndroidManifest.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidTetris/gen/de/android/androidtetris/R.java b/AndroidTetris/gen/de/android/androidtetris/R.java deleted file mode 100644 index 17497a4..0000000 --- a/AndroidTetris/gen/de/android/androidtetris/R.java +++ /dev/null @@ -1,26 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package de.android.androidtetris; - -public final class R { - public static final class attr { - } - public static final class drawable { - public static final int greenstar=0x7f020000; - public static final int icon=0x7f020001; - public static final int redstar=0x7f020002; - public static final int yellowstar=0x7f020003; - } - public static final class layout { - public static final int main=0x7f030000; - } - public static final class string { - public static final int app_name=0x7f040001; - public static final int hello=0x7f040000; - } -} diff --git a/AndroidTetris/proguard.cfg b/AndroidTetris/proguard.cfg deleted file mode 100644 index b1cdf17..0000000 --- a/AndroidTetris/proguard.cfg +++ /dev/null @@ -1,40 +0,0 @@ --optimizationpasses 5 --dontusemixedcaseclassnames --dontskipnonpubliclibraryclasses --dontpreverify --verbose --optimizations !code/simplification/arithmetic,!field/*,!class/merging/* - --keep public class * extends android.app.Activity --keep public class * extends android.app.Application --keep public class * extends android.app.Service --keep public class * extends android.content.BroadcastReceiver --keep public class * extends android.content.ContentProvider --keep public class * extends android.app.backup.BackupAgentHelper --keep public class * extends android.preference.Preference --keep public class com.android.vending.licensing.ILicensingService - --keepclasseswithmembernames class * { - native ; -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet); -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet, int); -} - --keepclassmembers class * extends android.app.Activity { - public void *(android.view.View); -} - --keepclassmembers enum * { - public static **[] values(); - public static ** valueOf(java.lang.String); -} - --keep class * implements android.os.Parcelable { - public static final android.os.Parcelable$Creator *; -} diff --git a/AndroidTetris/project.properties b/AndroidTetris/project.properties deleted file mode 100644 index 730e911..0000000 --- a/AndroidTetris/project.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-14 diff --git a/AndroidTetris/res/drawable-hdpi/icon.png b/AndroidTetris/res/drawable-hdpi/icon.png deleted file mode 100644 index 8074c4c571b8cd19e27f4ee5545df367420686d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4147 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 diff --git a/AndroidTetris/res/drawable-ldpi/icon.png b/AndroidTetris/res/drawable-ldpi/icon.png deleted file mode 100644 index 1095584ec21f71cd0afc9e0993aa2209671b590c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723 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

BsdSrL=avd$Fao=bOnxaYL^Nf?oJ- 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 F{txGYnoj@# diff --git a/AndroidTetris/res/drawable/yellowstar.png b/AndroidTetris/res/drawable/yellowstar.png deleted file mode 100644 index 134b2343cfa6e46a181de327a6d2912d8f13dc0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6653 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 diff --git a/AndroidTetris/res/layout/main.xml b/AndroidTetris/res/layout/main.xml deleted file mode 100644 index 4361cfe..0000000 --- a/AndroidTetris/res/layout/main.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/AndroidTetris/res/values/strings.xml b/AndroidTetris/res/values/strings.xml deleted file mode 100644 index 8c45b4c..0000000 --- a/AndroidTetris/res/values/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Hello World, AndroidTetrisActivity! - AndroidTetris - diff --git a/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java b/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java deleted file mode 100644 index 82b604f..0000000 --- a/AndroidTetris/src/de/android/androidtetris/AndroidTetrisActivity.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.android.androidtetris; - -import android.app.Activity; -import android.os.Bundle; -import android.util.DisplayMetrics; - -public class AndroidTetrisActivity extends Activity { - DrawView drawView; - /** Called when the activity is first created. */ - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - DisplayMetrics displayMetrics = new DisplayMetrics(); - this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - - setContentView(R.layout.main); - drawView = new DrawView(this); - //drawView.setDimensions(displayMetrics.widthPixels, displayMetrics.heightPixels); - this.setContentView(drawView); - drawView.requestFocus(); - } -} \ No newline at end of file diff --git a/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java b/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java deleted file mode 100644 index 11bbbd0..0000000 --- a/AndroidTetris/src/de/android/androidtetris/CurrentPiece.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * - */ -package de.android.androidtetris; - -import java.util.HashMap; -import java.util.Map; - -/** - * This enum stores every piece and the square related to that piece. - * - * @author gusarapo - * - */ -public enum CurrentPiece { - /*The tower piece*/ - I(0) { - @Override - void fill() { - size[1][0]=Tile.RED; - size[1][1]=Tile.RED; - size[1][2]=Tile.RED; - size[1][3]=Tile.RED; - } - }, - /*The box piece*/ - O(1) { - @Override - void fill() { - size[1][1]=Tile.BLUE; - size[1][2]=Tile.BLUE; - size[2][1]=Tile.BLUE; - size[2][2]=Tile.BLUE; - } - }, - /*The pyramid piece*/ - T(2) { - @Override - void fill() { - size[1][1]=Tile.YELLOW; - size[0][2]=Tile.YELLOW; - size[1][2]=Tile.YELLOW; - size[2][2]=Tile.YELLOW; - } - }, - /*The left leaner piece*/ - Z(3) { - @Override - void fill() { - size[0][1]=Tile.CYAN; - size[1][1]=Tile.CYAN; - size[1][2]=Tile.CYAN; - size[2][2]=Tile.CYAN; - } - }, - /*The right leaner piece*/ - S(4) { - @Override - void fill() { - size[2][1]=Tile.GREEN; - size[1][1]=Tile.GREEN; - size[1][2]=Tile.GREEN; - size[0][2]=Tile.GREEN; - } - }, - /*The left knight piece*/ - L(5) { - @Override - void fill() { - size[1][1]=Tile.MAGENTA; - size[2][1]=Tile.MAGENTA; - size[2][2]=Tile.MAGENTA; - size[2][3]=Tile.MAGENTA; - } - }, - /*The right knight piece*/ - J(6) { - @Override - void fill() { - size[2][1]=Tile.WHITE; - size[1][1]=Tile.WHITE; - size[1][2]=Tile.WHITE; - size[1][3]=Tile.WHITE; - } - }; - - - //Every piece is contained in a square. This is the square's width. - public static final int WIDTH = 4; - //Every piece is contained in a square. This is the square's height. - public static final int HEIGHT = 4; - //Stores the x coordinate (the position of this piece on the grid) - public int x; - //Stores the y coordinate (the position of this piece on the grid) - public int y; - //Every piece is contained in a square. - public final Tile[][] size = new Tile[WIDTH][HEIGHT]; - //Stores the argument of the enum constant (passed to the constructor) JLS§8.9.1 - public final int pieceNumber; - //Map with every enum constant. Class variable initializer. JLS§12.4.2 Executed in textual order. - private static final Map pieceMap = new HashMap(); - - - //Static initializer. JLS§12.4.2 Executed in textual order. - static { - for (CurrentPiece piece : CurrentPiece.values()) - { - pieceMap.put(piece.pieceNumber, piece); - } - } - - - /** - * Because we have enum constants with arguments we have to create this constructor. - * It initializes the piece with the right values. - * - * @param pieceNumber It is the argument of the enum constant - */ - private CurrentPiece (final int pieceNumber) - { - this.pieceNumber = pieceNumber; - - //Pre-Initialization of matrix size - for (int i=0; i< WIDTH; i++) - for (int j=0; j< HEIGHT; j++) - size[i][j]= Tile.NOCOLOR; - - this.x = 0; - this.y = 0; - //It depends on what kind of piece, we have to fill the square in the right way. - this.fill(); - } - - - /** - * This method is used to retrieve the enum piece related to its number - * - * @param pieceNumber The piece number is associated to the argument of the enum constant. - * @return the enum whose argument of the enum constant matches the pieceNumber. - */ - public static final CurrentPiece getPiece (final int pieceNumber) - { - return pieceMap.get(pieceNumber); - } - - - /** - * This method is intended to be overridden by every piece to fill the square which contains the piece's shape. - */ - abstract void fill(); - -} diff --git a/AndroidTetris/src/de/android/androidtetris/DrawView.java b/AndroidTetris/src/de/android/androidtetris/DrawView.java deleted file mode 100644 index 32c3f99..0000000 --- a/AndroidTetris/src/de/android/androidtetris/DrawView.java +++ /dev/null @@ -1,374 +0,0 @@ -/** - * - */ -package de.android.androidtetris; - -import java.util.Random; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.view.KeyEvent; -import android.view.SurfaceHolder; -import android.view.SurfaceView; - -/** - * @author gusarapo - * - */ -public class DrawView extends SurfaceView { - private SurfaceHolder holder; - private final MainLoop mainLoop; - private static final int TILESIZE=16; - private static final int MAPWIDTH=10; - private static final int MAPHEIGHT=20; - private static final int GREY=8; - private Bitmap[] tileArray; - private Tile[][] mapMatrix; - private PrePiece prePiece; - private CurrentPiece currentPiece; - private final ExecutorService exec; - - private class MainLoop implements Runnable - { - private final DrawView view; - - public MainLoop(final DrawView view) { - this.view = view; - } - - - @Override - public void run() - { - while (true) - { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - synchronized (view.getHolder()) - { - Canvas c = view.getHolder().lockCanvas(); - view.move(0, 1); - view.drawMap(c); - //view.onDraw(c); - view.getHolder().unlockCanvasAndPost(c); - } - } - } - } - - - public DrawView(final Context context) - { - super(context); - - //I have so much to learn... - //The OnKeyListener for a specific View will only be called if the key is pressed - //while that View has focus. For a generic SurfaceView to be focused it first needs to be focusable - //http://stackoverflow.com/questions/975918/processing-events-in-surfaceview - setFocusableInTouchMode(true); - setFocusable(true); - - - this.newGame(); - - //Our main loop. - mainLoop = new MainLoop(this); - exec = Executors.newSingleThreadExecutor(); - - holder = getHolder(); - holder.addCallback(new SurfaceHolder.Callback() { - @Override - public void surfaceDestroyed(final SurfaceHolder holder) { - exec.shutdown(); - try { - exec.awaitTermination(20L, TimeUnit.SECONDS); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - @Override - public void surfaceCreated(final SurfaceHolder holder) { - exec.execute(mainLoop); - } - - @Override - public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) { - - } - }); - } - - - private void resetTiles(int tilecount) { - tileArray = new Bitmap[tilecount]; - } - - - private void loadTile(int key, int color) - { - - final Bitmap bitmap = Bitmap.createBitmap(TILESIZE, TILESIZE, Bitmap.Config.ARGB_8888); - for (int x = 0; x < TILESIZE; x++) { - for (int y=0; y< TILESIZE; y++) { - bitmap.setPixel(x, y, color); - } - } - tileArray[key] = bitmap; - } - - - private void newGame() - { - this.resetTiles(10); - for (Tile color : Tile.values() ) - { - this.loadTile(color.getColor(), color.getColorRGBA()); - } - mapMatrix = new Tile[MAPWIDTH][MAPHEIGHT+1]; - - //Start Map - this.startMap(); - } - - private CurrentPiece newCurrentBlock() - { - final Random random = new Random(); - - return CurrentPiece.getPiece(random.nextInt(7)%7); - } - - - private PrePiece newPreBlock() - { - final Random random = new Random(); - - return PrePiece.getPiece(random.nextInt(7)%7); - } - - private void drawTile(Canvas canvas, int color, int x, int y) - { - canvas.drawBitmap(tileArray[color], x*TILESIZE, y*TILESIZE, null); - } - - private void drawMap(Canvas canvas) - { - canvas.drawColor(Color.WHITE); - //We have to center the grid in the middle of our canvas. - //canvas.getWidth() <----------------- retrieve the screen width - //canvas.getWidth()/TILESIZE <-------- the tile size is 16, so we have to count on it when finding the center - //((canvas.getWidth()/TILESIZE))/2 <-- this is the middle of our screen, it depends on the tile size. - final int initX = (((canvas.getWidth()/TILESIZE)/2) - MAPWIDTH); - - - //draw the left bar (with scores, and next pieces - for(int x=MAPWIDTH; x< MAPWIDTH + GREY; x++) - for(int y=0; y< MAPHEIGHT; y++) - drawTile(canvas, Tile.GRAY.getColor(), x + initX, y); - - //draw the pre-piece - for(int x=0; x < PrePiece.WIDTH; x++) - for(int y=0; y< PrePiece.HEIGHT; y++) - if(prePiece.size[x][y] != Tile.NOCOLOR) - drawTile(canvas, prePiece.size[x][y].getColor(), prePiece.x + x + initX, prePiece.y +y); - - //draw grid - for(int x=0; x < MAPWIDTH; x++) - for(int y=0; y < MAPHEIGHT; y++) - drawTile(canvas, mapMatrix[x][y].getColor(), x + initX, y); - - //draw the current block - for(int x=0; x < CurrentPiece.WIDTH; x++) - for(int y=0; y < CurrentPiece.HEIGHT; y++) - if(currentPiece.size[x][y] != Tile.NOCOLOR) - drawTile(canvas, currentPiece.size[x][y].getColor(), currentPiece.x + x + initX, currentPiece.y +y); - } - - - private void startMap() { - for(int x=0;x< MAPWIDTH;x++) - { - for(int y=0; y<= MAPHEIGHT;y++) - { - mapMatrix[x][y]=Tile.BLACK; - } - } - currentPiece = newCurrentBlock(); - currentPiece.x = MAPWIDTH/2-2; - currentPiece.y = -1; - prePiece = newPreBlock(); - prePiece.x = MAPWIDTH+2; - prePiece.y = GREY/4; - } - - - private void move (int x, int y) - { - if (this.collisionTest(x, y)) - { - if (y == 1) - { - if (currentPiece.y == -1) - { - //GAMEOVER - startMap(); - } - else - { - //Adding block to Grid - for(int i=0; i0; y--) - mapMatrix[x][y]=mapMatrix[x][y-1]; - } - - - private boolean collisionTest(int cx, int cy) - { - int newx = currentPiece.x + cx; - int newy = currentPiece.y + cy; - - return this.checkCollision(currentPiece.size, newx, newy); - } - - - private boolean checkCollision(Tile[][] tiles, int xposition, int yposition) { - //Check grid boundaries - for(int x=0; x= MAPHEIGHT) || (yposition + y < 0) || (xposition + x >= MAPWIDTH) || (xposition + x < 0)) - return true; - - //Check collisions with other blocks - for(int x=0; x< MAPWIDTH; x++) - for(int y=0; y< MAPHEIGHT; y++) - if(x >= xposition && x < xposition + CurrentPiece.WIDTH) - if(y >= yposition && y < yposition + CurrentPiece.HEIGHT) - if(mapMatrix[x][y] != Tile.BLACK) - if(tiles[x - xposition][y - yposition] != Tile.NOCOLOR) - return true; - return false; - } - - - private void rotateBlock() { - Tile[][] temporal = new Tile[CurrentPiece.WIDTH][CurrentPiece.HEIGHT]; - - //Copy and rotate current piece to the temporary array - for(int x=0; x pieceMap = new HashMap(); - - - //Static initializer. JLS§12.4.2 Executed in textual order. - static { - for (PrePiece piece : PrePiece.values()) - { - pieceMap.put(piece.pieceNumber, piece); - } - } - - - /** - * Because we have enum constants with arguments we have to create this constructor. - * It initializes the piece with the right values. - * - * @param pieceNumber It is the argument of the enum constant - */ - private PrePiece (final int pieceNumber) - { - this.pieceNumber = pieceNumber; - - //Pre-Initialization of matrix size - for (int i=0; i< WIDTH; i++) - for (int j=0; j< HEIGHT; j++) - size[i][j]= Tile.NOCOLOR; - - this.x = 0; - this.y = 0; - //It depends on what kind of piece, we have to fill the square in the right way. - this.fill(); - } - - - /** - * This method is used to retrieve the enum piece related to its number - * - * @param pieceNumber The piece number is associated to the argument of the enum constant. - * @return the enum whose argument of the enum constant matches the pieceNumber. - */ - public static final PrePiece getPiece (final int pieceNumber) - { - return pieceMap.get(pieceNumber); - } - - - /** - * This method is intended to be overridden by every piece to fill the square which contains the piece's shape. - */ - abstract void fill(); - -} diff --git a/AndroidTetris/src/de/android/androidtetris/Tile.java b/AndroidTetris/src/de/android/androidtetris/Tile.java deleted file mode 100644 index 5bb79b1..0000000 --- a/AndroidTetris/src/de/android/androidtetris/Tile.java +++ /dev/null @@ -1,118 +0,0 @@ -package de.android.androidtetris; - -import android.graphics.Color; - -/** - * This enum stores every tile and its associated RGBA color. - * - * @author gusarapo - * - */ -public enum Tile { - /*The red color*/ - RED(0) { - @Override - int getColorRGBA() { - return Color.RED; - } - }, - /*The blue color*/ - BLUE(1) { - @Override - int getColorRGBA() { - return Color.BLUE; - } - }, - /*The cyan color*/ - CYAN(2) { - @Override - int getColorRGBA() { - return Color.CYAN; - } - }, - /*The green color*/ - GREEN(3) { - @Override - int getColorRGBA() { - return Color.GREEN; - } - }, - /*The yellow color*/ - YELLOW(4) { - @Override - int getColorRGBA() { - return Color.YELLOW; - } - }, - /*The white color*/ - WHITE(5) { - @Override - int getColorRGBA() { - return Color.WHITE; - } - }, - /*The magenta color*/ - MAGENTA(6) { - @Override - int getColorRGBA() { - return Color.MAGENTA; - } - }, - /*The gray color*/ - GRAY(7) { - @Override - int getColorRGBA() { - return Color.GRAY; - } - }, - /*The black color*/ - BLACK(8) { - @Override - int getColorRGBA() { - return Color.BLACK; - } - }, - /*No color. It is used in pieces in order to create the piece's shape filling squares with color and no color*/ - NOCOLOR(9) { - @Override - int getColorRGBA() { - return Color.TRANSPARENT; - } - }; - - - //Stores the argument of the enum constant (passed to the constructor) JLS§8.9.1 - private final int color; - - - /** - * Because we have enum constants with arguments we have to create this constructor. - * It initializes the tile with the right values. - * - * @param color It is the argument of the enum constant - */ - Tile (final int color) - { - this.color = color; - } - - - /** - * This method retrieves the argument associated to the enum constant. - * - * @return integer value associated to the enum constant. - */ - public int getColor() - { - return color; - } - - - /** - * This method is intended to be overridden by every tile to retrieve the - * RGBA color associated to that tile. - * - * @return RGBA color - */ - abstract int getColorRGBA(); -} \ No newline at end of file -- 2.1.4