|
enginço,
I don't want a complete game, as i want to learn, not copy. Also, the code looks horrible to say the least...
Regards,
Gareth.
(FKA gareth111)
|
|
|
|
|
Hi Gareth,
there are many ways to generate and store chess moves, I tried some of them.
The most popular nowadays has the following characteristics:
- use BOARD (a uint, that's unsigned int 64-bit) as the fundamental data type, and let each bit
represent one square.
- use as many BOARD items as you see fit, e.g. one to indicate the position of all white pieces,
one to indicate the position of all white rooks, etc.
- apply bitwise operators all the time: hence pieces=kings|queens|rooks|bishops|knights|pawns
- for move generation, try to use shifts, e.g. if wrooks is a BOARD indicating the position of
white rooks, then they could move one to the left by shifting left by one, except of course for
rooks in the "a" file; so it would look like wrooksLeft1=(wrooks & notAFile) << 1
- doing it this way, you can get very compact code, and avoid a lot of conditional branches and bugs.
- you have to work iteratively for long moves, so rookLeft7 does not make sense, you must iterate
with rookLeft1 since you have to detect occupied squares.
- you can't check yourself; the easiest way to avoid that is make your king behave as a queen, then
as a knight, and see whether it can capture a corresponding piece of the opposing color.
- and of course a lot of BOARD items can be precalculated and stored in some tables.
In my estimate it takes around a thousand lines of code to generate all moves correctly, including
castling, double pawn move, and en-passant.
Hope this helps.
modified on Monday, July 28, 2008 10:44 AM
|
|
|
|
|
I don't play chess however...
What I would do is use an OOP design approach.
The board can be an object that contains information relating to which piece is where.
I would have each type of piece as an object, as well, that has methods associated with it. Each method can then return a valid or invalid move and fire an event that the board object could then act on if the method returns a valid move.
Continuous effort - not strength or intelligence - is the key to unlocking our potential.(Winston Churchill)
|
|
|
|
|
Hi Guy,
that is all pretty nice, but computer chess is about performance. You simply cannot afford to waste
cycles on calling virtual methods and the like if the strength of your computer game is all that
matters. You really have to make the best use of the number of CPU cycles you are allowed.
So OOP is fine for the GUI part of a chess game, but not for the chess engine itself.
That is assuming the end goal is a chess playing program; for pure validation and visualization,
every approach is fine, and then of course OOP is recommended.
|
|
|
|
|
Thanks - I appreciate that as I sometimes forget that the object interface provided is not necessarily the fastest or most efficent way to do things.
Coming from a very heavily procedural background, and having been seduced by OOP, I can sometimes assume that OOP will solve everything.
Continuous effort - not strength or intelligence - is the key to unlocking our potential.(Winston Churchill)
|
|
|
|
|
I have a variable passed into a method as an object. The object type is SQLDBType, I need to test the variable to find out what type it is, not the SQLDBType but the underlying eg varchar datetime (specifically I want to test wether the variable id datetime. Can someone please supply the syntax to find out if the dbtype is datetime
I am currently using the string comparison to "DateTime". However I then want to test the value of the datetime content (checking for #12:00:00# = no date) and falling in a hole.
public SQLParameter CreateParameter(string sParameterName, SqlDbType oDataType,
object oValue, int iLenght, ParameterDirection oDirection)
{
SQLParameter oParam = new SQLParameter();
oParam.ParameterName = sParameterName;
oParam.Length = iLenght;
if (oDataType.ToString() == "DateTime")
{
if (oValue == DBNull.Value)
{ oParam.Value = oValue; }
else
{
oDT = DateTime.Parse(oValue.ToString);
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
SqlDbType is an enum. So you can do:
if (oDataType == SqlDbType.DateTime)
{
}
Regards,
Gareth.
(FKA gareth111)
|
|
|
|
|
AAaahhh - I hate it when it is the simple answer and I have spent the day looking for a complex one. Thanks.
Now how to test whether the value of an object variable is the min date (presumable #12:00;00#)
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Hi All,
I am trying to scrape data from a site.
I have created a Window Form Application with Web Browser control and accessing its form element using like:
HtmlElement heleDay = wbPage.Document.GetElementById("cboDate_Day");
Now this application is working file but its really slow as entire page is to be loaded visually then I can do anything (parsing).
Then I realised that using HTTPWebRequest or WebClient I can do this in faster way. I have tried every thing but its not working.
Actual Page posts for like this:
document.frmStatus.action = "getstatus.asp"
document.frmStatus.submit()
and on this form there is one text box, 3 combo (for date) and one submit button.
Regards
Kumar
|
|
|
|
|
I guess my question is clear? or Posted at correct place?
|
|
|
|
|
I have a problem with the validating event of the datimepicker-control. I use this event to check the correct value of the date i.e. the inputed date shouldn't be in the past. Normally it works fine, but if you manually change the date via keyboard and leaving the control pressing the TAB key, the property 'Value' of the datetimepickers holds the old value. But this only happens, if you i.e. change the month from '01' to '2'. Changing the month from '01' to '02' is working correctly.
Any ideas why this is happening and how to resolve it?
|
|
|
|
|
Hi.
Try using the dateTimePicker_ValueChanged event
Kjetil
|
|
|
|
|
Yes, i can use this event. But in this method there's not possibility to cancel it (see e.cancel = true) and force the user to change the value.
|
|
|
|
|
Hi,
Using the xmlWriterSetting and xmlreaderSettings, I am saving and reading xml files...
So if a new xml data needs to be added to the xml file, I use the xmlWriterSetting to save into the xml file.
Questions:
1)
How is it possible to enhance what I have so that I can UPDATE an xml file?
2)
Do I have to use xmlDocument?
3)
Can I update using the xmlWriterSetting?
Thanks
|
|
|
|
|
What i would use is Xml Serialization[^].
Don't be overcome by evil, but overcome evil with good
|
|
|
|
|
Hi,
I am deploying 5 projects in a single msi file.
I need to add a form so that at the time of installation the user can make a custom installation of the products (like we do while installing MS Office)..
How can I achieve this....?
THANKS in advance for any suggestions....
|
|
|
|
|
The only way that I can think of is to write yet another program that should be started when the user clicks on it. That new application would then start the selected installer with the Process.Start() method.
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios
Discounted or Free Software for Students:
DreamSpark - downloads.channel8.msdn.com
MSDN Academic Alliance - www.msdnaa.com
|
|
|
|
|
Thanks Mr.Thomas for the suggestion...
But I think there should be some other better option to do this...
|
|
|
|
|
That is the only option that I can think of with the out-of-the-box visual studio. The only other option that I can think of is to buy a third party installer creation suite.
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios
Discounted or Free Software for Students:
DreamSpark - downloads.channel8.msdn.com
MSDN Academic Alliance - www.msdnaa.com
|
|
|
|
|
Hello,
The following code shows how to use the openFileDialog to read the contents of a .csv file into a textbox.
Question:
After selecting the file iin the dialog, how do I actually open the file?
remember that I would like to open the .csv file and NOT read it into the textbox.
StreamReader ts = null;
openFileDialog1.CheckFileExists = true;
openFileDialog1.CheckPathExists = true;
openFileDialog1.DefaultExt = "csv";
openFileDialog1.Filter = "Text files (*.csv)|*.csv|" + "All files|*.*";
openFileDialog1.Multiselect = false;
openFileDialog1.FilterIndex = 2;
openFileDialog1.ValidateNames = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
ts = new StreamReader(openFileDialog1.OpenFile());
txtSQL.Text = ts.ReadToEnd();
}
}
Thanks
|
|
|
|
|
change openFileDialog1.OpenFile() to openFileDialog1.Filename
|
|
|
|
|
Hi,
As I mentioned in the first post, please note that I would like to actually open the file rather than reading it into the textbox.
Like as if you double click the file and the .csv file opens.
Thanks
|
|
|
|
|
try
Process.Start(filename)
|
|
|
|
|
|