Computer Chess Club Archives


Search

Terms

Messages

Subject: a little programming help ...

Author: Mike Byrne

Date: 18:28:57 04/24/04


This is the Windows source for "C" for move annoucnement.  It's a separate
program that Crafty/windows calls for move annoucnement.  I would like to embed
this program into Crafty so a user would not need two separate programs.

Any ideas the best way to do this - I have tried - but not knowing enough about
programming, all my attempls have failed.

////////////////////////////////////////////////////////////////////////////////////////////
// Speak.c
//
// Crafty 19.9 introduced "speaking" of moves by calling
// external program speak with the move as its only argument.
//
// This program parses the move and plays it using English .wav files
// obtained from http://www.playwitharena.com
//
//
// Developed and compiled under MSVC 6 (SP5)
//
// History
// -------
// Jan. 10, 2004 - ver 1.00
// Jan. 13, 2004 - ver 1.01 fix strcat of from / to strings
//                          was strcat(cWork + 1, ...)
////////////////////////////////////////////////////////////////////////////////////////////

/******************************************************************************************/
#include <string.h>
#include <windows.h>
#include <mmsystem.h>

/******************************************************************************************/

void SpeakMove(char *strFilename)
{
	char cWork[255];


	strcpy(cWork, ".\\Sounds\\Eng\\");
	strcat(cWork, strFilename);
	strcat(cWork, ".wav");
	PlaySound(cWork, NULL, SND_SYNC);
}

/******************************************************************************************/

int main(int argc, char* argv[])
{
	if (argc == 2)
		{
		int x;
		char cMove[255], cWork[255];


		strcpy(cMove, argv[1]);

		if (
			(!strcmp(cMove, "O-O")) ||
			(!strcmp(cMove, "O-O-O")) ||
			(!strcmp(cMove, "Stalemate")) ||
			(!strcmp(cMove, "Drawaccept")) ||
			(!strcmp(cMove, "Drawoffer")) ||
			(!strcmp(cMove, "Resign")) ||
			(!strcmp(cMove, "Checkmate"))
		   ) SpeakMove(cMove);
		else
			{
			for (x = 0; x < (int)strlen(cMove); x++)
				{
				switch(cMove[x])
					{
					case 'R' :
						SpeakMove("Rook");
						break;

					case 'N' :
						SpeakMove("Knight");
						break;

					case 'B' :
						SpeakMove("Bishop");
						break;

					case 'Q' :
						SpeakMove("Queen");
						break;

					case 'K' :
						SpeakMove("King");
						break;

					case 'P' :
						SpeakMove("Pawn");
						break;

					case 'x':
						SpeakMove("Takes");
						break;

					case '#':
						SpeakMove("Checkmate");
						break;

					case 'a' :
					case 'b' :
					case 'c' :
					case 'd' :
					case 'e' :
					case 'f' :
					case 'g' :
					case 'h' :
						cWork[0] = cMove[x];
						cWork[1] = '\0';
						strcat(cWork, "from");
						SpeakMove(cWork);
						break;

					case '1' :
					case '2' :
					case '3' :
					case '4' :
					case '5' :
					case '6' :
					case '7' :
					case '8' :
						cWork[0] = cMove[x];
						cWork[1] = '\0';
						strcat(cWork, "to");
						SpeakMove(cWork);
						break;

					} // switch
				} // for
			} // else
		} // if argc

	return 0;
}




This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.