i want to import an array, but i cant..

i have my chess class.. and one method that tries to check whether there is a check.

basically like this..

if(pieces[columnStartN][rowStartN].isMoveValid(columnStartN,rowStartN,columnEndN,rowEnd) && pieceDevour){
		    pieces[columnStartN][rowStartN]=null;   
			pieces[columnStartN][rowStartN]=pieces[columnEndN][rowEnd];
		    }
		   
		 
		   
		  
	
		   rowStartN=rowEnd;
		   columnStart=columnEnd;
		   int kingRow=0;
		   int kingColumn=0;
           chessPiece="BKing";
           int c=0;
           int pieceColumn=0;
           int pieceRow=0;
		   for(int column=0;column<pieces.length;column++){
				  for(int row=0;column<pieces[row].length;row++){
			        if(pieces[column][row].FindPiece(chessPiece).equals(chessPiece));// gets the king position...
			        pieces[kingColumn][kingRow]=pieces[column][row];
				  }
		   }
		
		   
		   if(pieces[columnStartN][rowStartN].isKingThreatened(columnEndN,rowEnd,kingColumn,kingRow)){// the method here sends arguments to the method in a pieces' class. to check whether its next move threatens the king (check).

// however i cant import this array:
			   ChessPiece pieces[][];
			   pieces =new ChessPiece[7][7];// pieces[][] cant be imported
			   
			   pieces[1][0]=new Pawn("Bpn1");
			   pieces[1][1]=new Pawn("Bpn2");
			   pieces[1][2]=new Pawn("Bpn3");
			   pieces[1][3]=new Pawn("Bpn4");
			   pieces[1][4]=new Pawn("Bpn5");
			   pieces[1][5]=new Pawn("Bpn6");
			   pieces[1][6]=new Pawn("Bpn7");
			   pieces[1][7]=new Pawn("Bpn8");
			   
			
			   

				  
			      pieces [0][0]=new Rook("BR1");
				  pieces [0][1]=new Knight("BN1");
				  pieces [0][2]=new Bishop("BB1");
				  pieces [0][3]=new King("BKing");
				  pieces [0][4]=new Queen("BQueen");;
				  pieces [0][5]=new Bishop("BB2");
				  pieces [0][6]=new Knight("BN2");
				  pieces [0][7]=new Rook("BR2");
				  
		
			   pieceDevour=true;
		   }
package il.co.Bishop;

import il.co.ChessInterface.ChessPiece;


ChessPiece [][] pieces=new ChessPiece[7][7];
	public  boolean isKingThreatened(int columnEndN,int rowEnd, int kingRow, int kingColumn) {
		

		boolean valid = false;
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				
		   if(pieces[i][j]!=null &&  pieces[i][j]==pieces[kingColumn][kingRow])
			   valid=true;
		   else
			   valid=false;
			  System.out.println("Check: Pawn Threatens king");	
		return valid;
		
	}

for now , my code is limited cause i made another new array, that can identify the pieces position compare to the king, but cant see where the rest of the pieces stand.


how do i import pieces [?][?] array in class chessInterface to a pieces class (Bishop in this example..)

Recommended Answers

All 16 Replies

If I understand correctly, u can make the pieces array public, import the entire file containing chessInterface into the file containing the Bishop class (if the 2 are not in the same folder, that is) and directly access "pieces" in the Bishop class, via an object of the chessInterface class.

how do i import pieces [?][?] array in class chessInterface to a pieces class (Bishop in this example..)

Pass a reference to the array to a method:
Bishop bshp = ...
bshp.checkMove(pieces);

What is in the pieces array? Its dim is 7x7
pieces=new ChessPiece[7][7]
but you access the 8th position:
pieces[1][7]=new ...

Norm like that?:

the method in the ChessInterface (main class) invokes the Bishop class:

if(board.isKingThreatened(pieces,columnEndN,rowEnd,kingColumn,kingRow)){
			   System.out.println("Check:The king is threatened");
		   }

Bishop class:

public  boolean isKingThreatened(ChessInterface[][] pieces, int columnEndN,int rowEnd, int kingRow, int kingColumn) {
		

	
	  valid = false;
		
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				
		   if(pieces[i][j]!=null &&  pieces[i][j]==pieces[kingColumn][kingRow])
			   valid=true;
		   else
			   valid=false;
			  	
		return valid;
		
	}

for some unknown reason eclipse said i have a mistake in the main class and told me to add this:

private static void ChessInterface1(ChessPiece[][] pieces) {
	// TODO Auto-generated method stub
	
}

why is that?

eclipse said i have a mistake in the main class and told me to add

I have no idea about why your IDE said that.

Comment on your code:
It is better to ALWAYS use {} with for and if statements. Your last code shows some for statements without using them.

Norm that is true.
look what eclipse made me do. i put the reference like that before the method and it made me create private methods inside the class.. why?


Thats the last part of the code:

ChessInterface board=new ChessInterface();   


		   if(board.isKingThreatened(pieces, columnStartN ,columnEndN,rowEnd,kingColumn)){// checks if there is check.
			   System.out.println("Check:The king is threatened");
		   }
		   
		
		   if(board.checkMate(pieces, columnStartN ,columnEndN,rowEnd,kingColumn)){
			   checkMate=true;
		   }
		   

					  
			 
			 
	    


         
	   }while(checkMate!=true);
	   }

private boolean piecesCollision(ChessPiece[][] pieces, int rowStartN, // made me add this
		int columnEndN, int columnEndN2, int rowEnd) {
	// TODO Auto-generated method stub
	return false;
}

private boolean checkMate(ChessPiece[][] pieces, int columnStartN,// and this
		int columnEndN, int rowEnd, int kingColumn) {
	// TODO Auto-generated method stub
	return false;
}

private boolean isKingThreatened(ChessPiece[][] pieces, int columnStartN, // made me add this
		int columnEndN, int rowEnd, int kingColumn) {
	// TODO Auto-generated method stub
	return false;
}
	   }

what eclipse made me do

Sorry I don't know anything about using your IDE.
Does it give any reasons for requiring the code?

Your posting odd pieces of code is useless for anyone trying to understand your problems.

For example:

}while(checkMate!=true);
	   }

Is there a "do {" statement somewhere before this code?

yeah. i put it at the start of the code. i said that i posted the last part of the code.

i didnt want to confuse with irrelevant information..

if checkMate is true the game stops (loop stops)

have you got an idea why eclipse wants me to create those private classes?

eclipse says the method is undefined for ChessInterface (the main class where teh methods are)

it says that this method is undefined:

if(board.checkMate(pieces, columnStartN ,columnEndN,rowEnd,kingColumn)){
			   checkMate=true;
		   }

board is the reference i made to ChessInterface.
ChessInterface board=new ChessInterface();

I use Eclipse. If you refer to a method that is not defined Eclipse offers you a number of possible fixes. One of those is to create a method in the appropriate class with the appropriate signature. Used with a little forethought this can save a whole heap of typing, but selecting it without understanding why is a formula for chaos.
Similarly, if you miss-type a class name Eclipse offers a choice of corrections, one of which is to create the class for you.= (see comments above).

all my formulas are typed correctly, but they are in a different class:

for example the bishop class looks like that:

package il.co.Bishop;

import il.co.ChessInterface.ChessInterface;
import il.co.ChessInterface.ChessPiece;

public class Bishop extends ChessPiece
{
	 int columnEnd;
	 int rowEnd;
	 int columnStart;
	 int rowStart;
	 String name; 
	 boolean valid;
	
	public Bishop(String name) {
		this.name=name;
	}


	public boolean isMoveValid(ChessPiece[][] pieces, int columnStartN,
			int rowStart, int columnEndN, int rowEnd)
	{

		int deltaX=columnEndN-columnStartN;
		deltaX=deltaX<0?-deltaX:deltaX;
		int deltaY=rowEnd-rowStart;
		deltaY=deltaY<0?-deltaY:deltaY;
		return deltaY==deltaX;


	}




	@Override
	public void print() {// i havent finished the print code yet.
		String[] drawBlackPiece=new String[4];
		String[] drawWhitePiece=new String[4];
		public void print() {
			if(name.charAt(0)=='B'){
		     drawBlackPiece[0]="";
		     drawBlackPiece[1]="";
		     drawBlackPiece[2]="";
		     drawBlackPiece[3]="";
		     drawBlackPiece[4]="";
			}
			else{
			    drawWhitePiece[0]="";
			     drawWhitePiece[1]="";
			     drawWhitePiece[2]="";
			     drawWhitePiece[3]="     name";
			     drawWhitePiece[4]="   |________| ";	
		
	}



	@Override
	public String FindPiece(String chessPiece) {
		
		return name;
	}



	@Override
	public boolean checkMate() {
		// TODO Auto-generated method stub
		return false;
	}


	
	
  
	public  boolean isKingThreatened(ChessInterface[][] pieces,int columnStartN ,int columnEndN,int rowEnd, int kingRow, int kingColumn) {
		

	
	  valid = false;
		
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				
		   if(pieces[i][j]!=null &&  pieces[i][j]==pieces[kingColumn][kingRow])
			   valid=true;
		   else
			   valid=false;
			  	
		return valid;
		
	}



	@Override
	public boolean piecesCollision(ChessInterface[][] pieces,int rowStartN,int columnStartN ,int columnEndN,int rowEnd) {
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				 while(pieces[i][j]!=pieces[rowEnd][columnEndN]){
					if(pieces[i][j]==null || pieces[i][j]==pieces[rowEnd][columnEndN])
						valid=true;
					else
						pieces[i][j]=pieces[rowEnd][columnEndN];
					    valid=false;
				 }
	
	
		return valid;
	}






}

might it be because the method calling doesnt reach the Bishop class, therefore, eclipse says to create a method inside the class?

You are having problems with defining basic class structures and referring to members in those classes from other classes.

Perhaps you should go back to the chapter in your text that explains how to define a class, how to add members (variables and methods) to that class and how to write a second class that uses the members of the first class. This is all VERY basic stuff that you need to understand BEFORE trying to write a complicated program.

where do i go wrong?
ChessInterface board=new ChessInterface();
ChessPiece[][] pieces

i changed all the pieces into this..

public boolean checkMate(ChessPiece[][] pieces,int rowStartN,int columnStartN ,int columnEndN,int rowEnd) {

is this wrong?

What is the purpose of the two classes you mention? How are they used?
ChessInterface and ChessPiece

The two method signatures you have posted look identical to me. They have exactly the same parameter types being passed.

ChessPiece[][] piece=new ChessPiece[8][8];

is an array i created.

someone told me to make an object reference to the class.

my class
ChessInterface board=new ChessInterface();

ChessPiece is my abstract class.

package il.co.ChessInterface;



abstract public class ChessPiece {
	  
	 abstract public  boolean isMoveValid(ChessPiece[][] pieces,int columnStartN, int rowStart, int columnEndN, int rowEnd);
	
	  abstract public void print();

	 abstract public String FindPiece(String chessPiece); 
	 
	 abstract public  boolean isKingThreatened(ChessPiece[][]pieces,int columnStartN, int columnEndN,int rowEnd, int kingRow, int kingColumn);
	 
	 abstract public boolean piecesCollision(ChessPiece[][]pieces,int rowStartN,int columnStartN ,int columnEndN,int rowEnd);
	 

   	}

All those methods are spread among all the chess piece classes( pawns , rooks, queens, kings, knights and bishops)


i called my methods (that are in the abstract class) like this:

if(board.isKingThreatened(pieces, columnStartN , columnEndN, rowEnd,  kingRow,  kingColumn)

it says that this method is undefined for the class interface.

i know inheritance, polymorphism, arrays, interfaces, abstract classes. but i dont knwo where is the problem there.
what syntax can i use to invoke those methods without getting an error

Finding an undefined method requires the use of an editor with the Search of find method.

Open your source files one by one and search for the undefined method. When you find it,
tell the compiler where it is so it will know when it needs it.

i am so tired of working on that code, i think i finished the code in respect of its algorithms.

now i need to find where there are mistakes and then launch it to see if it works.


i am not sure how to find the undefined method or where it is. may be i dont refer to it correctly.

thats what i have done so far

main class

package il.co.ChessInterface;
import il.co.Pawn.Pawn;

import il.co.Bishop.*;
import il.co.King.*;
import il.co.Queen.*;
import il.co.Rook.*;
import il.co.Knight.*;

import java.io.*;


@SuppressWarnings("unused")
public class ChessInterface {

   public static void main(String[] arg){
	   	   	   
	   Console console=System.console();
	  	   
		   
	
	   String chessPiece="";
	   int rowStartN = 0;
	   char columnStart = 0;
	  
	   boolean checkMate=false;
	do{	
       System.out.println("what piece do you want to move?");  // Questions
	   chessPiece=console.readLine();
		
	   System.out.println("where do you want to move it to?(type column letter)");
	   String input=console.readLine();
	   char columnEnd=input.charAt(0);
	   System.out.println("where do you want to move it to?(type row number)");
	   int rowEnd=Integer.parseInt(console.readLine());
	   
	   ChessInterface board=new ChessInterface();   
	   
	   	  
	  		int columnStartN = 0, columnEndN=0;           //converts input letters to numbers
			switch(columnStart)
			{
				case 'a':  columnStartN=1; break;
				case 'b':  columnStartN=2; break;
				case 'c':  columnStartN=3; break;
				case 'd':  columnStartN=4; break;
				case 'e':  columnStartN=5; break;
				case 'f':  columnStartN=6; break;
				case 'g':  columnStartN=7; break;
				case 'h':  columnStartN=8; break;
				default: 
					System.out.println("move invalid try again");
			}
			switch(columnEnd)
			{
				case 'a':  columnEndN=1; break;
				case 'b':  columnEndN=2; break;
				case 'c':  columnEndN=3; break;
				case 'd':  columnEndN=4; break;
				case 'e':  columnEndN=5; break;
				case 'f':  columnEndN=6; break;
				case 'g':  columnEndN=7; break;
				case 'h':  columnEndN=8; break;
				default: 
					System.out.println("move invalid try again");
			}
		  
			
		
			   
			   ChessPiece pieces[][] =new ChessPiece[8][8]; // array of Black and White pieces;
			   
			   
			   pieces[2][1]=new Pawn("Bpn1");
			   pieces[2][2]=new Pawn("Bpn2");
			   pieces[2][3]=new Pawn("Bpn3");
			   pieces[2][4]=new Pawn("Bpn4");
			   pieces[2][5]=new Pawn("Bpn5");
			   pieces[2][6]=new Pawn("Bpn6");
			   pieces[2][7]=new Pawn("Bpn7");
			   pieces[2][8]=new Pawn("Bpn8");
			   
			
			   

				  
			      pieces [1][1]=new Rook("BR1");
				  pieces [1][2]=new Knight("BN1");
				  pieces [1][3]=new Bishop("BB1");
				  pieces [1][4]=new King("BKing");
				  pieces [1][5]=new Queen("BQueen");;
				  pieces [1][6]=new Bishop("BB2");
				  pieces [1][7]=new Knight("BN2");
				  pieces [1][8]=new Rook("BR2");
				  
		  
				   pieces[7][1]=new Pawn("Wpn1");
				   pieces[7][2]=new Pawn("Wpn2");
				   pieces[7][3]=new Pawn("Bpn3");
				   pieces[7][4]=new Pawn("Wpn4");
				   pieces[7][5]=new Pawn("Wpn5");
				   pieces[7][6]=new Pawn("Wpn6");
				   pieces[7][7]=new Pawn("Wpn7");
				   pieces[7][8]=new Pawn("Wpn8");
				   
				
				   

					  
				      pieces [8][1]=new Rook("WR1");
					  pieces [8][2]=new Knight("WN1");
					  pieces [8][3]=new Bishop("WB1");
					  pieces [8][4]=new King("WKing");
					  pieces [8][5]=new Queen("WQueen");;
					  pieces [8][6]=new Bishop("WB2");
					  pieces [8][7]=new Knight("WN2");
					  pieces [8][8]=new Rook("WR2");
				 
				
				
		
				  for(int column=0;column<pieces.length;column++)// extracts chess piece name and compares it to chess piece 
					  for(int row=0;column<pieces[row].length;row++)
						  if(pieces[row][column].FindPiece(chessPiece).equals(chessPiece)){ 
							  pieces[columnStartN][rowStartN]=pieces[row][column];				           
						       columnStartN=column;
					           rowStartN=row;
						  }
				  
				  char firstLetter=' ';
				  char secondLetter=' ';
				  boolean pieceDevour=false;
				   firstLetter=pieces[columnStartN][rowStartN].FindPiece(chessPiece).charAt(0); // compares the first letter of the piece the object holds 
				   secondLetter=pieces[columnEndN][rowEnd].FindPiece(chessPiece).charAt(0);// to the second letter .
                   if(secondLetter==firstLetter){
                	   pieceDevour=false;
                	    System.out.println("sorry, you cant move onto one of your own pieces");
                   }
                	   else
                	   {
					     pieceDevour=true;
                	   }
                   
				   boolean nonCollision=false;
                   if(board.piecesCollision(pieces,rowStartN,columnEndN ,columnEndN,rowEnd)){ // checks if the move collides with another piece on the way to its destination.	
                	   System.out.println("Sorry, you cant move there, please try again");
                   }
				  
				 
		   if(pieces[columnStartN][rowStartN].isMoveValid(pieces, columnStartN,rowStartN,columnEndN,rowEnd) && pieceDevour && nonCollision){//checks whether the kings position was legal
		    pieces[columnStartN][rowStartN]=null;   
			pieces[columnStartN][rowStartN]=pieces[columnEndN][rowEnd];
		    }
		   
		 
		   
		  
	
		   rowStartN=rowEnd;// gets the king position...
		   columnStart=columnEnd;
		   int kingRow=0;
		   int kingColumn=0;
           chessPiece="BKing";
           int c=0;
           int pieceColumn=0;
           int pieceRow=0;
		   for(int column=0;column<pieces.length;column++){
				  for(int row=0;column<pieces[row].length;row++){
			        if(pieces[column][row].FindPiece(chessPiece).equals(chessPiece));
			        pieces[kingRow][kingColumn]=pieces[column][row];
				  }
		   }
		
	boolean checkSafe=false;
	do{	   
		   if(board.isKingThreatened(pieces, columnStartN , columnEndN, rowEnd,  kingRow,  kingColumn))   {// checks if there is check.
			  System.out.println("The king is in Check. You must move it");
			  System.out.println("What column would you like to  move it");
			  columnEndN=Integer.parseInt(console.readLine());
			  System.out.println("What row would you like to  move it");
			  rowEnd=Integer.parseInt(console.readLine());
			  
			  pieces[columnStartN][rowStartN]=pieces[kingColumn][kingRow];
			  if(pieces[columnStartN][rowStartN].isMoveValid(pieces, columnStartN,rowStartN,columnEndN,rowEnd) && pieces[columnStartN][rowStartN].piecesCollision(pieces, rowStartN, columnStartN , columnEndN, rowEnd)){
				  
			  
			  pieces[kingRow][kingColumn] =pieces[rowEnd][columnEndN];}
			     
			  else{
				  checkMate=true;
			  }
			  
			  if(pieces[rowEnd][columnEndN].isKingThreatened(pieces, columnStartN , columnEndN, rowEnd,  kingRow,  kingColumn)){
				  checkSafe=false ;
			  }
			  else
				  checkSafe=true;
		 
		   }
	}while(checkSafe==true || checkMate==true);
     
	String letter="ABCDEFGH";
	String[] drawBlackPiece=new String[5];
	  System.out.println("_______________________________________________________");
	  
		for(int i=0;i<pieces.length;i++)
			for(int j=0;j<pieces[j].length;j++){
				if(pieces[i][j]==null){
					
				     drawBlackPiece[0]="__________________";
				     drawBlackPiece[1]="|                |";
				     drawBlackPiece[2]="|                |";
				     drawBlackPiece[3]="|                |";
				     drawBlackPiece[4]="|                |";
				     drawBlackPiece[5]="|_______________ |";
					}
				else{
					pieces[j][i].print();
				}
		if(pieces[i][0]==pieces[i][0]){
		     drawBlackPiece[0]="";
		     drawBlackPiece[1]="|";
		     drawBlackPiece[2]="|";
		     drawBlackPiece[3]= letter.charAt(i)+"";
		     drawBlackPiece[4]="|";
		     drawBlackPiece[5]="|";
		}
		
	
		
			if(pieces[i][8]==pieces[i][8]){
		     drawBlackPiece[0]="";
		     drawBlackPiece[1]="|";
		     drawBlackPiece[2]="|";
		     drawBlackPiece[3]= letter.charAt(i)+"";
		     drawBlackPiece[4]="|";
		     drawBlackPiece[5]="|";
		}
		
		if(pieces[0][j]==pieces[0][j]){
			
		
		     drawBlackPiece[0]="_________j________";

		}
		
		if(pieces[8][j]==pieces[8][j]){

		     drawBlackPiece[5]="_________j________";
		}
			   
			
				
	  System.out.println("_______________________________________________________");

			}     
	     }while(checkMate!=true);
	     
	
   }

}

The abstract class

package il.co.ChessInterface;



abstract public class ChessPiece {
	  
	 abstract public  boolean isMoveValid(ChessPiece[][] pieces,int columnStartN, int rowStart, int columnEndN, int rowEnd);
	
	  abstract public void print();

	 abstract public String FindPiece(String chessPiece); 
	 
	 abstract public  boolean isKingThreatened(ChessPiece[][]pieces,int columnStartN, int columnEndN,int rowEnd, int kingRow, int kingColumn);
	 
	 abstract public boolean piecesCollision(ChessPiece[][]pieces,int rowStartN,int columnStartN ,int columnEndN,int rowEnd);
	 

   	}

An example of a piece class:

package il.co.Bishop;

import il.co.ChessInterface.ChessInterface;
import il.co.ChessInterface.ChessPiece;// it shows me a mistake here

public class Bishop extends ChessPiece // and here .. for some reason
{
	 int columnEnd;
	 int rowEnd;
	 int columnStart;
	 int rowStart;
	 String name; 
	 boolean valid;
	
	public Bishop(String name) {
		this.name=name;
	}


	public boolean isMoveValid(ChessPiece[][] pieces, int columnStartN,
			int rowStart, int columnEndN, int rowEnd)
	{

		int deltaX=columnEndN-columnStartN;
		deltaX=deltaX<0?-deltaX:deltaX;
		int deltaY=rowEnd-rowStart;
		deltaY=deltaY<0?-deltaY:deltaY;
		return deltaY==deltaX;


	}




	String[] drawBlackPiece=new String[4];
	String[] drawWhitePiece=new String[4];
	public void print() {
		if(name.charAt(0)=='B'){
		    drawBlackPiece[0]="      |-| ";
		     drawBlackPiece[1]="    |   |";
		     drawBlackPiece[2]="   |     | ";
		     drawBlackPiece[3]=" _| name  |_";
		     drawBlackPiece[4]="| _________ | ";	
		}
		else{
		    drawWhitePiece[0]="      |-| ";
		     drawWhitePiece[1]="    |   |";
		     drawWhitePiece[2]="   |     | ";
		     drawWhitePiece[3]=" _| name  |_";
		     drawWhitePiece[4]="| _________ | ";	
		}
	}



	@Override
	public String FindPiece(String chessPiece) {
		
		return name;
	}





	
	
  
	public  boolean isKingThreatened(ChessPiece[][]pieces,int columnStartN ,int columnEndN,int rowEnd, int kingRow, int kingColumn) {
		

	
	  valid = false;
		
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				
		   if(pieces[i][j]!=null &&  pieces[i][j]==pieces[kingColumn][kingRow])
			   valid=true;
		   else
			   valid=false;
			  	
		return valid;
		
	}



	@Override
	public boolean piecesCollision(ChessPiece[][]pieces,int rowStartN,int columnStartN ,int columnEndN,int rowEnd) {
		for(int i=rowEnd;i<pieces.length;i++)
			for(int j=columnEndN;j<pieces[i].length;j++)
				 while(pieces[i][j]!=pieces[rowEnd][columnEndN]){
					if(pieces[i][j]==null || pieces[i][j]==pieces[rowEnd][columnEndN])
						valid=true;
					else
						pieces[i][j]=pieces[rowEnd][columnEndN];
					    valid=false;
				 }
	
	
		return valid;
	}

Good luck on your project.

commented: thanks for your patience ,norm R1 +0
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.