рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдкреЛрд╕реНрдЯ рдПрдХ рдЕрдиреБрднрд╡реА рдХреЛрдбрд░ рдореИрдХреА рдЪреЗрдЬрд╝ рдХреЗ
рдореВрд▓ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬреЛ рди рдХреЗрд╡рд▓ рдорд╣рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╢реБрд░реБрдЖрддреА рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдПрдХ рдордЬреЗрджрд╛рд░ рдЦреЗрд▓ рд╣реИ, рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЗрд╕реЗ рдЦреЗрд▓рддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рд╣реА рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВ?
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рдСрдирд▓рд╛рдЗрди рдкреЗрд╢рд╛ "рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдкреЗрд╢рд╛" ред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдЦреЗрд▓ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╣реА рд░реЛрдорд╛рдВрдЪрдХ рд╣реИред рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдореЗрдВ рдХреЛрдИ рдЪрд╛рд▓рд╛рдХ рдЧреЗрдордкреНрд▓реЗ рдореИрдХреЗрдирд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдмрд╕ рд╡рд░реНрдЧреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдиреАрдЪреЗ рдХреЛрдИ рдЦрджрд╛рдиреЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░ "рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░" рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ
рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ
рдХрд░реЗрдВ ред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
рддреЛ рдпрд╣рд╛рдБ рд╣рдо рдЪрд▓рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЪрд░рдг рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
int gridW;
рдЗрд╕ рдЦрдВрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдБ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ:
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(){
рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдФрд░ рдлрд┐рд░ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред
рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рд░реЛрд╣, рд╣рдо рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВред
void draw() { background(0);
рдФрд░ рдпрд╣ рд╕рдм, рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ Minesweeper рд╣реИред
рдЦреЗрд▓ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ: рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдирд╢реЗ рдХреА рд▓рдд рд╣реИ!
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: