Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int spacing = 20;
- int cells = 37;
- int size = 17;
- int selectedX, selectedY;
- int settingsX = 725;
- boolean mines [][] = new boolean [cells+2][cells+2];
- boolean tiles [][] = new boolean [cells][cells];
- boolean flags[][] = new boolean [cells][cells];
- int mineCount[][] = new int [cells][cells];
- boolean init = false;
- boolean gameover = false;
- boolean mouseUsed=true;
- PFont font1 = createFont("Ariel", 12, true);
- int brokenTiles = 30;
- int minesSet = 30;
- int setSize = 15;
- void setup() {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- mines[i][j] = false;
- tiles[i][j] = true;
- flags[i][j] = false;
- }
- }
- selectedX=0;
- selectedY=0;
- size(1000, 700);
- stroke(255);
- setMines(minesSet);
- breakTiles(brokenTiles);
- }
- void draw() {
- //println(brokenTiles);
- background(0);
- stroke(255);
- settings();
- grid(spacing, size-2);
- countMines();
- displayMines();
- displaytiles();
- displayFlags();
- playButton();
- if (mouseUsed) {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- if ((mouseX>i*spacing)&&(mouseX<i*spacing+spacing)&&(mouseY>j*spacing)&&(mouseY<j*spacing+spacing)) {
- selectedX=i;
- selectedY=j;
- if (selectedY<0) {
- selectedY=0;
- }
- if (selectedY>size-3) {
- selectedY=size-3;
- }
- if (selectedX<0) {
- selectedX=0;
- }
- if (selectedX>size-3) {
- selectedX=size-3;
- }
- }
- }
- }
- }
- selected(selectedX, selectedY);
- if (gameover) {
- gameOver();
- }
- }
- void grid(int spacing, int ncells) {
- stroke(128);
- for (int i=0;i<=size-2;i++) {
- line(0, i*spacing, spacing*ncells, i*spacing);
- line(i*spacing, 0, i*spacing, spacing*ncells);
- }
- }
- void selected(int x, int y) {
- x*=spacing;
- y*=spacing;
- stroke(100, 255, 0);
- line(x+3, y+3, x+6, y+3);
- line(x+3, y+3, x+3, y+6);
- line(x+spacing-3, y+3, x+spacing-6, y+3);
- line(x+spacing-3, y+3, x+spacing-3, y+6);
- line(x+3, y+spacing-3, x+3, y+spacing-6);
- line(x+3, y+spacing-3, x+6, y+spacing-3);
- line(x+spacing-3, y+spacing-3, x+spacing-6, y+spacing-3);
- line(x+spacing-3, y+spacing-3, x+spacing-3, y+spacing-6);
- }
- void breakTiles(int tempn) {
- int n = tempn;
- int tempx, tempy;
- while (n>0) {
- do {
- tempx = int(random(0, cells-1));
- tempy = int(random(0, cells-1));
- }
- while ( (mines[tempx][tempy])||(!tiles[tempx][tempy]));
- tiles[tempx][tempy] = false;
- n--;
- }
- }
- void mousePressed() {
- mouseUsed=true;
- if (gameover) {
- reset();
- }
- else {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- if ((mouseX>i*spacing)&&(mouseX<i*spacing+spacing)&&(mouseY>j*spacing)&&(mouseY<j*spacing+spacing)) {
- if (mouseButton == LEFT) {
- tiles[i+1][j+1] = false;
- if (mines[i+1][j+1]) {
- gameover=true;
- }
- }
- else {
- flags[i][j] = !flags[i][j];
- }
- }
- }
- }
- }
- if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
- reset();
- }
- }
- void keyPressed() {
- mouseUsed=false;
- switch(key) {
- case 'w':
- selectedY--;
- break;
- case 's':
- selectedY++;
- break;
- case 'a':
- selectedX--;
- break;
- case 'd':
- selectedX++;
- break;
- }
- if (key == 'e') {
- flags[selectedX][selectedY] = !flags[selectedX][selectedY];
- }
- if (key == 'n') {
- reset();
- }
- if (key == ' ') {
- if (init = false) {
- reset();
- init = true;
- }
- tiles[selectedX+1][selectedY+1] = false;
- if (mines[selectedX+1][selectedY+1]) {
- gameover=true;
- }
- }
- if (selectedY<0) {
- selectedY=0;
- }
- if (selectedY>size-3) {
- selectedY=size-3;
- }
- if (selectedX<0) {
- selectedX=0;
- }
- if (selectedX>size-3) {
- selectedX=size-3;
- }
- }
- void setMines(int nmines) {
- int n = nmines;
- int tempx, tempy;
- while (n>0) {
- do {
- tempx = int(random(1, size-1));
- tempy = int(random(1, size-1));
- }
- while ( (tempx==selectedX+1)&&(tempy==selectedY+1));
- if (!mines[tempx][tempy]) {
- mines[tempx][tempy] = true;
- n--;
- }
- }
- }
- void clearMines() {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- mines[i][j] = false;
- }
- }
- }
- void displayMines() {
- for (int i=1;i<=size-2;i++) {
- for (int j=1;j<=size-2;j++) {
- if (mines[i][j]) {
- noStroke();
- fill(255, 0, 0);
- ellipse((i-1)*spacing+spacing/2+1, (j-1)*spacing+spacing/2+1, 10, 10);
- }
- }
- }
- }
- void displaytiles() {
- rectMode(CENTER);
- fill(51);
- for (int i=1;i<=size-2;i++) {
- for (int j=1;j<=size-2;j++) {
- if (tiles[i][j]) {
- rect((i-1)*spacing+spacing/2+1, (j-1)*spacing+spacing/2+1, spacing-4, spacing-4);
- }
- }
- }
- }
- void countMines() {
- for (int i=1;i<=size-2;i++) {
- for (int j=1;j<=size-2;j++) {
- int count=0;
- //-----
- if (mines[i-1][j-1]) {
- count++;
- }
- if (mines[i][j-1]) {
- count++;
- }
- if (mines[i+1][j-1]) {
- count++;
- }
- if (mines[i-1][j]) {
- count++;
- }
- if (mines[i+1][j]) {
- count++;
- }
- if (mines[i-1][j+1]) {
- count++;
- }
- if (mines[i][j+1]) {
- count++;
- }
- if (mines[i+1][j+1]) {
- count++;
- }
- mineCount[i][j] = count;
- textAlign(CENTER, CENTER);
- fill(255);
- if (!mines[i][j]) {
- textFont(font1, 12);
- colorMode(HSB,360,1,1);
- switch(mineCount[i][j]){
- case 1: fill(210,1,1); break;
- case 2: fill(180,1,1); break;
- case 3: fill(150,1,1); break;
- case 4: fill(120,1,1); break;
- case 5: fill(90,1,1); break;
- case 6: fill(60,1,1); break;
- case 7: fill(30,1,1); break;
- case 8: fill(0,1,1); break;
- }
- text(mineCount[i][j], i*spacing-spacing/2, j*spacing-spacing/2);
- colorMode(RGB,255);
- }
- }
- }
- }
- void settings(){
- stroke(128);
- line(settingsX,0,settingsX,height);
- brokenTiles = slider(width-250,100,brokenTiles,"Set broken tiles",200,200);
- minesSet = slider(width-250,200,minesSet,"Set mine count",200,200);
- setSize = slider(width-250,300,setSize,"Set grid Size",200,35);
- if(sq(setSize)<=minesSet){
- minesSet=(int(sq(setSize)));
- }
- if(sq(setSize)<=brokenTiles){
- brokenTiles=(int(sq(setSize)));
- }
- if(sq(setSize)-minesSet<brokenTiles){
- brokenTiles = int(sq(setSize)-minesSet);
- }
- }
- int slider(int X,int Y,int variable,String name,int lineLength,int range){
- textAlign(LEFT);
- fill(128);
- textFont(font1,12);
- text(name,X,Y-20);
- stroke(128);
- line(X,Y,X+lineLength,Y);
- if(mousePressed){
- if((mouseX>X)&&(mouseX<X+lineLength)&&(mouseY>Y-10)&&(mouseY<Y+10)){
- variable=round(float((mouseX-X))/lineLength*range);
- }
- if((mouseX>=X+lineLength)&&(mouseY>Y-10)&&(mouseY<Y+10)){
- variable=range;
- }
- if((mouseX<=X)&&(mouseX>settingsX)&&(mouseY>Y-10)&&(mouseY<Y+10)){
- variable=0;
- }
- }
- text(variable,X,Y+20);
- stroke(128,128);
- strokeWeight(4);
- line(X+variable*lineLength/range,Y+10,X+variable*lineLength/range,Y-10);
- strokeWeight(1);
- println(variable);
- return variable;
- }
- void resetTiles() {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- tiles[i][j] = true;
- flags[i][j] = false;
- }
- }
- }
- void reset() {
- size=setSize+2;
- init = false;
- gameover=false;
- clearMines();
- setMines(minesSet);
- resetTiles();
- breakTiles(brokenTiles);
- }
- void gameOver() {
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- tiles[i][j] = false;
- }
- }
- fill(255, 0, 0);
- textFont(font1, 30);
- textAlign(CENTER, CENTER);
- text("you're loose", spacing*cells/2, spacing*cells+10);
- }
- void displayFlags() {
- stroke(00, 255, 0);
- fill(100, 255, 0);
- for (int i=0;i<=size-1;i++) {
- for (int j=0;j<=size-1;j++) {
- if (flags[i][j]) {
- //rect(i*spacing+spacing/2,j*spacing+spacing/2,4,4);
- triangle(i*spacing+spacing/3, j*spacing+spacing/2-3, i*spacing+spacing/2+3, j*spacing+5, i*spacing+spacing/2+3, j*spacing+spacing-10);
- line(i*spacing+spacing/2+3, j*spacing+spacing-9, i*spacing+spacing/2+3, j*spacing+spacing-3);
- }
- }
- }
- }
- void playButton(){
- noFill();
- stroke(128);
- if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
- stroke(255);
- }
- rectMode(CORNER);
- rect(750,height-300,100,25);
- fill(128);
- if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
- fill(255);
- }
- text("PLAY",800,height-287.5);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement