рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╣рдо 4 рдорд┐рдирдЯ рдореЗрдВ "рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░" рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдЫрд╡рд┐

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдкреЛрд╕реНрдЯ рдПрдХ рдЕрдиреБрднрд╡реА рдХреЛрдбрд░ рдореИрдХреА рдЪреЗрдЬрд╝ рдХреЗ рдореВрд▓ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬреЛ рди рдХреЗрд╡рд▓ рдорд╣рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╢реБрд░реБрдЖрддреА рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдПрдХ рдордЬреЗрджрд╛рд░ рдЦреЗрд▓ рд╣реИ, рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЗрд╕реЗ рдЦреЗрд▓рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рд╣реА рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВ?

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рдСрдирд▓рд╛рдЗрди рдкреЗрд╢рд╛ "рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдкреЗрд╢рд╛" ред

рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдЦреЗрд▓ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╣реА рд░реЛрдорд╛рдВрдЪрдХ рд╣реИред рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдореЗрдВ рдХреЛрдИ рдЪрд╛рд▓рд╛рдХ рдЧреЗрдордкреНрд▓реЗ рдореИрдХреЗрдирд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рд╡рд░реНрдЧреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдиреАрдЪреЗ рдХреЛрдИ рдЦрджрд╛рдиреЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ "рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░" рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред

рддреЛ рдпрд╣рд╛рдБ рд╣рдо рдЪрд▓рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЪрд░рдг рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

int gridW; // grid width int gridH; // grid height int numMines; // number of mines on the board int[][] mines; // entry is 1 for having a mine and 0 for not boolean[][] flags; // entry is true if you have flagged that spot boolean[][] revealed; // entry is true if that spot is revealed 

рдЗрд╕ рдЦрдВрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдБ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: int [] [] рдЦрд╛рдиреЛрдВ ред рдЦрджрд╛рди рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдПрдХ рдмреВрд▓рд┐рдпрди рдирд╣реАрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЦрджрд╛рдиреЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд░реАрдм рд╣реИрдВред

 int calcNear(int x, int y) { int i=0; for (int offsetX=-1; offsetX<=1; offsetX++) { for (int offsetY=-1; offsetY<=1; offsetY++) { i+=mines[offsetX+x][offsetY+y]; } } return i; } 

рдпрд╣ рдХреЛрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдЗрдЯ рдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреА рдЦрджрд╛рдиреЗрдВ рд╣реИрдВред рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:

 boolean outBounds(int x,int y){ return x<0||y<0||x>=gridW||y>=gridH; } int calcNear(int x, int y) { if(outBounds(x,y))return 0; int i=0; for (int offsetX=-1; offsetX<=1; offsetX++) { for (int offsetY=-1; offsetY<=1; offsetY++) { if (outBounds(offsetX+x, offsetY+y))continue; i+=mines[offsetX+x][offsetY+y]; } } return i; } 

рдЦреЗрд▓ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЦреБрдж рд╣реА рдмрд┐рдВрджреБ x, y рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рд╣реИред

 void reveal(int x, int y){ if(outBounds(x,y))return; if(revealed[x][y])return; revealed[x][y]=true; if(calcNear(x,y)!=0)return; reveal(x-1,y-1); reveal(x-1,y+1); reveal(x+1,y-1); reveal(x+1,y+1); reveal(x-1,y); reveal(x+1,y); reveal(x,y-1); reveal(x,y+1); } 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИ:

  • рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рдЕрдВрдд;
  • рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрдд;
  • рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ;
  • рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдкрд╛рд╕ рдмрдо рд╣реИ, рддреЛ рдЕрдВрдд;
  • рдпрджрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдП, рддреЛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рднреАрддрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд╛рдИ рдЧрдИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдХреЛрдИ рдмрдо рдирд╣реАрдВ рд╣реИрдВ, рдЖрд╕рдиреНрди рд╡рд░реНрдЧ рдЦреЛрд▓реЗрдВред

рдореВрд▓ рд░реВрдк рд╕реЗ, рдмрд╛рдХреА рдЦреЗрд▓ рдПрдХ рд╣реА рд╣реИред рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрдврд╝реЗрдВред

рджреГрд╢реНрдп

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдХрдард┐рди рднрд╛рдЧреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛ред

рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕реЗрд▓рд╕рд╛рдЗрдЬрд╝ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

 void settings(){ size(gridW*cellSize, gridH*cellSize); } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдЧреНрд░рд┐рдб рдбрдмреНрд▓реНрдпреВ рдПрдХреНрд╕ рдЧреНрд░рд┐рдб, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХрд╛ рдЖрдХрд╛рд░ рд╕реЗрд▓рд╕рд╛рдЗрдЬрд╝ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред

рдлрд┐рд░ рд╣рдо рдЪрд░ рдХреЛ рдЙрдирдХреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

 void setup(){ //initialize and clear the arrays mines=new int[gridW][gridH]; flags=new boolean[gridW][gridH]; revealed=new boolean[gridW][gridH]; for(int x=0;x<gridW;x++){ for(int y=0;y<gridH;y++){ mines[x][y]=0; flags[x][y]=false; revealed[x][y]=false; } } } 

рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
 //Place numMines mines on the grid void placeMines(){ int i=0; while(i<numMines){//We don't want mines to overlap, so while loop int x=int(random(gridW)); int y=int(random(gridH)); if(mines[x][y]==1)continue; mines[x][y]=1; i++; } } //Clear the mines void clearMines() { for (int x=0; x<gridW; x++) { for (int y=0; y<gridH; y++) { mines[x][y]=0; } } } 

рдФрд░ рдлрд┐рд░ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред

 //We don't want the first click to be a mine boolean firstClick=true; void mousePressed() { int x=int(mouseX/cellSize); int y=int(mouseY/cellSize); //Right-click is flagging or de-flagging a square if (mouseButton==RIGHT) { flags[x][y]=!flags[x][y]; return; } else {//left-click //Avoid making the first click a mine if (firstClick) { firstClick=false; do { clearMines(); placeMines(); } while (calcNear(x,y)!=0); } //Check for game loss if (mines[x][y]!=0) { println("Dang!"); exit(); } else {//If game not lost, reveal starting from that square reveal(x, y); } } } 

рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рд░реЛрд╣, рд╣рдо рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВред

 void draw() { background(0); //For each cell for (int x=0; x<gridW; x++) { for (int y=0; y<gridH; y++) { //The colors alternate for texture color col1=color(2*255/5); color col2=color(3*255/5); color txtColor=color(0); int near=calcNear(x, y); if (flags[x][y]) { col1=color(255, 0, 0); col2=color(4*255/5, 255/5, 255/5); } else if (revealed[x][y]) { col1=color(255/2); col2=color(255/2); } if (near==1)txtColor=color(255*1/4, 255*1/4, 255*3/4); if (near==2)txtColor=color(255*1/4, 255*3/4, 155*1/4); if (near==3)txtColor=color(255, 0, 0); if (near==4)txtColor=color(0, 0, 255); if (near==5)txtColor=color(255, 0, 0); boolean alternate=(x+y)%2==0; if (alternate) { fill(col2); stroke(col2); } else { fill(col1); stroke(col1); } //if(mines[x][y]>0){ //fill(0,255,0); //stroke(0,255,0); //} rect(x*cellSize, y*cellSize, cellSize, cellSize); //If there is a mine near this spot and it is revealed if (near>0&&revealed[x][y]) { fill(txtColor); noStroke(); textAlign(LEFT, TOP); textSize(cellSize); text(""+near, x*cellSize, y*cellSize); } } } } 

рдФрд░ рдпрд╣ рд╕рдм, рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ Minesweeper рд╣реИред

рдЦреЗрд▓ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ: рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдирд╢реЗ рдХреА рд▓рдд рд╣реИ!

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/hi425317/


All Articles