On September 12, 2022 at 1:58:31 AM UTC-6, MK wrote:
> In GUI mode, it asks you to press "OK" after each game, which
> I solved by creating a tiny program to keep sending it "ENTER"
> automatically for a set number of times, i.e. 100, 500, 1000, so
> that I could walk away from it and later save the sessions in
> manageable size files.
In case any of you want to do the same, here is a simple sample
code for it: (Just change the number of times to run and compile)
===================================================
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int seed;
byte keyp;
HWND xgdd;
int main() {
seed = 1;
keyp = 13;
while (seed < 200) {
while ((xgdd = FindWindow (NULL, "GNU Backgammon - Message")) == 0) {
sleep(1);
}
SetForegroundWindow (xgdd);
keybd_event (keyp, 0, 0, 0);
keybd_event (keyp, 0, KEYEVENTF_KEYUP, 0);
printf ("Game: %d \n", seed);
sleep(1);
xgdd = 0;
seed = seed + 1;
}
exit(0);
}
===================================================
And while at it, for the ones who sneered at my simple sample
code using the rand() function as not ramdom enough, here is
the same code using Mersenne Twister:
===================================================
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
int N = 624;
int M = 397;
unsigned long mt[624];
int mti = 624+1;
int seed, die1, die2;
byte keyp;
HWND xgdd;
/* generates a random number on [0,0xffffffff]-interval */
unsigned long genrand(void) {
unsigned long y;
unsigned long mag01[2]={0x0UL, 0x9908b0dfUL};
if (mti >= N) {
int kk;
if (mti == N+1) {
/* initializes mt[N] with a seed */
mt[0] = seed & 0xffffffffUL;
for (mti = 1; mti < N; mti++) {
mt[mti] = (1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
mt[mti] &= 0xffffffffUL; }
for (kk = 0; kk < N - M; kk++) {
y = (mt[kk]&0x80000000UL)|(mt[kk+1]&0x7fffffffUL);
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1UL]; }
for (;kk < N-1;kk++) {
y = (mt[kk]&0x80000000UL)|(mt[kk+1]&0x7fffffffUL);
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1UL]; }
y = (mt[N-1]&0x80000000UL)|(mt[0]&0x7fffffffUL);
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL];
mti = 0;
}
}
y = mt[mti++];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680UL;
y ^= (y << 15) & 0xefc60000UL;
y ^= (y >> 18);
return y;
}
int main() {
seed = (time(NULL)% 65536);
printf ("Seed %d\n", seed);
while (seed > 0) {
while ((xgdd = FindWindow (NULL, "Dice")) == 0) {
sleep (1);
}
die1 = genrand() % 6 + 1;
//printf ("Rolled: %d ", die1);
//sleep (1);
die2 = genrand() % 6 + 1;
printf ("Rolled: %d %d mti: %d\n", die1, die2, mti);
SetForegroundWindow (xgdd);
keyp = die1 + 48;
keybd_event (keyp, 0, 0, 0);
keybd_event (keyp, 0, KEYEVENTF_KEYUP, 0);
keyp = die2 + 48;
keybd_event (keyp, 0, 0, 0);
keybd_event (keyp, 0, KEYEVENTF_KEYUP, 0);
sleep (1);
xgdd = 0;
}
exit (0);
}
===================================================
As always, you're all welcome but don't say I don't contribute...
MK