C:\rexdk\Projects\RexMind\rexmind.c.html
//written by Joe Watzko
#include <stdlib.h>
#include <string.h>
#include <gtype.h>
#include <math.h>
#include "rex/rex.h"
#include "pics.h"
/*#define DEBUG */
typedef struct
{
UINT year;
UCHAR month, day, week;
} DATE;
typedef struct
{
CHAR hour, minute, second;
} TIME;
int pa, cn;
int master[4];
int me[4];
int masterf[4];
int mef[4];
char *pics_bmps[] = {
caro,
cross,
fivec,
heart,
pik,
star
};
Enter()
{
int flag;
MSG msg;
flag=1;
while(flag) {
DsEventMessageGet(msg);
switch (msg.message) {
case MSG_DS_COMMAND:
if(msg.bCode==67) {
flag=0;
}
break;
}
}
}
GetResults()
{
int i,j;
/* Check for right color, right place */
for (i = 0; i < 4; i++) {
if (me[i] == master[i]) {
masterf[i] = 1;
mef[i] = 1;
pa++;
}
}
/* Check for right color, wrong place */
for (i = 0; i < 4; i++) {
if (masterf[i] == 1)
continue;
for (j = 0; j < 4; j++) {
if (mef[j] == 1)
continue;
if (master[i] == me[j]) {
cn++;
masterf[i] = 1;
mef[j] = 1;
break;
}
}
}
}
main() {
MSG msg;
int flag;
int d, i, j, k, x, y;
char str[20];
char str1[2];
DATE date;
TIME time;
DsClearScreen();
DsPrintf(40,10,16,"RexMind aka Master Mind by J.W.");
DsDisplayLine(40,25,190,0,85);/*x,y, x offset, y offset, bitpattern*/
DsPrintf(50,35,32,"Find the four hidden symbols");
DsPrintf(50,45,32,"Multiples of a symbol are allowed");
DsPrintf(50,55,32,"You've 6 guesses.");
DsDisplayBitmapDraw(2, 35, icon, 0);
DsDialogTextButton(90,90,70,20,67,"Start");
DsDisplayLine(0,75,240,0,255);/*x,y, x offset, y offset, Solid line?*/
Enter();
DsEventClear();
DsClearScreen();
/* create the input buttons */
k = 0;
for(i=0;i<2;i++) {
for(j=0;j<3;j++) {
DsDisplayBitmapDraw(190+i*22, j*22+5, pics_bmps[k], 0);
DsEventAdd(190+i*22, j*22+5, 20, 20, 61+k, 1);
k++;
}
}
DsDialogTextButton(190,90,46,18,67,"Guess");
DsDisplayBlockReverse(190, 90, 46, 18, 1);
/* random seeded number */
DsTimeGet(&date, &time);
srand(time.hour * 60 * 60 + time.minute * 60 + time.second);
for (i=0;i<4;i++) {
master[i] = abs (rand()) % 6;
#ifdef DEBUG
itoa(str,master[i]);
DsPrintf(190+i*10, 108, 16, str);
#endif
}
d=0; /* Count of symbols entered */
k=0; /* Count of tries */
for (k=0; k<6; k++) {
flag=1;
do {
pa = 0; /* Right Color, Right Place */
cn = 0; /* Right Color, Wrong Place */
for (i=0; i<4; i++) {
masterf[i] = 0;
mef[i] = 0;
}
DsEventMessageGet(msg);
switch (msg.message) {
case MSG_DS_CLOSE:
DsClearScreen();
DsAddinTerminate();
case MSG_DS_KEY_DOWN:
DsClearScreen();
DsAddinTerminate();
case MSG_DS_PAINT:
break;
case MSG_DS_COMMAND:
if(msg.bCode==61){x=0;}
if(msg.bCode==62){x=1;}
if(msg.bCode==63){x=2;}
if(msg.bCode==64){x=3;}
if(msg.bCode==65){x=4;}
if(msg.bCode==66){x=5;}
if(msg.bCode==67) { /* Guess Button pressed */
if(d<4){break;} /* Wait until 4 symbols are set */
GetResults();
#ifdef DEBUG
itoa(str, pa);
DsPrintf(172, k*20, 16, str);
itoa(str, cn);
DsPrintf(182, k*20, 16, str);
#endif
/* Display Placeholder */
for (i = 0; i < 4; i++) {
DsDisplayBlock(i*20+98, k*20+9, 3, 3, 0);
}
/* Display Results */
for (i = 0; i < pa; i++) {
DsDisplayBitmapDraw(i*20+90, k*20, hitfull , 0);
}
for (i = 0; i < cn; i++) {
DsDisplayBitmapDraw(i*20+pa*20+90, k*20, hitnear , 0);
}
d=0; /* Reset entered Symbol Count */
DsDisplayBlockReverse(190, 90, 46, 18, 1); /* Grey out Guess Button */
flag=0;
break;
} /* End Guess Button pressed */
if (d > 3) { /* Next choice of symbols within same try */
DsDisplayBlockReverse(190, 90, 46, 18, 1);
d=0;
}
me[d]=x;
DsDisplayBitmapDraw(d*20, k*20, pics_bmps[me[d]], 1); /* Display selected Icon */
DsSleep(15);
DsDisplayBitmapDraw(d*20, k*20, pics_bmps[me[d]], 0); /* Flash Icon */
if (d == 3) {
DsDialogTextButton(190,90,46,18,67,"Guess"); /* Enable Guess Button */
}
d++;
break;
}
} while (flag);
if (pa == 4){
k++;
break;
} /* Exit Loop if all found */
} /* End for loop */
itoa(str1, k);
strcpy(str, "You needed ");
strcat(str, str1);
if (k > 1)
strcat(str, " guesses");
else {
strcat(str, " guess");
}
if (pa != 4)
strcpy(str, "Sorry you loose");
DsDisplayBlockReverse(0, 0, 240, 120, 1); /* Grey out Playfield */
DsDialogTextButton(50,50,150,20,67,str);
Enter();
DsClearScreen();
DsAddinTerminate(); /* Exit */
}