Advertisement
Guest User

Minceweeper

a guest
Jul 25th, 2014
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. int spacing = 20;
  2. int cells = 37;
  3. int size = 17;
  4. int selectedX, selectedY;
  5. int settingsX = 725;
  6. boolean mines [][] = new boolean [cells+2][cells+2];
  7. boolean tiles [][] = new boolean [cells][cells];
  8. boolean flags[][] = new boolean [cells][cells];
  9. int mineCount[][] = new int [cells][cells];
  10. boolean init = false;
  11. boolean gameover = false;
  12. boolean mouseUsed=true;
  13. PFont font1 = createFont("Ariel", 12, true);
  14. int brokenTiles = 30;
  15. int minesSet = 30;
  16. int setSize = 15;
  17. void setup() {
  18. for (int i=0;i<=size-1;i++) {
  19. for (int j=0;j<=size-1;j++) {
  20. mines[i][j] = false;
  21. tiles[i][j] = true;
  22. flags[i][j] = false;
  23. }
  24. }
  25. selectedX=0;
  26. selectedY=0;
  27. size(1000, 700);
  28. stroke(255);
  29. setMines(minesSet);
  30. breakTiles(brokenTiles);
  31. }
  32. void draw() {
  33. //println(brokenTiles);
  34. background(0);
  35. stroke(255);
  36. settings();
  37. grid(spacing, size-2);
  38. countMines();
  39. displayMines();
  40. displaytiles();
  41. displayFlags();
  42. playButton();
  43. if (mouseUsed) {
  44. for (int i=0;i<=size-1;i++) {
  45. for (int j=0;j<=size-1;j++) {
  46. if ((mouseX>i*spacing)&&(mouseX<i*spacing+spacing)&&(mouseY>j*spacing)&&(mouseY<j*spacing+spacing)) {
  47. selectedX=i;
  48. selectedY=j;
  49. if (selectedY<0) {
  50. selectedY=0;
  51. }
  52. if (selectedY>size-3) {
  53. selectedY=size-3;
  54. }
  55. if (selectedX<0) {
  56. selectedX=0;
  57. }
  58. if (selectedX>size-3) {
  59. selectedX=size-3;
  60. }
  61. }
  62. }
  63. }
  64. }
  65. selected(selectedX, selectedY);
  66. if (gameover) {
  67. gameOver();
  68. }
  69. }
  70. void grid(int spacing, int ncells) {
  71. stroke(128);
  72. for (int i=0;i<=size-2;i++) {
  73. line(0, i*spacing, spacing*ncells, i*spacing);
  74. line(i*spacing, 0, i*spacing, spacing*ncells);
  75. }
  76. }
  77. void selected(int x, int y) {
  78. x*=spacing;
  79. y*=spacing;
  80. stroke(100, 255, 0);
  81. line(x+3, y+3, x+6, y+3);
  82. line(x+3, y+3, x+3, y+6);
  83. line(x+spacing-3, y+3, x+spacing-6, y+3);
  84. line(x+spacing-3, y+3, x+spacing-3, y+6);
  85. line(x+3, y+spacing-3, x+3, y+spacing-6);
  86. line(x+3, y+spacing-3, x+6, y+spacing-3);
  87. line(x+spacing-3, y+spacing-3, x+spacing-6, y+spacing-3);
  88. line(x+spacing-3, y+spacing-3, x+spacing-3, y+spacing-6);
  89. }
  90. void breakTiles(int tempn) {
  91. int n = tempn;
  92. int tempx, tempy;
  93. while (n>0) {
  94. do {
  95. tempx = int(random(0, cells-1));
  96. tempy = int(random(0, cells-1));
  97. }
  98. while ( (mines[tempx][tempy])||(!tiles[tempx][tempy]));
  99. tiles[tempx][tempy] = false;
  100. n--;
  101. }
  102. }
  103. void mousePressed() {
  104. mouseUsed=true;
  105. if (gameover) {
  106. reset();
  107. }
  108. else {
  109. for (int i=0;i<=size-1;i++) {
  110. for (int j=0;j<=size-1;j++) {
  111. if ((mouseX>i*spacing)&&(mouseX<i*spacing+spacing)&&(mouseY>j*spacing)&&(mouseY<j*spacing+spacing)) {
  112. if (mouseButton == LEFT) {
  113. tiles[i+1][j+1] = false;
  114. if (mines[i+1][j+1]) {
  115. gameover=true;
  116. }
  117. }
  118. else {
  119. flags[i][j] = !flags[i][j];
  120. }
  121. }
  122. }
  123. }
  124. }
  125. if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
  126. reset();
  127. }
  128. }
  129. void keyPressed() {
  130. mouseUsed=false;
  131. switch(key) {
  132. case 'w':
  133. selectedY--;
  134. break;
  135. case 's':
  136. selectedY++;
  137. break;
  138. case 'a':
  139. selectedX--;
  140. break;
  141. case 'd':
  142. selectedX++;
  143. break;
  144. }
  145. if (key == 'e') {
  146. flags[selectedX][selectedY] = !flags[selectedX][selectedY];
  147. }
  148. if (key == 'n') {
  149. reset();
  150. }
  151. if (key == ' ') {
  152. if (init = false) {
  153. reset();
  154. init = true;
  155. }
  156. tiles[selectedX+1][selectedY+1] = false;
  157. if (mines[selectedX+1][selectedY+1]) {
  158. gameover=true;
  159. }
  160. }
  161. if (selectedY<0) {
  162. selectedY=0;
  163. }
  164. if (selectedY>size-3) {
  165. selectedY=size-3;
  166. }
  167. if (selectedX<0) {
  168. selectedX=0;
  169. }
  170. if (selectedX>size-3) {
  171. selectedX=size-3;
  172. }
  173. }
  174. void setMines(int nmines) {
  175. int n = nmines;
  176. int tempx, tempy;
  177. while (n>0) {
  178. do {
  179. tempx = int(random(1, size-1));
  180. tempy = int(random(1, size-1));
  181. }
  182. while ( (tempx==selectedX+1)&&(tempy==selectedY+1));
  183. if (!mines[tempx][tempy]) {
  184. mines[tempx][tempy] = true;
  185. n--;
  186. }
  187. }
  188. }
  189. void clearMines() {
  190. for (int i=0;i<=size-1;i++) {
  191. for (int j=0;j<=size-1;j++) {
  192. mines[i][j] = false;
  193. }
  194. }
  195. }
  196. void displayMines() {
  197. for (int i=1;i<=size-2;i++) {
  198. for (int j=1;j<=size-2;j++) {
  199. if (mines[i][j]) {
  200. noStroke();
  201. fill(255, 0, 0);
  202. ellipse((i-1)*spacing+spacing/2+1, (j-1)*spacing+spacing/2+1, 10, 10);
  203. }
  204. }
  205. }
  206. }
  207. void displaytiles() {
  208. rectMode(CENTER);
  209. fill(51);
  210. for (int i=1;i<=size-2;i++) {
  211. for (int j=1;j<=size-2;j++) {
  212. if (tiles[i][j]) {
  213. rect((i-1)*spacing+spacing/2+1, (j-1)*spacing+spacing/2+1, spacing-4, spacing-4);
  214. }
  215. }
  216. }
  217. }
  218. void countMines() {
  219. for (int i=1;i<=size-2;i++) {
  220. for (int j=1;j<=size-2;j++) {
  221. int count=0;
  222. //-----
  223. if (mines[i-1][j-1]) {
  224. count++;
  225. }
  226. if (mines[i][j-1]) {
  227. count++;
  228. }
  229. if (mines[i+1][j-1]) {
  230. count++;
  231. }
  232. if (mines[i-1][j]) {
  233. count++;
  234. }
  235. if (mines[i+1][j]) {
  236. count++;
  237. }
  238. if (mines[i-1][j+1]) {
  239. count++;
  240. }
  241. if (mines[i][j+1]) {
  242. count++;
  243. }
  244. if (mines[i+1][j+1]) {
  245. count++;
  246. }
  247. mineCount[i][j] = count;
  248. textAlign(CENTER, CENTER);
  249. fill(255);
  250. if (!mines[i][j]) {
  251. textFont(font1, 12);
  252. colorMode(HSB,360,1,1);
  253. switch(mineCount[i][j]){
  254. case 1: fill(210,1,1); break;
  255. case 2: fill(180,1,1); break;
  256. case 3: fill(150,1,1); break;
  257. case 4: fill(120,1,1); break;
  258. case 5: fill(90,1,1); break;
  259. case 6: fill(60,1,1); break;
  260. case 7: fill(30,1,1); break;
  261. case 8: fill(0,1,1); break;
  262. }
  263. text(mineCount[i][j], i*spacing-spacing/2, j*spacing-spacing/2);
  264. colorMode(RGB,255);
  265. }
  266. }
  267. }
  268. }
  269. void settings(){
  270. stroke(128);
  271. line(settingsX,0,settingsX,height);
  272. brokenTiles = slider(width-250,100,brokenTiles,"Set broken tiles",200,200);
  273. minesSet = slider(width-250,200,minesSet,"Set mine count",200,200);
  274. setSize = slider(width-250,300,setSize,"Set grid Size",200,35);
  275. if(sq(setSize)<=minesSet){
  276. minesSet=(int(sq(setSize)));
  277. }
  278. if(sq(setSize)<=brokenTiles){
  279. brokenTiles=(int(sq(setSize)));
  280. }
  281. if(sq(setSize)-minesSet<brokenTiles){
  282. brokenTiles = int(sq(setSize)-minesSet);
  283. }
  284. }
  285. int slider(int X,int Y,int variable,String name,int lineLength,int range){
  286. textAlign(LEFT);
  287. fill(128);
  288. textFont(font1,12);
  289. text(name,X,Y-20);
  290. stroke(128);
  291. line(X,Y,X+lineLength,Y);
  292. if(mousePressed){
  293. if((mouseX>X)&&(mouseX<X+lineLength)&&(mouseY>Y-10)&&(mouseY<Y+10)){
  294. variable=round(float((mouseX-X))/lineLength*range);
  295. }
  296. if((mouseX>=X+lineLength)&&(mouseY>Y-10)&&(mouseY<Y+10)){
  297. variable=range;
  298. }
  299. if((mouseX<=X)&&(mouseX>settingsX)&&(mouseY>Y-10)&&(mouseY<Y+10)){
  300. variable=0;
  301. }
  302. }
  303. text(variable,X,Y+20);
  304. stroke(128,128);
  305. strokeWeight(4);
  306. line(X+variable*lineLength/range,Y+10,X+variable*lineLength/range,Y-10);
  307. strokeWeight(1);
  308. println(variable);
  309. return variable;
  310. }
  311. void resetTiles() {
  312. for (int i=0;i<=size-1;i++) {
  313. for (int j=0;j<=size-1;j++) {
  314. tiles[i][j] = true;
  315. flags[i][j] = false;
  316. }
  317. }
  318. }
  319. void reset() {
  320. size=setSize+2;
  321. init = false;
  322. gameover=false;
  323. clearMines();
  324. setMines(minesSet);
  325. resetTiles();
  326. breakTiles(brokenTiles);
  327. }
  328. void gameOver() {
  329. for (int i=0;i<=size-1;i++) {
  330. for (int j=0;j<=size-1;j++) {
  331. tiles[i][j] = false;
  332. }
  333. }
  334. fill(255, 0, 0);
  335. textFont(font1, 30);
  336. textAlign(CENTER, CENTER);
  337. text("you're loose", spacing*cells/2, spacing*cells+10);
  338. }
  339. void displayFlags() {
  340. stroke(00, 255, 0);
  341. fill(100, 255, 0);
  342. for (int i=0;i<=size-1;i++) {
  343. for (int j=0;j<=size-1;j++) {
  344. if (flags[i][j]) {
  345. //rect(i*spacing+spacing/2,j*spacing+spacing/2,4,4);
  346. 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);
  347. line(i*spacing+spacing/2+3, j*spacing+spacing-9, i*spacing+spacing/2+3, j*spacing+spacing-3);
  348. }
  349. }
  350. }
  351. }
  352. void playButton(){
  353. noFill();
  354. stroke(128);
  355. if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
  356. stroke(255);
  357. }
  358. rectMode(CORNER);
  359. rect(750,height-300,100,25);
  360. fill(128);
  361. if((mouseX>750)&&(mouseX<850)&&(mouseY>height-300)&&(mouseY<height-275)){
  362. fill(255);
  363. }
  364. text("PLAY",800,height-287.5);
  365. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement