objects
in
Programming Questions
•
1 year ago
Hi,
Thought my code is long, my question is relatively simple
Im trying to make a four in a row game. I´ve define a board class, with an array that define the position of the game. There is a board object that is the actual board (the real board), that is the only one that is drawn. The other ones are posible boards that are used by the computer to calculate the best move.
There is a board method that is used to put a token in the game. Its called put and it actualized the position array.
When the computer calculates the best move, it put diferent tokens to figure out wich is the best, but it doesn´'t do that in the actual board but in others. An the program is drawing all the possibilities, even when Im not puting tokens in the actual boards. I can´t tell why, I've revised the aode many times.
This is the code
class evaluation{
boolean win;
int value;
evaluation(){
}
}
boolean win;
int value;
evaluation(){
}
}
class board {
int[][] pos = new int[7][6];
evaluation value;
boolean turn;
board(int [][] pos0){
pos=pos0;
}
void paint(){
fill (255,255,255);
int s = 80;//squares size
int x;
int y;
for(int i = 0; i < 7; i++){
for (int j = 1; j < 7; j++){
x = s*i;
y = s*j;
rect(x, y , 80, 80);
}
}
if (turn == false) {fill(255, 0, 0); } else {fill (0,0,255);}
ellipse(40 + 80 * opt, 40, 75, 75);
for(int i = 0; i < 7; i++){
for (int j = 0; j < 6; j++){
if (pos[i][j] == 1){
fill (255,0,0);
ellipse(40 + 80 * i, 40 + 80 * (j + 1), 75, 75);
}
if (pos[i][j] == -1){
fill (0,0,255);
ellipse(40 + 80 * i, 40 + 80 * (j + 1), 75, 75);
}
}
}
}
void put (int opt){
int i;
boolean moved = false;;
for ( i = 0; (i < 6) && (pos[opt][i] == 0); i++){}
if (i > 0){ i--; }
if (pos[opt][i] == 0){
moved = true;
if (turn == false){pos [opt][i] = 1;}
else {pos [opt][i] = -1;}
}
if (moved){turn= !turn;}
}
evaluation evaluate(){
evaluation note;
int qual = 0;
int gapr = 0;
int gapb = 0;
int rowr = 0;
int rowb = 0;
note= new evaluation ();
// vertical
for (int i = 6; i > -1; i--){
for (int j =5; j >-1; j--){
if (pos[i][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[i][j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
//println ("blue "+str(qual));
}
if (pos[i][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//horizontal
for ( int j = 0; j < 6; j++){
for ( int i = 0; i < 7; i++){
if (pos[i][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
//println ("red "+str(qual));
}
if (pos[i][j]== -1){
gapb++;
rowb++;
//println ("blue "+str(qual));
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
//println ("blue "+str(qual));
}
if (pos[i][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//diagonal 1
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j][j + i] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j][j + i]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j][j + i]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j+1][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j+1][j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j+1][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j][5-i-j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j][5-i-j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j][5-i-j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//diagonal 4
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j + 1 + i][5 - j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
println ("red "+str(qual));
}
if (pos[j + 1 + i][5 - j]== -1){
gapb++;
rowb++;
println ("blue "+str(qual));
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
println ("blue "+str(qual));
}
if (pos[j + 1 + i][5 - j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
println(qual);
note.value = qual;
return note;
}
}
int[][] posini = new int[7][6];
int[][] pos = new int[7][6];
evaluation value;
boolean turn;
board(int [][] pos0){
pos=pos0;
}
void paint(){
fill (255,255,255);
int s = 80;//squares size
int x;
int y;
for(int i = 0; i < 7; i++){
for (int j = 1; j < 7; j++){
x = s*i;
y = s*j;
rect(x, y , 80, 80);
}
}
if (turn == false) {fill(255, 0, 0); } else {fill (0,0,255);}
ellipse(40 + 80 * opt, 40, 75, 75);
for(int i = 0; i < 7; i++){
for (int j = 0; j < 6; j++){
if (pos[i][j] == 1){
fill (255,0,0);
ellipse(40 + 80 * i, 40 + 80 * (j + 1), 75, 75);
}
if (pos[i][j] == -1){
fill (0,0,255);
ellipse(40 + 80 * i, 40 + 80 * (j + 1), 75, 75);
}
}
}
}
void put (int opt){
int i;
boolean moved = false;;
for ( i = 0; (i < 6) && (pos[opt][i] == 0); i++){}
if (i > 0){ i--; }
if (pos[opt][i] == 0){
moved = true;
if (turn == false){pos [opt][i] = 1;}
else {pos [opt][i] = -1;}
}
if (moved){turn= !turn;}
}
evaluation evaluate(){
evaluation note;
int qual = 0;
int gapr = 0;
int gapb = 0;
int rowr = 0;
int rowb = 0;
note= new evaluation ();
// vertical
for (int i = 6; i > -1; i--){
for (int j =5; j >-1; j--){
if (pos[i][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[i][j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
//println ("blue "+str(qual));
}
if (pos[i][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//horizontal
for ( int j = 0; j < 6; j++){
for ( int i = 0; i < 7; i++){
if (pos[i][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
//println ("red "+str(qual));
}
if (pos[i][j]== -1){
gapb++;
rowb++;
//println ("blue "+str(qual));
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
//println ("blue "+str(qual));
}
if (pos[i][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//diagonal 1
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j][j + i] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j][j + i]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j][j + i]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j+1][j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j+1][j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j+1][j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j][5-i-j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
}
if (pos[j][5-i-j]== -1){
gapb++;
rowb++;
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
}
if (pos[j][5-i-j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
//diagonal 4
for(int i = 0; i < 3; i++){
for (int j = 0; j < 6 - i ; j++){
if (pos[j + 1 + i][5 - j] == 1){
gapr++;
rowr++;
if (gapb > 3){qual-= rowb;}
rowb = 0;
gapb = 0;
println ("red "+str(qual));
}
if (pos[j + 1 + i][5 - j]== -1){
gapb++;
rowb++;
println ("blue "+str(qual));
if (gapr > 3){qual+= rowr;}
rowr = 0;
gapr = 0;
println ("blue "+str(qual));
}
if (pos[j + 1 + i][5 - j]== 0){
gapb++;
gapr++;
}
}
if (gapr > 3) {qual+= rowr;}
if (gapb > 3) {qual-=rowb;}
gapr = 0;
gapb = 0;
rowr = 0;
rowb = 0;
}
println(qual);
note.value = qual;
return note;
}
}
int[][] posini = new int[7][6];
int opt =0;
boolean keyfree = true;
board act;
void setup(){
size(560,560);
act = new board (posini);
}
void draw(){
background (255);
act.paint();
//noLoop();
}
void keyPressed() {
board neo;
int[][] posneo = new int[7][6];
neo = new board(posneo);
int bestmove = 0;
evaluation bestval;
evaluation val;
val = new evaluation();
bestval = new evaluation();
if ((key == CODED)&&(keyfree = true)); {
keyfree = false;
if (keyCode == LEFT) {
opt--;
}
if (keyCode == RIGHT) {
opt++;
}
if (keyCode == DOWN){
act.put( opt);
for (int i = 0; i < 7; i++){
neo = act;
neo.put(i);
val = neo.evaluate();
if( val.value > bestval.value){
bestval.value = val.value;
bestmove = i;
}
}
act.put(bestmove);
}
}
}
boolean keyfree = true;
board act;
void setup(){
size(560,560);
act = new board (posini);
}
void draw(){
background (255);
act.paint();
//noLoop();
}
void keyPressed() {
board neo;
int[][] posneo = new int[7][6];
neo = new board(posneo);
int bestmove = 0;
evaluation bestval;
evaluation val;
val = new evaluation();
bestval = new evaluation();
if ((key == CODED)&&(keyfree = true)); {
keyfree = false;
if (keyCode == LEFT) {
opt--;
}
if (keyCode == RIGHT) {
opt++;
}
if (keyCode == DOWN){
act.put( opt);
for (int i = 0; i < 7; i++){
neo = act;
neo.put(i);
val = neo.evaluate();
if( val.value > bestval.value){
bestval.value = val.value;
bestmove = i;
}
}
act.put(bestmove);
}
}
}
void keyReleased(){
keyfree = true;
}
keyfree = true;
}
1