472,342 Members | 2,553 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,342 software developers and data experts.

Urgent Help Required by Implementing a ConnectFour Game

34
Hi all,

I am a student and I have a project due 20th of this month, I mean May 20, 2007 after 8 days. The project is about creating a Connect Four Game. I have found some code examples on the internet which helped me little bit. But there are lot of problems I am facing developing the whole game. I have drawn the Board and the two players can play. The players numbers can fill the board, but I have problem implementing the winner for the game. I need to implement the hasWon() method for Horizontal win, Vertical win and Diagonal win. I also found some code examples on the net but I was unable to make it working. I have 5 classes and one interface which I m implementing. The main problem is how to implement the hasWon() method in the PlayGame class below with Horizontal, vertical and diagonal moves.


Sorry there is so much code.

This the interface I must implement, but now I am only implementing the int move() of this interface. I will implement the rest later after solving the winner problem with your help.

Interface code..............
interface Player {
void init (Boolean color);
String name ();
int move ();
void inform (int i);

}

Player1 class......................

import java.util.*;
import java.io.*;
import javax.swing.*;





public class Player1 implements Player
{

public Player1()
{}
public int move()
{

Scanner scan = new Scanner(System.in);
// BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
int player1;
System.out.println ("What is your Number, player 1?");
player1 = scan.nextInt();
System.out.println ("Hey number"+player1+" are you prepared to CONNECT FOUR");
System.out.println();
return player1;

//Player.move();
//return player1;

}//end move method




public void init (Boolean color)
{}
public void inform (int i)
{}


public String name()
{
return "Koonda";
}

}//end player1 class




Player2 class...........................

import java.util.*;
import java.io.*;
import javax.swing.*;





public class Player2 implements Player
{

public int move()
{

//int cup0,cup1,cup2,cup3,cup4,cup5,cup6;
// cup0=5;cup1=5;cup2=5;cup3=5;cup4=5;cup5=5;cup6=5;

//int num1, num2;
Scanner scan = new Scanner(System.in);
// BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
int player2;
System.out.println ("What is your Number, player 2?");
player2 = scan.nextInt();
System.out.println ("Hey "+player2+" are you prepared to CONNECT FOUR");
System.out.println();
//return player1;




return player2;

}//end move method




public void init (Boolean color)
{}
public void inform (int i)
{}


public String name()
{
return "malook";
}

}//end player1 class


PlayGame class which contains all the functionality..................................... ....................


import java.util.*;
import java.io.*;
import javax.swing.*;


public class PlayGame
{
//Player player1;
//Player player2;
int [][]ConnectFourArray;
boolean status;
int winner;
int player1;
int player2;
public PlayGame()
{
//this.player1 = player1;
//this.player2 = player2;
}

public void StartGame()
{

try{
// int X = 0, Y = 0;
//int value;
int cup0,cup1,cup2,cup3,cup4,cup5,cup6;
cup0=5;cup1=5;cup2=5;cup3=5;cup4=5;cup5=5;cup6=5;
int[][] ConnectFourArray = new int[6][7];
int num1, num2;
for(int limit=21;limit!=0;limit--)
{
BufferedReader selecter = new BufferedReader (new InputStreamReader(System.in));
String column1;
System.out.println();
for ( int row=0; row < ConnectFourArray.length; row++ ){
System.out.print("Row " + row + ": ");
for ( int col=0; col < ConnectFourArray[row].length; col++ )
System.out.print( ConnectFourArray[row][col] + " ");
System.out.println();
}
System.out.println();
System.out.println ("Please Select a column of 0 through 6 ");
column1 = selecter.readLine();
num1= Integer.parseInt(column1);
System.out.println();

if (num1==0){
ConnectFourArray[cup0][0]=1;
cup0=cup0-1;
}
else if (num1==1){
ConnectFourArray[cup1][1]=1;
cup1=cup1-1;
}
else if (num1==2){
ConnectFourArray[cup2][2]=1;
cup2=cup2-1;
}
else if (num1==3){
ConnectFourArray[cup3][3]=1;
cup3=cup3-1;
}
else if (num1==4){
ConnectFourArray[cup4][4]=1;
cup4=cup4-1;
}
else if (num1==5){
ConnectFourArray[cup5][5]=1;
cup5=cup5-1;
}
else if (num1==6){
ConnectFourArray[cup6][6]=1;
cup6=cup6-1;
}
System.out.println();


BufferedReader selecter2 = new BufferedReader (new InputStreamReader(System.in));
String column2;
System.out.println();
for ( int row=0; row < ConnectFourArray.length; row++ ){
System.out.print("Row " + row + ": ");
for ( int col=0; col < ConnectFourArray[row].length; col++ )
System.out.print( ConnectFourArray[row][col] + " ");
System.out.println();
}
System.out.println();

System.out.println ("Please Select a column of 0 through 6 ");
column1 = selecter.readLine();
num1= Integer.parseInt(column1);
System.out.println();

if (num1==0){
ConnectFourArray[cup0][0]=2;
cup0=cup0-1;
}
else if (num1==1){
ConnectFourArray[cup1][1]=2;
cup1=cup1-1;
}
else if (num1==2){
ConnectFourArray[cup2][2]=2;
cup2=cup2-1;
}
else if (num1==3){
ConnectFourArray[cup3][3]=2;
cup3=cup3-1;
}
else if (num1==4){
ConnectFourArray[cup4][4]=2;
cup4=cup4-1;
}
else if (num1==5){
ConnectFourArray[cup5][5]=2;
cup5=cup5-1;
}
else if (num1==6){
ConnectFourArray[cup6][6]=2;
cup6=cup6-1;
}
System.out.println();







}
System.out.println();
}
catch (Exception E){
System.out.println("Error with input");
}





System.out.println("Would you like to play again");
try{
{

String value;
BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
// Scanner scan = new Scanner(System.in);
System.out.println("Enter yes to play or no to quit");
// value = scan.nextLine();
// String value2;
value = reader.readLine();
//value2 = reader.readLine();
if (value.equals("yes"))
{

System.out.println("Start again");
StartGame(); // calling the StartGame method to play a game once more
}
else if (value.equals("no"))
{

System.out.println("No more games to play");
// System.exit(0);
}
else
{

System.exit(0);
}

}
System.out.println();
}
catch (Exception e){
System.out.println("Error with input");
}

finally
{

System.out.println(" playing done");
//StartGame();


}


}








//check for horizontal win
public int hasWon()
{
int status = 0;


for (int row=0; row<6; row++)
{
for (int col=0; col<4; col++)
{
if (ConnectFourArray[col][row] != 0 &&
ConnectFourArray[col][row] == ConnectFourArray[col+1][row] &&
ConnectFourArray[col][row] == ConnectFourArray[col+2][row] &&
ConnectFourArray[col][row] == ConnectFourArray[col+3][row])
{
//status = true;//int winner;

if(status == player1)
{


System.out.println("Player 1 is the winner");
}

else if(status == player2)
{


System.out.println("Player 2 is the winner" );
}

}//end inner for loop
}// end outer for loop
} // end method Winner

return status;
}








}//end class



ClassConnectFour which designs the board........................

import java.util.*;
import java.io.*;
import javax.swing.*;


public class ClassConnectFour
{
//Player player1;
//Player player2;
public ClassConnectFour()
{
//this.player1 = player1;
}

public void DrawBoard()
{
int[][] ConnectFourArray = new int[6][7] ;
for ( int row=0; row < ConnectFourArray.length; row++ ){
System.out.print("Row " + row + ": ");
for ( int col=0; col < ConnectFourArray[row].length; col++ )
System.out.print( ConnectFourArray[row][col] + " ");
System.out.println();
}
System.out.println();

}


}//end class


TestConnetFour class which uses most of the above class..................

import java.util.*;
import java.io.*;
import javax.swing.*;


public class TestConnectFour
{

public static void main(String[] args)
{

ClassConnectFour cf = new ClassConnectFour();
cf.DrawBoard();


Player1 player1 = new Player1();
Player2 player2 = new Player2();




player1.move();
player2.move();
System.out.println("Number 1 belongs to player " + player1.name());
System.out.println("Number 2 belongs to player " + player2.name());
PlayGame pg = new PlayGame();
pg.StartGame();
pg.hasWon();



//pg.Play();
//System.out.println(player.name());
//System.out.println(player2.name());
}// end main


}//end class


I am sorry for all this junk code but I only understand it this way. Your urgent help is required. Looking forward to your reply.

Thanks in advance.

Koonda






//
May 12 '07 #1
5 3316
dmjpro
2,476 2GB
good approach.

do one thing.
try to represent the board as a matrix with the help of two-dimesional array.
i think u can do it.
then do mimmum decision making equations by which u can reach at a decision who won.
that means .... when a mark in done by a player check three conditions on the basis of current marked square.
if sequential vertical or horizontal or diagonal mark is done by that player then that player won.

mark the sqaures with unique character for each player.
check every time when a player marks a square and update the square with player's indentification character.

i think u got my point ..... so immediate implement this ... if any problem is there plz post ur hasWon method ..

i think i ll able to correct ur bug if have any.
best of luck.

kind regards.
dmjpro.
May 13 '07 #2
JosAH
11,448 Expert 8TB
There's a little very practical trick: the board measures 7x6 cells (if I'm not
mistaken). Make the real board 9x8 where the border cells contain sentinel
values (i.e. unequal to the three possible values). That way you never have to
explicitly check your indexes for crossing a border.

Another observation is: suppose there's no winner. If, after the current move
there does happen to be a winner, the position of the last move is part of the
winning configuration. All you have to do is track in horizontal, vertical and
diagonal directions starting at that last move's position and count for the
number of coins in that direction.

kind regards,

Jos
May 13 '07 #3
koonda
34
good approach.

do one thing.
try to represent the board as a matrix with the help of two-dimesional array.
i think u can do it.
then do mimmum decision making equations by which u can reach at a decision who won.
that means .... when a mark in done by a player check three conditions on the basis of current marked square.
if sequential vertical or horizontal or diagonal mark is done by that player then that player won.

mark the sqaures with unique character for each player.
check every time when a player marks a square and update the square with player's indentification character.

i think u got my point ..... so immediate implement this ... if any problem is there plz post ur hasWon method ..

i think i ll able to correct ur bug if have any.
best of luck.

kind regards.
dmjpro.





Hi dmjpro,

Thanks for your great help. But I really don't know how to implement it your way. Could you please send me some code so I can try that.

Looking forward to your reply.

Best regards,

Koonda
May 13 '07 #4
koonda
34
There's a little very practical trick: the board measures 7x6 cells (if I'm not
mistaken). Make the real board 9x8 where the border cells contain sentinel
values (i.e. unequal to the three possible values). That way you never have to
explicitly check your indexes for crossing a border.

Another observation is: suppose there's no winner. If, after the current move
there does happen to be a winner, the position of the last move is part of the
winning configuration. All you have to do is track in horizontal, vertical and
diagonal directions starting at that last move's position and count for the
number of coins in that direction.

kind regards,

Jos
Hi Jos,

I think I did not understand your way of implementing it. If possible could you please send me some code examples to implement that.

Looking forward to your reply.

Thanks a lot

Best regards,

Koonda
May 13 '07 #5
JosAH
11,448 Expert 8TB
Hi Jos,

I think I did not understand your way of implementing it. If possible could you please send me some code examples to implement that.

Looking forward to your reply.

Thanks a lot

Best regards,

Koonda
Nope, no code; code is for computers and similar silly machines. What I was
saying is that if your 'logical' board measures 7x6 you should use a 'physical'
board of 9x8:
Expand|Select|Wrap|Line Numbers
  1. +---+---+---+---+---+---+---+---+---+
  2. | X | X | X | X | X | X | X | X | X |
  3. +---+---+---+---+---+---+---+---+---+
  4. | X |   |   |   |   |   |   |   | X |
  5. +---+---+---+---+---+---+---+---+---+
  6. | X |   |   |   |   |   |   |   | X |
  7. +---+---+---+---+---+---+---+---+---+
  8. | X |   |   |   |   |   |   |   | X |
  9. +---+---+---+---+---+---+---+---+---+
  10. | X |   |   |   |   |   |   |   | X |
  11. +---+---+---+---+---+---+---+---+---+
  12. | X |   |   |   |   |   |   |   | X |
  13. +---+---+---+---+---+---+---+---+---+
  14. | X |   |   |   |   |   |   |   | X |
  15. +---+---+---+---+---+---+---+---+---+
  16. | X | X | X | X | X | X | X | X | X |
  17. +---+---+---+---+---+---+---+---+---+
the 'X' values represent a non-empty square not taken by any of the two players.
That way you don't need to do any explicit boundary checks in any of your
methods. The logical playing board ranges from [1 ... 7] and [1 ... 6] and any
cell outside that range is invalid (although it physically exists).

w.r.t. my second remark: if none of the players has won and a current move
causes one of the players to win then the position of that last current move
is part of the winning configuration. If it weren't, a previous configuration would
have been a winning situation for one of the players therefore contradicting the
previous assumption that none of the players did win already.

So checking in any possible directions starting from that last move is sufficient
to find a possible winning configuration.

kind regards,

Jos
May 13 '07 #6

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: mandar | last post by:
Hi Friends, We are a consultancy and we are having the following openings with us...
16
by: | last post by:
Hi all, I have a website running on beta 2.0 on server 2003 web sp1 and I keep getting the following error:- Error In:...
0
by: swaroopa | last post by:
Hello Partner Please forward some good resumes with excellent communication skills. 1.REMEDY AR CONSULTANT Exp: 6-10YEAR Location: San...
1
by: SpiderSwamy | last post by:
Hi, I know little bit about asp, I am facing a problem in Validating the ASP Form.. Example: Stud ID: 501242016 FirstName: Ajit LastName:...
0
by: Martin | last post by:
Hello, We are in the process of putting together an A class C++ Development team(ecommerce / billing applications) for a project in the Bay Area....
0
by: Rahtgaz | last post by:
Hello everyone, I'm wanting to start implementation of a pet project game IO mechanism. The game is console based. A cross between MUD and...
9
by: raylopez99 | last post by:
What's the best way of implementing a multi-node tree in C++? What I'm trying to do is traverse a tree of possible chess moves given an intial...
1
by: latha | last post by:
Job Description: Current Location :St.Louis, MO Duration : 14 months The main objective of this role is to implement SAP projects in support of...
8
by: AeonOfTime | last post by:
Hi everyone, I have a concept for a pretty simple web game, and am currently considering my options regarding the storage of the game state....
0
by: concettolabs | last post by:
In today's business world, businesses are increasingly turning to PowerApps to develop custom business applications. PowerApps is a powerful tool...
0
better678
by: better678 | last post by:
Question: Discuss your understanding of the Java platform. Is the statement "Java is interpreted" correct? Answer: Java is an object-oriented...
0
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
0
jalbright99669
by: jalbright99669 | last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
2
by: Matthew3360 | last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
0
by: AndyPSV | last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
0
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...
0
Oralloy
by: Oralloy | last post by:
Hello Folks, I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA. My problem (spelled failure) is with the...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.