473,503 Members | 2,135 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Urgent Help Required by Implementing a ConnectFour Game

34 New Member
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 3530
dmjpro
2,476 Top Contributor
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 Recognized Expert MVP
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 New Member
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 New Member
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 Recognized Expert MVP
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
1587
by: mandar | last post by:
Hi Friends, We are a consultancy and we are having the following openings with us ------------------------------------------------------------------------------------------------------ 1) ...
16
2890
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
3109
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 Jose CA Duration : 2 Months
1
1616
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: Kar
0
1827
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. Reqt. details: ReqId : Req-3911 - C++ Senior...
0
1487
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 Rogue types. For I/O operations I'll be using ncurses...
9
7813
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 position (at the root of the tree). Since every...
1
1776
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 new Monsanto business lines and globalization...
8
2617
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. Ideally, I would like to have a custom server running...
0
7205
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7093
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7287
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7353
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
7011
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
3180
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
3170
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
1521
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
747
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

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.