diff --git a/.idea/MiniProjectPCSS.iml b/.idea/MiniProjectPCSS.iml
new file mode 100644
index 00000000..d6ebd480
--- /dev/null
+++ b/.idea/MiniProjectPCSS.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 00000000..15a15b21
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..70db8b2b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 00000000..12629a86
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1570106076345
+
+
+ 1570106076345
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 5a3ddf38..97ae2c61 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,57 @@
-# pcss
\ No newline at end of file
+# Introduction
+"Codename: ULTRA" is a two player game where both players get different information presented on their device. The game was originally developed for a second semester project but is now being modified to one simple riddle which is being used for this mini-project.
+
+In order to play the game, a server needs to be running before running the clients. When the server is running, players can join the game. Two players can play together and any more players willing to join, can play in pairs seperately from others.
+
+When the game is installed on the phones and the 2 players have pressed the play button, each of them is assigned to one of the two roles: War officer or Intelligence officer. The game can be finished by the collaboration beetween the two officers.
+
+The mini project's puzzle is just one out of the actual game "Codename: ULTRA" which consists of many more puzzles. For the mini project this puzzle was only presented as a teaser for the full game.
+
+The server is made in IntelliJ IDEA and the Client in Android Studio. The game can run on an Android phone or an emulator within Android Studio.
+
+# Step by step guide on how to set up the Server
+
+1. Download the repository to your computer as a zip file and unzip it.
+
+2. In order to run the server, Java IDE is needed. For example Eclipse IDE for Java Developers or IntelliJ IDEA. The group has used IntelliJ IDEA for developing the program. It can be downloaded through https://www.jetbrains.com/idea/ following the guide provided on the webpage.
+
+3. When the download has been completed, the folder named "Server" should be opened through the Java IDE.
+
+4. Make sure the server can run before starting the Client. If it prints out the line "Server is running" it is set up for starting the game.
+
+# Step by step guide on how to set up the Client
+
+1. As the repository is already downloaded, the first step to make sure the Client will run, is to download Android studio. That can be done through this link > https://developer.android.com/studio
+
+2. When the download has been completed, the folder named "rotate4" should be opened through Android Studio.
+
+3. Install the program on the phone (With Android OS) by running it while it is connected to the computer through USB. One should remember to enable Developers options -> USB Debugging on the device.
+
+4. The phones should be connected to the same hotspot as the computer and the IP adress ("???.???.??.???.") should be written in the Client class where it says:
+Socket s = new Socket ("192.168.??.???", port 7500);
+
+5. Check if the server is running and run the game from Android Studio. It is now able to connect from the phones to server.
+
+# Gameplay
+
+For starting the game, after making sure the server is running, both players must start the application on their phones and start the game. One of the players, as mentioned above, will be a War Officer, another an Intelligence Officer.
+
+To complete the game, the intelligence officer is opening the poem on their table, and the War officer (using the code on his table) should collaborate in solving the small puzzle the War Officer is presented to. Together they should spell out the sentence "The name of a brilliant mind". Then, the players should discuss the meaning of this sentence and what/who it is reffering to. When they have come up with a possible solution, the war officer should go to the box on his table and spell out what he thinks is the answer. If the war officer spells out "TURING" then the game is completed and over.
+
+# UML class, use case, and sequence diagrams
+### Class diagram client:
+
+
+
+### Class diagram server:
+
+
+
+### Use case diagram:
+
+
+
+### Sequence diagram:
+
+
+
diff --git a/Server/src/.idea/workspace.xml b/Server/src/.idea/workspace.xml
new file mode 100644
index 00000000..a95b140e
--- /dev/null
+++ b/Server/src/.idea/workspace.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1571316316584
+
+
+ 1571316316584
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.gitignore b/rotate4/.gitignore
new file mode 100644
index 00000000..2b75303a
--- /dev/null
+++ b/rotate4/.gitignore
@@ -0,0 +1,13 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
diff --git a/rotate4/.idea/codeStyles/Project.xml b/rotate4/.idea/codeStyles/Project.xml
new file mode 100644
index 00000000..681f41ae
--- /dev/null
+++ b/rotate4/.idea/codeStyles/Project.xml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.idea/encodings.xml b/rotate4/.idea/encodings.xml
new file mode 100644
index 00000000..15a15b21
--- /dev/null
+++ b/rotate4/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.idea/gradle.xml b/rotate4/.idea/gradle.xml
new file mode 100644
index 00000000..e22b5728
--- /dev/null
+++ b/rotate4/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.idea/misc.xml b/rotate4/.idea/misc.xml
new file mode 100644
index 00000000..37a75096
--- /dev/null
+++ b/rotate4/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.idea/runConfigurations.xml b/rotate4/.idea/runConfigurations.xml
new file mode 100644
index 00000000..7f68460d
--- /dev/null
+++ b/rotate4/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/.idea/vcs.xml b/rotate4/.idea/vcs.xml
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/rotate4/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/.gitignore b/rotate4/app/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/rotate4/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/rotate4/app/build.gradle b/rotate4/app/build.gradle
new file mode 100644
index 00000000..7fa95426
--- /dev/null
+++ b/rotate4/app/build.gradle
@@ -0,0 +1,30 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ applicationId "com.example.rotate4"
+ minSdkVersion 15
+ targetSdkVersion 28
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'com.android.support:design:28.0.0'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation 'pl.bclogic:pulsator4droid:1.0.3'
+}
diff --git a/rotate4/app/proguard-rules.pro b/rotate4/app/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/rotate4/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/rotate4/app/src/androidTest/java/com/example/rotate4/ExampleInstrumentedTest.java b/rotate4/app/src/androidTest/java/com/example/rotate4/ExampleInstrumentedTest.java
new file mode 100644
index 00000000..faec36fe
--- /dev/null
+++ b/rotate4/app/src/androidTest/java/com/example/rotate4/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.rotate4;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.example.rotate4", appContext.getPackageName());
+ }
+}
diff --git a/rotate4/app/src/main/AndroidManifest.xml b/rotate4/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..97fb3432
--- /dev/null
+++ b/rotate4/app/src/main/AndroidManifest.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/java/com/example/rotate4/Bombe.java b/rotate4/app/src/main/java/com/example/rotate4/Bombe.java
new file mode 100644
index 00000000..a4782d1f
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/Bombe.java
@@ -0,0 +1,246 @@
+package com.example.rotate4;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class Bombe extends AppCompatActivity {
+
+ private ImageView bombetro;
+
+ ImageButton pic1;
+ private int pic1Counter = 0;
+ private boolean pic1true = false;
+
+ ImageButton pic2;
+ private int pic2Counter = 0;
+ private boolean pic2true = false;
+
+ ImageButton pic3;
+ private int pic3Counter = 0;
+ private boolean pic3true = false;
+
+ ImageButton pic4;
+ private int pic4Counter = 0;
+ private boolean pic4true = false;
+
+ ImageButton pic5;
+ private int pic5Counter = 0;
+ private boolean pic5true = false;
+
+ ImageButton pic6;
+ private int pic6Counter = 0;
+ private boolean pic6true = false;
+
+ ImageButton pic7;
+ private int pic7Counter = 0;
+ private boolean pic7true = false;
+
+ ImageButton pic8;
+ private int pic8Counter = 0;
+ private boolean pic8true = false;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ //Hides the feature bar.
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bombe);
+
+
+
+ pic1 = findViewById(R.id.pic1);
+ pic1.setOnClickListener(new View.OnClickListener() {
+
+
+
+ @Override
+ public void onClick(View view) {
+ pic1 = findViewById(R.id.pic1);
+ pic1.setRotation(pic1.getRotation() + 60);
+ pic1Counter++;
+ if (pic1Counter>6){
+ pic1Counter=0;
+ }
+
+ if (pic1Counter == 3) {
+ pic1true = true;
+ }
+
+
+
+ }
+ });
+
+ pic2 = findViewById(R.id.pic2);
+ pic2.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic2 = findViewById(R.id.pic2);
+ pic2.setRotation(pic2.getRotation() + 60);
+ pic2Counter++;
+ if (pic2Counter>6){
+ pic2Counter=0;
+ }
+ if (pic2Counter == 2) {
+ pic2true = true;
+ }
+ }
+ });
+
+ pic3 = findViewById(R.id.pic3);
+ pic3.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic3 = findViewById(R.id.pic3);
+ pic3.setRotation(pic3.getRotation() + 60);
+ pic3Counter++;
+ if (pic3Counter>6){
+ pic3Counter=0;
+ }
+ if (pic3Counter == 1) {
+ pic3true = true;
+ }
+ }
+ });
+
+
+ pic4 = findViewById(R.id.pic4);
+ pic4.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic4 = findViewById(R.id.pic4);
+ pic4.setRotation(pic4.getRotation() + 60);
+ pic4Counter++;
+ if (pic4Counter>6){
+ pic4Counter=0;
+ }
+ if (pic4Counter == 3) {
+ pic4true = true;
+ }
+ }
+ });
+
+ pic5 = findViewById(R.id.pic5);
+ pic5.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic5 = findViewById(R.id.pic5);
+ pic5.setRotation(pic5.getRotation() + 60);
+ pic5Counter++;
+ if (pic5Counter>6){
+ pic5Counter=0;
+ }
+ if (pic5Counter == 3) {
+ pic5true = true;
+ }
+ }
+ });
+
+ pic6 = findViewById(R.id.pic6);
+ pic6.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic6 = findViewById(R.id.pic6);
+ pic6.setRotation(pic6.getRotation() + 60);
+ pic6Counter++;
+ if (pic6Counter>6){
+ pic6Counter=0;
+ }
+ if (pic6Counter == 3) {
+ pic6true = true;
+ }
+ }
+ });
+
+ pic7 = findViewById(R.id.pic7);
+ pic7.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic7 = findViewById(R.id.pic7);
+ pic7.setRotation(pic7.getRotation() + 60);
+ pic7Counter++;
+ if (pic7Counter>6){
+ pic7Counter=0;
+ }
+ if (pic7Counter == 3) {
+ pic7true = true;
+ }
+ }
+ });
+
+ pic8 = findViewById(R.id.pic8);
+ pic8.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ pic8 = findViewById(R.id.pic8);
+ pic8.setRotation(pic8.getRotation() + 60);
+ pic8Counter++;
+ if (pic8Counter>6){
+ pic8Counter=0;
+ }
+ if (pic8Counter == 3) {
+ pic8true = true;
+ }
+ }
+ });
+
+ }
+
+
+
+
+ public void nextPage(View view) {
+
+
+ bombetro = findViewById(R.id.bombetro);
+
+ if (pic1true == true && pic2true==true && pic3true==true && pic4true==true && pic5true==true && pic6true==true && pic7true==true&& pic8true==true) {
+
+ bombetro.animate().alpha(1f).setDuration(1500);
+ bombetro.postDelayed(new Runnable() {
+
+ @Override
+ public void run() {
+ bombetro.animate().alpha(0f).setDuration(1500);
+ bombetro.postDelayed(new Runnable() {
+
+ @Override
+ public void run() {
+
+ nextPage1();
+ }
+ }, 2000);
+
+ }
+ }, 3000);
+ }
+
+ }
+
+ public void nextPage1(){
+ Intent intent = new Intent(this, MainActivity.class);
+ startActivity(intent);
+
+ }
+
+ public void back(View view){
+ Intent intent= new Intent(this, Desktop.class);
+ startActivity(intent);
+ }
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/Client.java b/rotate4/app/src/main/java/com/example/rotate4/Client.java
new file mode 100644
index 00000000..e4549b6e
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/Client.java
@@ -0,0 +1,118 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Client extends AppCompatActivity {
+ boolean connect = true;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.client);
+ System.out.println("Class Client is working pls");
+ //Scanner input = new Scanner(System.in);
+
+
+ Thread thread = new Thread(new clientThread());
+ thread.start();
+
+ /*try {
+ System.out.println("Inside try");
+ Socket s = new Socket("192.168.8.104", 7500);
+ System.out.println("Connected to server");
+
+
+ DataInputStream inputStream = new DataInputStream(s.getInputStream());
+ DataOutputStream outputStream = new DataOutputStream(s.getOutputStream());
+
+ while (connect) {
+ System.out.print("While connected...");
+ outputStream.writeDouble(1);
+ System.out.print("Sending double '1' to server for defining ");
+
+ double warOfficer = inputStream.readDouble();
+ double intelligens = inputStream.readDouble();
+
+ if (warOfficer == 10) {
+ // change the screen with intent
+ startwar();
+ }
+
+ if (intelligens == 20) {
+ // change the screen with intent
+ startintel();
+ }
+
+
+ }
+ } catch (IOException ex) {
+ System.out.println("ex");
+ }*/
+
+ }
+
+
+ public class clientThread implements Runnable{
+
+ @Override
+ public void run() {
+ try {
+ System.out.println("Inside try");
+ Socket s = new Socket("192.168.43.180", 7500);
+ System.out.println("Connected to server");
+
+
+ DataInputStream inputStream = new DataInputStream(s.getInputStream());
+ DataOutputStream outputStream = new DataOutputStream(s.getOutputStream());
+ System.out.println("Data Streams established");
+
+
+ while (connect) {
+ System.out.print("While connected...");
+ outputStream.writeDouble(1);
+ System.out.print("Sending double '1' to server for defining ");
+
+ outputStream.flush();
+
+ double character = inputStream.readDouble();
+ //double intelligens = inputStream.readDouble();
+
+
+
+ if (character == 10) {
+ // change the screen with intent
+ startwar();
+ }
+
+ if (character == 20) {
+ // change the screen with intent
+ startintel();
+ }
+
+
+ }
+ } catch (IOException ex) {
+ System.out.println("ex");
+ }
+ }
+ }
+
+ void startwar(){
+ Intent intent = new Intent(this, DesktopWar.class);
+ startActivity(intent);
+ }
+
+ void startintel(){
+ Intent intent = new Intent(this,Desktop.class);
+ startActivity(intent);
+ }
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/Desktop.java b/rotate4/app/src/main/java/com/example/rotate4/Desktop.java
new file mode 100644
index 00000000..a0b1972e
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/Desktop.java
@@ -0,0 +1,131 @@
+package com.example.rotate4;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.media.MediaPlayer;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.support.v7.app.AppCompatActivity;
+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.TextView;
+
+public class Desktop extends AppCompatActivity {
+ int hintCounter=0;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ //Hides the feature bar.
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_desktop);
+
+ }
+
+
+
+// opens the bombe class
+ public void bombeMachine(View view){
+ Intent intent= new Intent(this, Bombe.class);
+ startActivity(intent);
+ }
+
+
+ public void HintButton(View view) {
+ ImageView hint = findViewById(R.id.hint1);
+ hintCounter++;
+
+ if (hintCounter == 1) {
+ hint.setVisibility(View.VISIBLE);
+ hint.setImageResource(R.drawable.hintone);
+ VisibleInvisible();
+ }
+
+ if (hintCounter == 2) {
+ hint.setVisibility(View.VISIBLE);
+ hint.setImageResource(R.drawable.hintthree);
+ VisibleInvisible();
+ }
+
+ if (hintCounter > 2) {
+ hint.setVisibility(View.VISIBLE);
+ hint.setImageResource(R.drawable.hintlast);
+ VisibleInvisible();
+ }
+ }
+
+ //method for setting everything invisible and back button visible(is used for the other methods)
+ public void VisibleInvisible(){
+ Button back = findViewById(R.id.backBD);
+ back.setVisibility(View.VISIBLE);
+
+ Button poemB=findViewById(R.id.poem);
+ poemB.setVisibility(View.INVISIBLE);
+
+ Button bombeB=findViewById(R.id.bombe);
+ bombeB.setVisibility(View.INVISIBLE);
+
+ Button charInfo= findViewById(R.id.charpro);
+ charInfo.setVisibility(View.INVISIBLE);
+
+ Button hintButton = findViewById(R.id.hintButt);
+ hintButton.setVisibility(View.INVISIBLE);
+
+ }
+
+
+ //Opens the character by setting the picture to visible.
+ public void profileView(View view){
+ ImageView character= findViewById(R.id.charView);
+ character.setVisibility(View.VISIBLE);
+
+ VisibleInvisible();
+ }
+
+ //Opens the poem by setting it to visible
+ public void poemView(View view){
+ ImageView poem= findViewById(R.id.poemView);
+ poem.setVisibility(View.VISIBLE);
+
+ VisibleInvisible();
+ }
+
+
+ // goes back to the desktop picture if the back button is pushed
+ public void backButton(View view){
+
+ ImageView poem= findViewById(R.id.poemView);
+ poem.setVisibility(View.INVISIBLE);
+
+ Button back= findViewById(R.id.backBD);
+ back.setVisibility(View.INVISIBLE);
+
+ Button poemB=findViewById(R.id.poem);
+ poemB.setVisibility(View.VISIBLE);
+
+ Button bombeB=findViewById(R.id.bombe);
+ bombeB.setVisibility(View.VISIBLE);
+
+ Button charInfo= findViewById(R.id.charpro);
+ charInfo.setVisibility(View.VISIBLE);
+
+ ImageView character= findViewById(R.id.charView);
+ character.setVisibility(View.INVISIBLE);
+
+ ImageView hint= findViewById(R.id.hint1);
+ hint.setVisibility(View.INVISIBLE);
+
+ Button hintButton = findViewById(R.id.hintButt);
+ hintButton.setVisibility(View.VISIBLE);
+ }
+
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/DesktopWar.java b/rotate4/app/src/main/java/com/example/rotate4/DesktopWar.java
new file mode 100644
index 00000000..53a32238
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/DesktopWar.java
@@ -0,0 +1,131 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+
+public class DesktopWar extends AppCompatActivity {
+
+ int clickCounter = 0;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_desktopwar);
+
+
+
+ /*CountDownTimer timer = new CountDownTimer(1500000, 1000){ //25 minutes
+ TextView timer = findViewById(R.id.timer);
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ timer.setText("Time: " +millisUntilFinished/60000 + " minutes");
+ }
+
+ @Override
+ public void onFinish() {
+ timer.setText("Fail");
+ }
+ };
+ timer.start();*/
+ }
+
+
+ //enlarging the box (running code in puzzle class)
+ public void box (View view) {
+ Intent intent = new Intent(this, Puzzle.class);
+ startActivity(intent);
+ }
+
+ public void visibleInvisibleElementsDesktop(){
+ Button back = findViewById(R.id.backButton);
+ back.setVisibility(View.VISIBLE);
+ Button boxButton = findViewById(R.id.boxButton);
+ boxButton.setVisibility(View.GONE);
+ Button codeButton = findViewById(R.id.codeButton);
+ codeButton.setVisibility(View.GONE);
+ Button characterButton = findViewById(R.id.characterButton);
+ characterButton.setVisibility(View.GONE);
+ Button hintButton = findViewById(R.id.hintButton);
+ hintButton.setVisibility(View.GONE);
+ }
+
+ //enlarge the code and hide the box so it is not clickable
+ public void openCodeDesktop (View view){
+ ImageView openCode = findViewById(R.id.codeFullscreen);
+ openCode.setVisibility(View.VISIBLE);
+ visibleInvisibleElementsDesktop();
+ }
+
+ public void backButtonDesktop (View view){
+ Button back = findViewById(R.id.backButton);
+ back.setVisibility(View.INVISIBLE);
+ Button boxButton = findViewById(R.id.boxButton);
+ boxButton.setVisibility(View.VISIBLE);
+ Button codeButton = findViewById(R.id.codeButton);
+ codeButton.setVisibility(View.VISIBLE);
+ Button characterButton = findViewById(R.id.characterButton);
+ characterButton.setVisibility(View.VISIBLE);
+ Button hintsBut = findViewById(R.id.hintButton);
+ hintsBut.setVisibility(View.VISIBLE);
+
+ ImageView openCode = findViewById(R.id.codeFullscreen);
+ openCode.setVisibility(View.INVISIBLE);
+ ImageView openCharacter = findViewById(R.id.characterFullscreen);
+ openCharacter.setVisibility(View.INVISIBLE);
+ ImageView hints = findViewById(R.id.ArrayHints);
+ hints.setVisibility(View.INVISIBLE);
+ }
+
+ public void openCharacterDesktop (View view){
+ ImageView openCharacter = findViewById(R.id.characterFullscreen);
+ openCharacter.setVisibility(View.VISIBLE);
+ visibleInvisibleElementsDesktop();
+ }
+
+ public void hintDesktop(View view){
+ ImageView hints = findViewById(R.id.ArrayHints);
+ clickCounter++;
+
+ if(clickCounter == 1){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.hint_one);
+ visibleInvisibleElementsDesktop();
+ }
+ if(clickCounter == 2){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.hint_two);
+ visibleInvisibleElementsDesktop();
+ }
+ if(clickCounter == 3){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.hint_three);
+ visibleInvisibleElementsDesktop();
+ }
+ if(clickCounter == 4){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.hint_four);
+ visibleInvisibleElementsDesktop();
+ }
+ if(clickCounter == 5){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.hint_five);
+ visibleInvisibleElementsDesktop();
+ }
+ if(clickCounter > 5){
+ hints.setVisibility(View.VISIBLE);
+ hints.setImageResource(R.drawable.nohints);
+ visibleInvisibleElementsDesktop();
+ }
+
+ }
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/EndScreen.java b/rotate4/app/src/main/java/com/example/rotate4/EndScreen.java
new file mode 100644
index 00000000..d278d062
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/EndScreen.java
@@ -0,0 +1,25 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+public class EndScreen extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_endscreen);
+ }
+
+ public void endGame(View view){
+ Intent intent= new Intent(this, MainActivity.class);
+ startActivity(intent);
+ }
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/MainActivity.java b/rotate4/app/src/main/java/com/example/rotate4/MainActivity.java
new file mode 100644
index 00000000..42a0a1dc
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/MainActivity.java
@@ -0,0 +1,61 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+public class MainActivity extends AppCompatActivity {
+
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ //three first lines hide the bars, same in all activities
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+
+ }
+ /* void Main () {
+ boolean connect = true;
+ try {
+ Socket connectToServer = new Socket("localhost", 7500);
+ System.out.println("Connected to the server");
+ DataInputStream isFromServer = new DataInputStream (connectToServer.getInputStream());
+ DataOutputStream osFromServer = new DataOutputStream (connectToServer.getOutputStream());
+
+
+ while (connect) {
+ System.out.println("Waiting for player 2");
+ String waiting;
+ }
+
+ } catch (IOException var15) {
+ System.out.println(var15.toString() + "\n");
+
+ }
+ }*/
+
+ public void startGame(View view){
+ System.out.println("Connecting to server");
+ Intent intent1 = new Intent (this, Client.class);
+ startActivity(intent1);
+
+ //Intent intent= new Intent(this, Selection.class);
+ //startActivity(intent);
+
+
+
+ }
+
+}
+
+
+
diff --git a/rotate4/app/src/main/java/com/example/rotate4/MyBounceInterpolater.java b/rotate4/app/src/main/java/com/example/rotate4/MyBounceInterpolater.java
new file mode 100644
index 00000000..fc5097a2
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/MyBounceInterpolater.java
@@ -0,0 +1,16 @@
+package com.example.rotate4;
+
+public class MyBounceInterpolater implements android.view.animation.Interpolator {
+ private double mAmplitude = 1;
+ private double mFrequency = 10;
+
+ MyBounceInterpolater(double amplitude, double frequency) {
+ mAmplitude = amplitude;
+ mFrequency = frequency;
+ }
+
+ public float getInterpolation(float time) {
+ return (float) (-1 * Math.pow(Math.E, -time/ mAmplitude) *
+ Math.cos(mFrequency * time) + 1);
+ }
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/Puzzle.java b/rotate4/app/src/main/java/com/example/rotate4/Puzzle.java
new file mode 100644
index 00000000..62553ce7
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/Puzzle.java
@@ -0,0 +1,100 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.NumberPicker;
+
+public class Puzzle extends AppCompatActivity {
+
+ private ImageView achievBox;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_puzzlewar);
+ Button checkButton = findViewById(R.id.CheckButton);
+
+ //Picker for TURING box
+ final NumberPicker PickerOne = findViewById(R.id.Picker1); //refer to picker number 1
+ String[] PickerOneLetters = {"A","B","C","E","P","T"}; //a string of letters
+ PickerOne.setMaxValue(5); //the string cannot have more than 6 spots (0-5)
+ PickerOne.setDisplayedValues(PickerOneLetters); //display the letters in picker 1
+
+ final NumberPicker PickerTwo = findViewById(R.id.Picker2);
+ String[] PickerTwoLetters = {"I", "U", "O", "B", "T", "I"};
+ PickerTwo.setMaxValue(5);
+ PickerTwo.setDisplayedValues(PickerTwoLetters);
+
+ final NumberPicker PickerThree = findViewById(R.id.Picker3);
+ String[] PickerThreeLetters = {"R", "Y", "V", "A", "B", "P"};
+ PickerThree.setMaxValue(5);
+ PickerThree.setDisplayedValues(PickerThreeLetters);
+
+ final NumberPicker PickerFour = findViewById(R.id.Picker4);
+ String[] PickerFourLetters = {"R", "Y", "V", "I", "O", "A"};
+ PickerFour.setMaxValue(5);
+ PickerFour.setDisplayedValues(PickerFourLetters);
+
+ final NumberPicker PickerFive = findViewById(R.id.Picker5);
+ String[] PickerFiveLetters = {"R", "Y", "V", "I", "S", "N"};
+ PickerFive.setMaxValue(5);
+ PickerFive.setDisplayedValues(PickerFiveLetters);
+
+ final NumberPicker PickerSix = findViewById(R.id.Picker6);
+ String[] PickerSixLetters = {"R", "Y", "V", "I", "G", "M"};
+ PickerSix.setMaxValue(5);
+ PickerSix.setDisplayedValues(PickerSixLetters);
+
+
+ achievBox = findViewById(R.id.achievementBox);
+
+ //Make sure that only when the pickers spell TURING it is possible to proceed
+ checkButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(PickerOne.getValue()==5 && PickerTwo.getValue()==1 && PickerThree.getValue()==0 && PickerFour.getValue()==3 && PickerFive.getValue()==5 && PickerSix.getValue()==4){
+
+ //Animates the fade in over 1500 milliseconds
+ achievBox.animate().alpha(1f).setDuration(1500);
+
+ //Adds a delay before the fade out animation
+ achievBox.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ achievBox.animate().alpha(0f).setDuration(1500);
+
+ //Adds another delay before going to the next page.
+ //This was the only way I could make the fade out animation happen while still going to the next page.
+ achievBox.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ nextPage();
+ }
+ }, 2000);
+ }
+ }, 3000);
+ }
+ }
+ });
+ }
+
+ public void nextPage(){
+ Intent intent = new Intent(this, EndScreen.class);
+ startActivity(intent);
+ }
+
+ //back to desktop
+ public void back(View view){
+ Intent intent = new Intent(this, DesktopWar.class);
+ startActivity(intent);
+ }
+
+}
diff --git a/rotate4/app/src/main/java/com/example/rotate4/Selection.java b/rotate4/app/src/main/java/com/example/rotate4/Selection.java
new file mode 100644
index 00000000..c556d77e
--- /dev/null
+++ b/rotate4/app/src/main/java/com/example/rotate4/Selection.java
@@ -0,0 +1,39 @@
+package com.example.rotate4;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+public class Selection extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+
+ System.out.println("Class Selection is working");
+ // Log.d("myTag", "This is my message");
+
+
+ //three first lines hide the bars, same in all activities
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getSupportActionBar().hide();
+ this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_selection);
+
+ }
+
+ public void startWar(View view){
+ Intent intent= new Intent(this, DesktopWar.class);
+ startActivity(intent);
+ }
+
+ public void startInt(View view){
+ Intent intent= new Intent(this, Desktop.class);
+ startActivity(intent);
+ }
+}
+
diff --git a/rotate4/app/src/main/res/anim/bounce.xml b/rotate4/app/src/main/res/anim/bounce.xml
new file mode 100644
index 00000000..51738ad2
--- /dev/null
+++ b/rotate4/app/src/main/res/anim/bounce.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/rotate4/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..1f6bb290
--- /dev/null
+++ b/rotate4/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rotate4/app/src/main/res/drawable/ach1.png b/rotate4/app/src/main/res/drawable/ach1.png
new file mode 100644
index 00000000..0083734b
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/ach1.png differ
diff --git a/rotate4/app/src/main/res/drawable/bombetro.png b/rotate4/app/src/main/res/drawable/bombetro.png
new file mode 100644
index 00000000..5fb7a8b3
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/bombetro.png differ
diff --git a/rotate4/app/src/main/res/drawable/bombetwo.png b/rotate4/app/src/main/res/drawable/bombetwo.png
new file mode 100644
index 00000000..b58377f8
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/bombetwo.png differ
diff --git a/rotate4/app/src/main/res/drawable/box.png b/rotate4/app/src/main/res/drawable/box.png
new file mode 100644
index 00000000..242b5e9b
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/box.png differ
diff --git a/rotate4/app/src/main/res/drawable/character.jpg b/rotate4/app/src/main/res/drawable/character.jpg
new file mode 100644
index 00000000..799e58ee
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/character.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/code.png b/rotate4/app/src/main/res/drawable/code.png
new file mode 100644
index 00000000..33463cae
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/code.png differ
diff --git a/rotate4/app/src/main/res/drawable/desktoptwo.png b/rotate4/app/src/main/res/drawable/desktoptwo.png
new file mode 100644
index 00000000..2ac5b029
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/desktoptwo.png differ
diff --git a/rotate4/app/src/main/res/drawable/desktopwar.png b/rotate4/app/src/main/res/drawable/desktopwar.png
new file mode 100644
index 00000000..dbbdc449
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/desktopwar.png differ
diff --git a/rotate4/app/src/main/res/drawable/eight.png b/rotate4/app/src/main/res/drawable/eight.png
new file mode 100644
index 00000000..12bba7ca
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/eight.png differ
diff --git a/rotate4/app/src/main/res/drawable/endscreen.png b/rotate4/app/src/main/res/drawable/endscreen.png
new file mode 100644
index 00000000..65319ff2
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/endscreen.png differ
diff --git a/rotate4/app/src/main/res/drawable/five.png b/rotate4/app/src/main/res/drawable/five.png
new file mode 100644
index 00000000..3670ad6e
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/five.png differ
diff --git a/rotate4/app/src/main/res/drawable/four.png b/rotate4/app/src/main/res/drawable/four.png
new file mode 100644
index 00000000..b867b9ad
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/four.png differ
diff --git a/rotate4/app/src/main/res/drawable/goalfailed.png b/rotate4/app/src/main/res/drawable/goalfailed.png
new file mode 100644
index 00000000..d8bf07b7
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/goalfailed.png differ
diff --git a/rotate4/app/src/main/res/drawable/goalsucces.png b/rotate4/app/src/main/res/drawable/goalsucces.png
new file mode 100644
index 00000000..b8b8bbcc
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/goalsucces.png differ
diff --git a/rotate4/app/src/main/res/drawable/hint_five.png b/rotate4/app/src/main/res/drawable/hint_five.png
new file mode 100644
index 00000000..8500ff42
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hint_five.png differ
diff --git a/rotate4/app/src/main/res/drawable/hint_four.png b/rotate4/app/src/main/res/drawable/hint_four.png
new file mode 100644
index 00000000..61a411c8
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hint_four.png differ
diff --git a/rotate4/app/src/main/res/drawable/hint_one.png b/rotate4/app/src/main/res/drawable/hint_one.png
new file mode 100644
index 00000000..f17cf4e6
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hint_one.png differ
diff --git a/rotate4/app/src/main/res/drawable/hint_three.png b/rotate4/app/src/main/res/drawable/hint_three.png
new file mode 100644
index 00000000..1674f2c3
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hint_three.png differ
diff --git a/rotate4/app/src/main/res/drawable/hint_two.png b/rotate4/app/src/main/res/drawable/hint_two.png
new file mode 100644
index 00000000..77a7fd34
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hint_two.png differ
diff --git a/rotate4/app/src/main/res/drawable/hintfive.jpg b/rotate4/app/src/main/res/drawable/hintfive.jpg
new file mode 100644
index 00000000..ab633a2b
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hintfive.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/hintfour.png b/rotate4/app/src/main/res/drawable/hintfour.png
new file mode 100644
index 00000000..91b0989f
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hintfour.png differ
diff --git a/rotate4/app/src/main/res/drawable/hintlast.jpg b/rotate4/app/src/main/res/drawable/hintlast.jpg
new file mode 100644
index 00000000..80e9e3c9
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hintlast.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/hintone.png b/rotate4/app/src/main/res/drawable/hintone.png
new file mode 100644
index 00000000..a46036b5
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hintone.png differ
diff --git a/rotate4/app/src/main/res/drawable/hintthree.png b/rotate4/app/src/main/res/drawable/hintthree.png
new file mode 100644
index 00000000..ed8f94e3
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/hintthree.png differ
diff --git a/rotate4/app/src/main/res/drawable/historical.png b/rotate4/app/src/main/res/drawable/historical.png
new file mode 100644
index 00000000..677c6276
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/historical.png differ
diff --git a/rotate4/app/src/main/res/drawable/ic_launcher_background.xml b/rotate4/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..0d025f9b
--- /dev/null
+++ b/rotate4/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rotate4/app/src/main/res/drawable/infowaroff.jpg b/rotate4/app/src/main/res/drawable/infowaroff.jpg
new file mode 100644
index 00000000..b023bad8
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/infowaroff.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/nohints.jpg b/rotate4/app/src/main/res/drawable/nohints.jpg
new file mode 100644
index 00000000..251f678c
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/nohints.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/nothingcode.png b/rotate4/app/src/main/res/drawable/nothingcode.png
new file mode 100644
index 00000000..55ae5d7d
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/nothingcode.png differ
diff --git a/rotate4/app/src/main/res/drawable/nothistorical.png b/rotate4/app/src/main/res/drawable/nothistorical.png
new file mode 100644
index 00000000..0ba04dfb
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/nothistorical.png differ
diff --git a/rotate4/app/src/main/res/drawable/one.png b/rotate4/app/src/main/res/drawable/one.png
new file mode 100644
index 00000000..da3b9f83
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/one.png differ
diff --git a/rotate4/app/src/main/res/drawable/pergoal.png b/rotate4/app/src/main/res/drawable/pergoal.png
new file mode 100644
index 00000000..52528ccc
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/pergoal.png differ
diff --git a/rotate4/app/src/main/res/drawable/poem.png b/rotate4/app/src/main/res/drawable/poem.png
new file mode 100644
index 00000000..3879fe66
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/poem.png differ
diff --git a/rotate4/app/src/main/res/drawable/qbg.png b/rotate4/app/src/main/res/drawable/qbg.png
new file mode 100644
index 00000000..34c5bc32
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/qbg.png differ
diff --git a/rotate4/app/src/main/res/drawable/selection.png b/rotate4/app/src/main/res/drawable/selection.png
new file mode 100644
index 00000000..ce4f51f1
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/selection.png differ
diff --git a/rotate4/app/src/main/res/drawable/seven.png b/rotate4/app/src/main/res/drawable/seven.png
new file mode 100644
index 00000000..deccda51
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/seven.png differ
diff --git a/rotate4/app/src/main/res/drawable/six.png b/rotate4/app/src/main/res/drawable/six.png
new file mode 100644
index 00000000..f59f9788
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/six.png differ
diff --git a/rotate4/app/src/main/res/drawable/somethingcode.png b/rotate4/app/src/main/res/drawable/somethingcode.png
new file mode 100644
index 00000000..6a3e2191
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/somethingcode.png differ
diff --git a/rotate4/app/src/main/res/drawable/start.png b/rotate4/app/src/main/res/drawable/start.png
new file mode 100644
index 00000000..f562f0ea
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/start.png differ
diff --git a/rotate4/app/src/main/res/drawable/target.jpg b/rotate4/app/src/main/res/drawable/target.jpg
new file mode 100644
index 00000000..7badd4f0
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/target.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/three.png b/rotate4/app/src/main/res/drawable/three.png
new file mode 100644
index 00000000..bbe79be6
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/three.png differ
diff --git a/rotate4/app/src/main/res/drawable/thursday.jpg b/rotate4/app/src/main/res/drawable/thursday.jpg
new file mode 100644
index 00000000..13a69eeb
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/thursday.jpg differ
diff --git a/rotate4/app/src/main/res/drawable/to.png b/rotate4/app/src/main/res/drawable/to.png
new file mode 100644
index 00000000..55003f26
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/to.png differ
diff --git a/rotate4/app/src/main/res/drawable/two.png b/rotate4/app/src/main/res/drawable/two.png
new file mode 100644
index 00000000..bbb9f60c
Binary files /dev/null and b/rotate4/app/src/main/res/drawable/two.png differ
diff --git a/rotate4/app/src/main/res/layout/activity_bombe.xml b/rotate4/app/src/main/res/layout/activity_bombe.xml
new file mode 100644
index 00000000..670af2c2
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_bombe.xml
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_desktop.xml b/rotate4/app/src/main/res/layout/activity_desktop.xml
new file mode 100644
index 00000000..9a8bbae1
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_desktop.xml
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_desktopwar.xml b/rotate4/app/src/main/res/layout/activity_desktopwar.xml
new file mode 100644
index 00000000..73917cf1
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_desktopwar.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_endscreen.xml b/rotate4/app/src/main/res/layout/activity_endscreen.xml
new file mode 100644
index 00000000..490034d7
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_endscreen.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_main.xml b/rotate4/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..691a4cea
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_puzzlewar.xml b/rotate4/app/src/main/res/layout/activity_puzzlewar.xml
new file mode 100644
index 00000000..fb6baafa
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_puzzlewar.xml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/activity_selection.xml b/rotate4/app/src/main/res/layout/activity_selection.xml
new file mode 100644
index 00000000..a283203d
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/activity_selection.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/layout/client.xml b/rotate4/app/src/main/res/layout/client.xml
new file mode 100644
index 00000000..ee78d5b6
--- /dev/null
+++ b/rotate4/app/src/main/res/layout/client.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/rotate4/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher.png b/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..898f3ed5
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..dffca360
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher.png b/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..64ba76f7
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..dae5e082
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..e5ed4659
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..14ed0af3
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..b0907cac
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..d8ae0315
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..2c18de9e
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..beed3cdd
Binary files /dev/null and b/rotate4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/rotate4/app/src/main/res/raw/epic.mp3 b/rotate4/app/src/main/res/raw/epic.mp3
new file mode 100644
index 00000000..5f742aa0
Binary files /dev/null and b/rotate4/app/src/main/res/raw/epic.mp3 differ
diff --git a/rotate4/app/src/main/res/raw/intellegence.mp4 b/rotate4/app/src/main/res/raw/intellegence.mp4
new file mode 100644
index 00000000..4e49e260
Binary files /dev/null and b/rotate4/app/src/main/res/raw/intellegence.mp4 differ
diff --git a/rotate4/app/src/main/res/raw/nothing.mp4 b/rotate4/app/src/main/res/raw/nothing.mp4
new file mode 100644
index 00000000..5f66ddcb
Binary files /dev/null and b/rotate4/app/src/main/res/raw/nothing.mp4 differ
diff --git a/rotate4/app/src/main/res/raw/something.mp4 b/rotate4/app/src/main/res/raw/something.mp4
new file mode 100644
index 00000000..1540d339
Binary files /dev/null and b/rotate4/app/src/main/res/raw/something.mp4 differ
diff --git a/rotate4/app/src/main/res/values/colors.xml b/rotate4/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..69b22338
--- /dev/null
+++ b/rotate4/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #008577
+ #00574B
+ #D81B60
+
diff --git a/rotate4/app/src/main/res/values/dimens.xml b/rotate4/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..59a0b0c4
--- /dev/null
+++ b/rotate4/app/src/main/res/values/dimens.xml
@@ -0,0 +1,3 @@
+
+ 16dp
+
diff --git a/rotate4/app/src/main/res/values/strings.xml b/rotate4/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..d029619e
--- /dev/null
+++ b/rotate4/app/src/main/res/values/strings.xml
@@ -0,0 +1,12 @@
+
+ rotate4
+ something2
+ Codename: Ultra
+ Start Game
+ Check
+ Click to proceed
+ Desktop2
+ Results
+ Finish
+ Alan Mathison Turing
+
diff --git a/rotate4/app/src/main/res/values/styles.xml b/rotate4/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..545b9c6d
--- /dev/null
+++ b/rotate4/app/src/main/res/values/styles.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rotate4/app/src/test/java/com/example/rotate4/ExampleUnitTest.java b/rotate4/app/src/test/java/com/example/rotate4/ExampleUnitTest.java
new file mode 100644
index 00000000..ba10c64b
--- /dev/null
+++ b/rotate4/app/src/test/java/com/example/rotate4/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.rotate4;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/rotate4/build.gradle b/rotate4/build.gradle
new file mode 100644
index 00000000..48947c37
--- /dev/null
+++ b/rotate4/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.1'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/rotate4/gradle.properties b/rotate4/gradle.properties
new file mode 100644
index 00000000..82618cec
--- /dev/null
+++ b/rotate4/gradle.properties
@@ -0,0 +1,15 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+
diff --git a/rotate4/gradle/wrapper/gradle-wrapper.jar b/rotate4/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..f6b961fd
Binary files /dev/null and b/rotate4/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/rotate4/gradle/wrapper/gradle-wrapper.properties b/rotate4/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..2cc58527
--- /dev/null
+++ b/rotate4/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Oct 24 14:32:44 CEST 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
diff --git a/rotate4/gradlew b/rotate4/gradlew
new file mode 100644
index 00000000..cccdd3d5
--- /dev/null
+++ b/rotate4/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/rotate4/gradlew.bat b/rotate4/gradlew.bat
new file mode 100644
index 00000000..f9553162
--- /dev/null
+++ b/rotate4/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/rotate4/settings.gradle b/rotate4/settings.gradle
new file mode 100644
index 00000000..e7b4def4
--- /dev/null
+++ b/rotate4/settings.gradle
@@ -0,0 +1 @@
+include ':app'