C Board  

Go Back   C Board > General Programming Boards > C Programming

Reply
 
LinkBack Thread Tools Display Modes
Old 04-26-2006, 02:53 PM   #1
Registered User
 
Join Date: Jan 2006
Posts: 11
C Programming 2d Array Question

I am set the task of writing part of a C program that will check if the user can move or not.
The program would use a 2d array

arrBoard[8][8]
and counters

#define EMPTY_SQUARE "E"
#define WHITE_SQUARE "W"
#define BMPTY_SQUARE "B"

I know the basic ideas of moves that can be made in the array

--------------------

x+1 | x+1 | x+0 | x-1
y+0 | y-1 | y-1 | y-1

x-1 | x+1 | x+0 | x-1
y+0 | y+1 | y+1 | y+1

-----------------------

I was wondering what the best way to check if the player can move is. Even after reading countless books i dont understand how you can read a position on an array.
Also how to define the edges of the board.

Im verymuch a newbie. (very basic idea of what im doing)

Any help would be appreciated.
jeev2005 is offline   Reply With Quote
Old 04-26-2006, 02:55 PM   #2
Registered User
 
Join Date: Jan 2006
Posts: 11
I forgot this is for the game Othello!
jeev2005 is offline   Reply With Quote
Old 04-26-2006, 03:16 PM   #3
Registered User
 
Join Date: Jan 2006
Posts: 11
Heres the code so far... i've implemented the 2D Array but it doesnt seem to do what i want it to do

Code:
#include "othello.h" 

/*Declare The Two Players*/

int row,col;
int playerturn = 1;
int player = 2;  // ****Means that no-one can make a move until someone identifies themself as the host****
int board [BOARD_SIZE][BOARD_SIZE] = {0}; // the game console   
 	
char g_sBuffer[512]; 
 
 /*  
 * gameEventsDispatcher : Main function to handle game events  
 * eventID           	: Unique ID number to identify events and help with debugging 
 * eventType            : Indicates type of game event 
 * eventRow             : The row identifier of the active board square  
 * eventCol             : The column identifier of the active board square   
 * eventData            : For REQUEST_PLAY_EVENT, MESSAGE_INIT_EVENT, MESSAGE_PLAY_EVENT event types,  * 
 *			: this string indicates the IP address and port number of the opponent   
 */
 
 void gameEventsDispatcher( long eventID, int eventType, int eventRow, char eventCol, char *eventData )
 
 {   
 
 switch ( eventType )   
 
 {   
 
 case REQUEST_INFO_EVENT : 
		 sprintf( g_sBuffer, "Your game instance is: %s:%d", getIPAddress(),getPortNumber() ); 
		 displayMessage( g_sBuffer ); 
 
 break; 


   
 case REQUEST_PLAY_EVENT : 
	 notifyInit( eventData ); 
	 player = 1; // ****Means this is the host and player 1 ****


 
	for(row=0;row<BOARD_SIZE;row++);

{
	for(col=0;col<BOARD_SIZE;col++);


	{
	board [row][col]=EMPTY_SQUARE;
	} 
	
	board [4]['D'-'A']=WHITE_SQUARE;
	board [3]['E'-'A']=WHITE_SQUARE;
	board [3]['D'-'A']=BLACK_SQUARE;
	board [4]['E'-'A']=BLACK_SQUARE;

	/*Places White And Blacks on the Board*/
	
	updateBoard( 5, 'D', board [4]['D'-'A'] ); 
	updateBoard( 4, 'E', board [3]['E'-'A'] ); 
	updateBoard( 4, 'D', board [3]['D'-'A'] ); 
	updateBoard( 5, 'E', board [4]['E'-'A'] );    

}

break;   


 case REQUEST_BOARD_EVENT : 


	if ((player == 1) && (playerturn == 1))
	{
		updateBoard( eventRow, eventCol, BLACK_SQUARE ); 
		putNewDisc (eventRow,eventCol);
		playerturn = 2;
	}
	else if	((player == 2) && (playerturn == 2))
	{
	
		updateBoard( eventRow, eventCol, WHITE_SQUARE );
		putNewDisc (eventRow,eventCol);
		playerturn = 1;
	}
 
break;   
  
 case MESSAGE_INIT_EVENT : 
 if ( ! notifyPlay() ) notifyInit( eventData ); 
 
 /*Displays Initial Message To Show Status Of Game*/
 
 displayMessage( "Game Activated - Lets Begin!" ); 
break;   
 
 case MESSAGE_PLAY_EVENT : 
 	
	
		for(row=0;row<BOARD_SIZE;row++);

{
	for(col=0;col<BOARD_SIZE;col++);


	{
	board [row][col]=EMPTY_SQUARE;
	} 
	
	board [4]['D'-'A']=WHITE_SQUARE;
	board [3]['E'-'A']=WHITE_SQUARE;
	board [3]['D'-'A']=BLACK_SQUARE;
	board [4]['E'-'A']=BLACK_SQUARE;

	/*Places White And Blacks on the Board*/
	
	updateBoard( 5, 'D', board [4]['D'-'A'] ); 
	updateBoard( 4, 'E', board [3]['E'-'A'] ); 
	updateBoard( 4, 'D', board [3]['D'-'A'] ); 
	updateBoard( 5, 'E', board [4]['E'-'A'] );    
}
 break;   
 
 case MESSAGE_BOARD_EVENT : 	
	
	if (player == 1) 
	{
		respond(eventRow,eventCol);
		updateBoard( eventRow, eventCol, WHITE_SQUARE ); //**** Updates Board With Whites ****
		
		playerturn = 1;  // **** This is the recieving code for when player 2 makes a move, this the turn should go back to 1 ****
	}
	else if	(player == 2) 
	{
		respond(eventRow,eventCol);
		updateBoard( eventRow, eventCol, BLACK_SQUARE ); // **** Same as above ****		
		
		playerturn = 2;  // **** Same as above ****
	}
	//updateBoard( eventRow, eventCol, player2 );
 	//displayMessage( "Please Make A Move" );
		
break;  
	

 case MESSAGE_RESPONSE_EVENT : 
displayMessage( g_sBuffer );
break;   
 
 case MESSAGE_END_EVENT : 
 sprintf( g_sBuffer, "Your opponent has given up!" ); 
 displayMessage( g_sBuffer ); 
 break;
 
    }
     }
    
   
   
     /* end of gameEventsDispatcher */
jeev2005 is offline   Reply With Quote
Old 04-26-2006, 03:18 PM   #4
Registered User
 
Join Date: Jan 2006
Posts: 11
Here with the Header File

Code:
#include <arpa/inet.h>
#include <fcntl.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>

/*
 * Descriptive string containing name and version number
 */
#define APPLICATION_NAME_STR        "OTHELLO v1.0C"

/*
 * Descriptive string to indicate the game board
 */
#define APPLICATION_GAME_BOARD      "BOARD"

/*
 * Descriptive string to indicate the message display
 */
#define APPLICATION_MSGBOX_STR      "MESSAGES"

/*
 * Descriptive string for button to start a game
 */
#define APPLICATION_BUTTON_PLAY_STR "PLAY"

/*
 * Descriptive string for button to display information about current game
 */
#define APPLICATION_BUTTON_INFO_STR "INFO"

/*
 * Descriptive string for button to end a game and exit application
 */
#define APPLICATION_BUTTON_EXIT_STR "EXIT"

/*
 * Descriptive string for title of dialog window
 */
#define APPLICATION_DIALOG_STR      "CONTINUE?"

/*
 * Descriptive string for dialog button for user response Yes
 */
#define APPLICATION_DIALOG_YES_STR  "YES"

/*
 * Descriptive string for dialog button for user response No
 */
#define APPLICATION_DIALOG_NO_STR   "NO"

/*
 * Descriptive string for dialog asking whether player wants to exit
 */
#define APPLICATION_DIALOG_QUESTION "Are you sure you want to exit now?"

/*
 * Descriptive string for title of dialog window when asking for opponent host info
 */
#define APPLICATION_DIALOG_HOST_STR "OPPONENT HOST"

/*
 * Descriptive string for dialog button to connect to opponent host
 */
#define APPLICATION_DIALOG_HOST_YES "PLAY"

/*
 * Descriptive string for dialog button for cancel play request
 */
#define APPLICATION_DIALOG_HOST_NO  "CANCEL"

/*
 * Max length permitted in text entry field
 */
#define TEXT_ENTRY_MAX_LENGTH       128

/*
 * Default width of application window
 */
#define APPLICATION_WINDOW_WIDTH    350

/*
 * Default height of application window
 */
#define APPLICATION_WINDOW_HEIGHT   560

/*
 * Default width of dialog window
 */
#define APPLICATION_DIALOG_WIDTH    250

/*
 * Default height of dialog window
 */
#define APPLICATION_DIALOG_HEIGHT   80

/*
 * Default value if network socket is invalid or not connected
 */
#define NETWORK_SOCKET_CLOSED       -1

/*
 * Color of main window background
 */
#define COLOR_WINDOW_BG             "lightsteelblue3"

/*
 * Color of normal grid backgrounds
 */
#define COLOR_GRID_BG               "palegreen3"

/*
 * Color of grid backgrounds when mouse is hovering above
 */
#define COLOR_GRID_HOVER_BG         "gold"

/*
 * Color of grid backgrounds when mouse button is pressed
 */
#define COLOR_GRID_ACTIVE_BG        "palegreen4"

/*
 * Color of message display background
 */
#define COLOR_MSGBOX_BG             "azure3"

/*
 * Name of XPM image for use with Play button
 * Requires image file to be in same directory as application
 */
#define XPM_BUTTON_PLAY             "g_play.xpm"

/*
 * Name of XPM image for use with Info button
 * Requires image file to be in same directory as application
 */
#define XPM_BUTTON_INFO             "g_info.xpm"

/*
 * Name of XPM image for use with Exit button
 * Requires image file to be in same directory as application
 */
#define XPM_BUTTON_EXIT             "g_exit.xpm"

/*
 * Name of XPM image to indicate Yes response on dialog window
 * Requires image file to be in same directory as application
 */
#define XPM_BUTTON_DIALOG_YES       "g_yes.xpm"

/*
 * Name of XPM image to indicate No response on dialog window
 * Requires image file to be in same directory as application
 */
#define XPM_BUTTON_DIALOG_NO        "g_no.xpm"

/*
 * Name of XPM image to indicate a game square without any discs
 * Requires image file to be in same directory as application
 */
#define XPM_SQUARE_EMPTY            "g_no_disc.xpm"

/*
 * Name of XPM image to indicate a game square with a black disc
 * Requires image file to be in same directory as application
 */
#define XPM_SQUARE_BLACK            "g_black_disc.xpm"

/*
 * Name of XPM image to indicate a game square with a white disc
 * Requires image file to be in same directory as application
 */
#define XPM_SQUARE_WHITE            "g_white_disc.xpm"



/*
 * Size of game board
 */
#define BOARD_SIZE                   8



/*
 * Game event type when a player clicks on the PLAY button
 */
#define REQUEST_PLAY_EVENT          111

/*
 * Game event type when a player clicks on the INFO button
 */
#define REQUEST_INFO_EVENT          112

/*
 * Game event type when a player clicks on a square of the game BOARD
 */
#define REQUEST_BOARD_EVENT         113

/*
 * Game event type when opponent sends message to initialise a new game
 */
#define MESSAGE_INIT_EVENT          221

/*
 * Game event type when opponent sends message to start playing a new game after initialisation is done
 */
#define MESSAGE_PLAY_EVENT          222

/*
 * Game event type when opponent sends message to place a new disc on the game board
 */
#define MESSAGE_BOARD_EVENT         223

/*
 * Game event type when opponent sends message to confirm that player's new disc has been placed on board
 */
#define MESSAGE_RESPONSE_EVENT      224

/*
 * Game event type when opponent sends message to indicate end of game
 */
#define MESSAGE_END_EVENT           225



/*
 * Status value when a game square is empty
 */
#define EMPTY_SQUARE                331

/*
 * Status value when a game square contains a black disc
 */
#define BLACK_SQUARE                332

/*
 * Status value when a game square contains a white disc
 */
#define WHITE_SQUARE                333



/*
 * gameEventsDispatcher : Main function to handle game events
 *
 * Parameters           : Unique ID number to identify events and help with debugging
 *                        Type of game event
 *                        The row identifier of the active board square
 *                        The column identifier of the active board square
 *                        The IP address and port number of the opponent
 *
 */
void gameEventsDispatcher( long, int, int, char, char* );


/*
 * updateBoard : Show status of game square at specific location on the board
 *
 * Parameters  : Row label
 *               Column label
 *               Game square status
 *
 */
void updateBoard( int, char, int );


/*
 * resetBoard : Reset all game squares on the board to be all empty
 *
 */
void resetBoard();


/*
 * displayMessage : Appends message to game message console
 *
 * Parameters     : Text message to display
 *
 */
void displayMessage( char* );


/*
 * notifyInit : Send message to opponent initiating a game
 *
 * Parameters : String of opponent host IP address
 *
 */
int notifyInit( char* );


/*
 * notifyPlay : Send message to opponent that you are ready to start playing
 *
 */
int notifyPlay();


/*
 * putNewDisc : Place a new disc on a specific location on the game board
 *
 * Parameters : Row label
 *              Column label
 */
void putNewDisc( int, char );


/*
 * respond    : Send confirmation response to opponent's placement of a new disc
 *
 * Parameters : Row label
 *              Column label
 *
 */
void respond( int, char );


/*
 * getPortNumber : Returns port number of current game program
 *
 * Returns port number if server is connected, else returns NETWORK_SOCKET_CLOSED value
 *
 */
int getPortNumber( void );


/*
 * getIPAddress : Returns IP address of current computer
 *
 * Returns string representing the computer IP address
 *
 */
char* getIPAddress( void );


/*
 * endGame    : Send message to opponent indicating end of game
 *
 * Parameters : TRUE if application should also exit after end of game message has been sent
 *
 */
void endGame( int );
jeev2005 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Treating a 2D array as a 1D array.... John_L C Programming 6 10-18-2007 02:38 PM
passing/pointing to a 2d array jamie85 C Programming 7 10-28-2005 10:16 PM
Read file in 2D array Chook C Programming 1 05-08-2005 12:39 PM
Class Template Trouble pliang C++ Programming 4 04-21-2005 04:15 AM
Struct *** initialization Saravanan C Programming 20 10-09-2003 12:04 PM


All times are GMT -6. The time now is 05:33 AM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22