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 */
}