前提・実現したいこと
processingを使用したゲームを作成しています。
〇✕ゲームです。
ゲームをし終わったあともう一回したい時などにやり直してできるようにリセットボタン(ゲームの初期化)ができるようにしたいと考えています。
該当のソースコード
java
1int X, Y; 2int map[][]={{1,1,1},{1,1,1},{1,1,1}}; 3int turn = 0; 4 5void setup(){ 6 size(600,600); 7 background(255); 8 frameRate(12); 9 strokeWeight(2); 10 smooth(); 11 line(0, 200, width, 200); 12 line(0, 400, width, 400); 13 line(200, 0, 200, height); 14 line(400, 0, 400, height); 15} 16 17void draw(){ 18 myturn(); 19 PCturn(); 20} 21 22void myturn(){ 23 if (turn % 2 == 0){ 24 if(mousePressed == true){ 25 X = mouseX / 200; 26 Y = mouseY / 200; 27 if(map[Y][X] == 1) { 28 fill(255); 29 ellipse(X*200+100, Y*200+100, 150, 150); 30 map[Y][X]=2; 31 win(); 32 turn ++; 33 } 34 } 35 } 36} 37 38void randomCheck(){ 39 do{ 40 X = int(random(3)); 41 Y = int(random(3)); 42 }while(map[Y][X] != 1); 43 map[Y][X] = 3; 44 drawX(X, Y); 45} 46 47boolean reach(){ 48 int line = 1; 49 50 // vertical reach 51 for (X = 0; X < 3; X++){ 52 for (Y = 0; Y < 3; Y++){ 53 line *= map[Y][X]; 54 } 55 if(line == 9){ 56 for (Y = 0; Y < 3; Y ++){ 57 if(map[Y][X] == 1) return true; 58 } 59 } else if(line == 4){ 60 for (Y = 0; Y < 3; Y ++){ 61 if(map[Y][X] == 1) return true; 62 } 63 } 64 } 65 66 //horizontal reach 67 line = 1; 68 for (Y = 0; Y < 3; Y++){ 69 for (X = 0; X < 3; X++){ 70 line *= map[Y][X]; 71 } 72 if(line == 9){ 73 for (X = 0; X < 3; X ++){ 74 if(map[Y][X] == 1) return true; 75 } 76 } else if (line == 4){ 77 for (X = 0; X < 3; X ++){ 78 if(map[Y][X] == 1) return true; 79 } 80 } 81 } 82 83 // cross reach (right-down) 84 line = map[0][0] * map[1][1] * map[2][2]; 85 if(line == 9){ 86 for(int i = 0; i < 3; i++){ 87 if(map[i][i] == 1) { 88 X = i; 89 Y = i; 90 return true; 91 } 92 } 93 } else if (line == 4){ 94 for(int i = 0; i < 3; i++){ 95 if(map[i][i] == 1) { 96 X = i; 97 Y = i; 98 return true; 99 } 100 } 101 } 102 103 // cross reach (right-up) 104 line = map[2][0] * map[1][1] * map[0][2]; 105 if(line == 9){ 106 for(int i = 0; i < 3; i++){ 107 if(map[2-i][i] == 1) { 108 X = i; 109 Y = 2 - i; 110 return true; 111 } 112 } 113 } else if(line == 4){ 114 for(int i = 0; i < 3; i++){ 115 if(map[2-i][i] == 1) { 116 X = i; 117 Y = 2 - i; 118 return true; 119 } 120 } 121 } 122 123 return false; 124} 125 126void win(){ 127 textSize(100); 128 fill(0); 129 textAlign(CENTER, CENTER); 130 131 if ((map[0][0]*map[0][1]*map[0][2] == 8) || 132 (map[1][0]*map[1][1]*map[1][2] == 8) || 133 (map[2][0]*map[2][1]*map[2][2] == 8) || 134 (map[0][0]*map[1][0]*map[2][0] == 8) || 135 (map[0][1]*map[1][1]*map[2][1] == 8) || 136 (map[0][2]*map[1][2]*map[2][2] == 8) || 137 (map[0][0]*map[1][1]*map[2][2] == 8) || 138 (map[2][0]*map[1][1]*map[0][2] == 8)){ 139 text("You WIN‼", width/2, height/2); 140 noLoop(); 141 } 142 else if ((map[0][0]*map[0][1]*map[0][2] == 27) || 143 (map[1][0]*map[1][1]*map[1][2] == 27) || 144 (map[2][0]*map[2][1]*map[2][2] == 27) || 145 (map[0][0]*map[1][0]*map[2][0] == 27) || 146 (map[0][1]*map[1][1]*map[2][1] == 27) || 147 (map[0][2]*map[1][2]*map[2][2] == 27) || 148 (map[0][0]*map[1][1]*map[2][2] == 27) || 149 (map[2][0]*map[1][1]*map[0][2] == 27)){ 150 text("You LOSE;;", width/2, height/2); 151 noLoop(); 152 } 153 154 else if (turn >= 8){ 155 text("DRAW^-^", width/2, height/2); 156 noLoop(); 157 } 158} 159 160void PCturn(){ 161 if((turn % 2 == 1) && (turn < 9)){ 162 if(turn == 1){ 163 if(map[1][1] == 1){ 164 drawX(1, 1); 165 map[1][1] = 3; 166 } 167 else{ 168 drawX(0, 0); 169 map[0][0] = 3; 170 } 171 } 172 else { 173 if(reach()){ 174 drawX(X, Y); 175 map[Y][X] = 3; 176 } 177 else randomCheck(); 178 } 179 win(); 180 turn ++; 181 } 182} 183 184void drawX(int x, int y){ 185 line(x*200, y*200, x*200+200, y*200+200); 186 line(x*200+200, y*200, x*200, y*200+200); 187} 188 189void
試したこと
以前Greenowlさんの緑を救えというゲームを見て同じものを作成させていただきましたが、そのときに使用したゲームの初期化のところを参考に一度実行してみましたができなかったです。
一番最後にあるvoidにつながるように作成すればいいのでしょうか。
それとも別の変数を使用したほうがいいのでしょうか
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー