On Sunday, 31 October 2021 at 17:02:00 UTC, Ali Çehreli wrote:
On 10/31/21 9:54 AM, pascal111 wrote:
Hi! I'm C learner and found the high similarity between C and D, and was converting C code into D

Welcome! :) In case it makes to your use cases, check out -betterC as well:

  https://dlang.org/spec/betterc.html

> but couldn't get the equivalent of this C
statement "srand(time(NULL));".

Just comment that line out. :) D's pseudo-random generators start randomized by default:

import std.stdio;
import std.random;

void main() {
  // Pick a number between [0,10)
  writeln(uniform(0, 10));
}

The documentation is at

  https://dlang.org/phobos/std_random.html

Ali


Thanks! the code works now:

/* Acey Ducey game,
originally programmed in
BASIC */


// D programming language

import std.stdio;
import core.stdc.stdlib;
import std.ascii;
import core.stdc.string;
import core.stdc.stdio;
import core.time;
import std.conv;
import std.random;



/*
char* card_name(int); // turning cards valuse into strings function

void no_money_test(ref int); // money = 0 test
*/



// turning cards valuse into strings function
void card_name(int x, ref string c)
{

/* char* c=cast(char*) malloc((strlen("queen")+1)*(char.sizeof));

if(!c){
 writeln("A memory allocation failed!");
 exit(EXIT_FAILURE);} */

switch (x)
{

case 11:
        c="Jack";
        break;

case 12:
        c="Queen";
        break;
        
case 13:
        c="King";
        break;
        
case 14:
        c="Ace";
        break;
        
default:
        c=to!string(x);


}


}



// money = 0 test
void no_money_test(ref int your_money)
{

char q;

if (your_money == 0)

{


do
{
writeln("Oops! you have no money to bet with,");
write("do you want playing again (y/n)? ");

readf(" %c", &q);

} while ((toLower(q)!='y') &&
           (toLower(q)!='n'));

if (toLower(q)=='y') // nasted in 'if money = 0'
{

your_money = 100;

}

else
   exit(EXIT_SUCCESS);

} // if money = 0

}




int main()
{

int your_money=100;
int card_A,
    card_B, card_C;

string card_A_name,
        card_B_name,
        card_C_name;

char q;

int bet_much;

//srand(time(NULL));



do // 1st do
{


writeln("You've ", your_money, "$");


// Generating the two cards:

do
{

card_A = uniform(0, 13)+2; //(rand()%13)+2;
card_B = uniform(0, 13)+2;

} while (!((card_B - card_A) > 2) &&
           !((card_A==2)&&(card_B==14)));


card_name(card_A, card_A_name);
card_name(card_B, card_B_name);

writeln("Here are your two cards: ", card_A_name, " ", card_B_name);



// Betting query:


card_C = uniform(0, 13)+2;

do
{

write("Do you'll bet (y/n/e = (exit))? ");
readf(" %c", &q);

} while ((toLower(q)!='y') &&
           (toLower(q)!='n') &&
           (toLower(q)!='e'));


// agreeing betting

if (toLower(q)=='y')

{


do
{
write("With how much? ");
readf(" %d", &bet_much);

if (bet_much>your_money)
   {

     writeln("You don't have this much to bet with,");
     writeln("you have ", your_money, "$");

   }
        
} while (!(bet_much<=your_money));


if ((card_C>=card_A) && (card_C<=card_B)) // following agreeing betting 'if'
   {

        
    card_name(card_C, card_C_name);
    writeln("You are right! ");
    writeln("3rd card is: ", card_C_name);

    your_money+=bet_much;

   }

else
    {

     card_name(card_C, card_C_name);
     writeln("Oops! you are wrong!");
     writeln("3rd card is: ", card_C_name);
     your_money-=bet_much;

    }

}

else // 'else if' of agreeing betting 'if'
 if(toLower(q)=='e')
    exit(0);
else // considered final 'else' of agreeing betting 'if'
 writeln("CHICKEN!!!");



// Your money = 0 test

no_money_test(your_money);



} while (true); // 1st do




return 0;
}




// C version of the same game

/* Acey Ducey game,
originally programmed in
BASIC */


#include <iostream>
#include <cstdlib>
#include <string>
#include <cctype>
#include <cstring>
#include <cstdio>

using namespace std;



char *card_name(int); // turning cards valuse into strings function

void no_money_test(int&); // money = 0 test


int main(void)
{

int your_money=100;
int card_A,
    card_B, card_C;

char q;

int bet_much;

srand(time(NULL));



do // 1st do
{


cout << "You've "
     << your_money
     << "$" << endl;


// Generating the two cards:

do
{

card_A = (rand()%13)+2;
card_B = (rand()%13)+2;

} while (!((card_B - card_A) > 2) &&
           !((card_A==2)&&(card_B==14)));


cout << "Here are your two cards: "
     << card_name(card_A) << " "
     << card_name(card_B) << endl;



// Betting query:


card_C = (rand()%13)+2;

do
{

cout << "Do you'll bet (y/n/e = (exit))? ";
cin >> q;

} while ((tolower(q)!='y') &&
           (tolower(q)!='n') &&
           (tolower(q)!='e'));


// agreeing betting

if (tolower(q)=='y')

{


do
{
cout << "With how much? ";
cin >> bet_much;

if (bet_much>your_money)
   {

     cout << "You don't have this much to bet with,"
          << endl << "you have " << your_money << "$"
          << endl;

   }
        
} while (!(bet_much<=your_money));


if ((card_C>=card_A) && (card_C<=card_B)) // following agreeing betting 'if'
   {

    cout << "You are right! " << endl
         << "3rd card is: "
         << card_name(card_C) << endl;

    your_money+=bet_much;

   }

else
    {

     cout << "Oops! you are wrong!" << endl
          << "3rd card is: "
          << card_name(card_C) << endl;
     your_money-=bet_much;

    }

}

else // 'else if' of agreeing betting 'if'
 if(tolower(q)=='e')
    exit(0);
else // considered final 'else' of agreeing betting 'if'
 cout << "CHICKEN!!!" << endl;



// Your money = 0 test

no_money_test(your_money);



} while (true); // 1st do




return 0;
}


// turning cards valuse into strings function
char *card_name(int x)
{

char *c=(char *) malloc((strlen("queen")+1)*sizeof(char));

if(!c){
 cerr << "A memory allocation failed!"
      << endl;
 exit(EXIT_FAILURE);}

switch (x)
{

case 11:
        strcpy(c,"Jack");
        break;

case 12:
        strcpy(c,"Queen");
        break;
        
case 13:
        strcpy(c,"King");
        break;
        
case 14:
        strcpy(c,"Ace");
        break;
        
default:
        sprintf(c,"%d",x);


}

return c;
}


// money = 0 test
void no_money_test(int& your_money)
{

char q;

if (your_money == 0)

{


do
{
cout << "Oops! you have no money to bet with,"
     << endl << "do you want playing again (y/n)? ";

cin >> q;

} while ((tolower(q)!='y') &&
           (tolower(q)!='n'));

if (tolower(q)=='y') // nasted in 'if money = 0'
{

your_money = 100;

}

else
   exit(EXIT_SUCCESS);

} // if money = 0

}

Reply via email to