app/manifests/AndroidManifest.xml - to force orientation
app/res/drawable - pictures
There are a number of colour images (one of them is a house). Some are, in fact, not used as I was allowing for more hazrds but decided they were unecessary.
app/res/mipmap/ic_launcher.png/ - icon for launching app
app/res/values/strings.xml - strings
Flood!Tap above to direct water from pale to dark blueSuccess! Moves=You have flooded the house! Tap on NEWnewquicksloweasymediumhardervery hard
app/res/layout/activity_main.xml - screen format
app/java/com.(the project name)/MainActivity - main code for app
package com.edkins.flood;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
public static int colourNum = 6;
public static int colourType = -1;
public static int floodWidth = 12;
public static int floodSize = floodWidth * floodWidth;
public static int difficulty = 1;
public static int count = 0;
public static int ok;
public static int finish;
public static int fail;
public static int [] tile = new int [400];
static Random myRand = new Random();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RadioButton size = (RadioButton) findViewById(R.id.quick);
size.setChecked(true);
floodWidth = 12;
floodSize = floodWidth * floodWidth;
RadioButton acc = (RadioButton) findViewById(R.id.easy);
acc.setChecked(true);
difficulty = 1;
GridView colour = (GridView) findViewById(R.id.colourView);
colour.setNumColumns(colourNum);
colour.setAdapter(new ImageColour(this));
colour.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView> parent, View v,
int position, long id) {
processColourClick(position);
}
});
setUp();
GridView tile = (GridView) findViewById(R.id.tileView);
tile.setNumColumns(floodWidth);
tile.setAdapter(new ImageTile(this));
tile.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView> parent, View v,
int position, long id) {
Toast.makeText(MainActivity.this, "Do not tap here!", Toast.LENGTH_SHORT).show();
}
});
}
public void processColourClick(int position) {
if (fail == 1 || finish == 1) {return;}
colourType = position + 10;
count++;
finish=0;
fail=0;
ok=1;
while (ok==1) {
ok = 0;
for (int i = 0; i < floodSize; i++) {
if (tile [i]==0) {
int y = i / floodWidth;
int x = i % floodWidth;
checkNext(x, y - 1);
checkNext(x, y + 1);
checkNext(x - 1, y);
checkNext(x + 1, y);
}
}
}
if (fail == 1) {
TextView finish = (TextView) findViewById(R.id.message);
finish.setText(R.string.failure);
}
else if (finish == 1) {hooray();}
redo();
}
public void checkNext(int x, int y) {
if (x<0 || x>=floodWidth || y<0 || y>=floodWidth) {return;}
int j = y*floodWidth + x;
if (tile [j]==colourType) {
tile [j] = 0;
ok = 1;
}
else if (tile [j]==1) {finish=1;}
else if (tile [j]==2) {fail=1;}
}
public void setUp() {
colourType = -1;
fail = 0;
finish = 0;
TextView newMessage = (TextView) findViewById(R.id.message);
newMessage.setText(R.string.howTo);
floodSize = floodWidth * floodWidth;
count = 0;
for (int i=0; i12) {
h0 = h0 + floodWidth;
h1 = h1 + 1;
h2 = h2 - floodWidth;
h3 = h3 - 1;
}
r = myRand.nextInt(2);
if (start==c0 && r==0) {end=c1; house=h0; tile[h2]=2;}
else if (start==c0 && r==1) {end=c3; house=h1; tile[h3]=2;}
else if (start==c1 && r==0) {end=c2; house=h1; tile[h3]=2;}
else if (start==c1 && r==1) {end=c0; house=h0; tile[h2]=2;}
else if (start==c2 && r==0) {end=c3; house=h0; tile[h2]=2;}
else if (start==c2 && r==1) {end=c1; house=h1; tile[h3]=2;}
else if (start==c3 && r==0) {end=c0; house=h1; tile[h3]=2;}
else if (start==c3 && r==1) {end=c2; house=h0; tile[h2]=2;}
}
tile[start]=0;
tile[end]=1;
if (difficulty > 1) {tile[house]=2;}
}
public int wobble(int position, int xi, int yi) {
int x = position % floodWidth;
int y = position / floodWidth;
int amount = 3;
if (floodWidth>12) {amount = 5;}
x = x + xi * myRand.nextInt(amount);
y = y + yi * myRand.nextInt(amount);
return x + floodWidth * y;
}
public void hooray() {
String str=getString(R.string.finished)+count;
TextView finish = (TextView) findViewById(R.id.message);
finish.setText(str);
for (int i=0; i
app/java/com.(the project name)/ImageColour - code for colour gridview - a new file
package com.edkins.flood;
import ...
public class ImageColour extends BaseAdapter {
private AppCompatActivity mContext;
public ImageColour(AppCompatActivity c) {mContext = c;}
public int getCount() {return MainActivity.colourNum;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
// create new ImageView for palette
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
}
else {
imageView = (ImageView) convertView;
}
// initialise the view element (to one of the colours)
imageView.setImageResource(MainActivity.colour[position+10]);
return imageView;
}
}
app/java/com.(the project name)/ImageTile - code for tile gridview - a new file
package com.edkins.flood;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImageTile extends BaseAdapter {
private AppCompatActivity mContext;
public ImageTile(AppCompatActivity c) {mContext = c;}
public int getCount() {return MainActivity.floodSize;}
public Object getItem(int position) {return null;}
public long getItemId(int position) {return 0;}
// create new ImageView for tile
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
GridView tileVw = (GridView) mContext.findViewById(R.id.tileView);
int w = tileVw.getWidth() / MainActivity.floodWidth;
imageView.setLayoutParams(new GridView.LayoutParams(w, w));
}
else {
imageView = (ImageView) convertView;
}
int sub = MainActivity.tile[position];
imageView.setImageResource(MainActivity.colour[sub]);
return imageView;
}
}
Index to my other websites