Avatar
gamer111111
Člen
Avatar
gamer111111:

Potřebuji pomoct s jednoduchou hrou, která vykreslí na obrazovce 3 hrací kostky, na kterých se budou střídat náhodná čísla. Cílem hráče je zmáčknout mezerník v případě, že jsou alespoň na 2 kostkách stejná čísla. Hra bude počítat body.

 
Odpovědět 16.3.2015 19:11
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Nejsem si jistý, zda tady moc lidí bude (pozitivně) reagovat na příspěvek, který si mohou vyložit i tak, že bys chtěl, aby za tebe někdo jiný ten úkol v podstatě udělal.

Každopádně, zadání známe (alespoň jeho obrysy). Zkus specifikovat, co ti přesně dělá problémy.

Nahoru Odpovědět  +5 16.3.2015 21:33
2 + 2 = 5 for extremely large values of 2
Avatar
gamer111111
Člen
Avatar
gamer111111:

Zatím mám toto ale nevím jak to udělat aby se mi ty čísla v konzoly střídala.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i, n;
time_t t;

n = 1;

srand;

for( i = 0 ; i < n ; i++ ) {
printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");

printf("\n");

printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");

printf("\n");

printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");
}

system ("PAUSE");
return(0);
}

 
Nahoru Odpovědět 20.3.2015 17:47
Avatar
Odpovídá na gamer111111
Libor Šimo (libcosenior):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* funkcia - pauza na 1 milisekundu */
void sleep(unsigned int msecund)
{
    clock_t ciel; // deklarácia premennej typu clock_t
    ciel = msecund + clock(); // vložiť do premennej čas o trvaní 1 milisekundy (sekunda má 1000 milisekúnd)
    while (ciel > clock()); // beží kým sa nevy-clock-uje po 0 (nulu)
}

int main(void)
{
    int i, n;

    n = 10;

    srand(time(0));

    for( i = 0 ; i < n ; i++ ) {
        printf("--- \n");
        printf("[%d] \n", rand() % 6);
        printf("--- \n");

        printf("\n");

        printf("--- \n");
        printf("[%d] \n", rand() % 6);
        printf("--- \n");

        printf("\n");

        printf("--- \n");
        printf("[%d] \n", rand() % 6);
        printf("--- \n");
        sleep(1500);
        system("cls");
    }

    system ("PAUSE");

    return(0);
}
Nahoru Odpovědět 21.3.2015 9:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

gamer111111 Libor Šimo (libcosenior)

Když už děláte něco v C, tak to zkuste dělat multiplatformně ;)
Tj. nepoužívat system("PAUSE") a podobně.. Doporučuju překládat se specifikovaným standardem a pedantic kontrolou.

Nahoru Odpovědět 21.3.2015 10:01
Chyba je mezi klávesnicí a židlí.
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

Ohledně toho se mi líbil jeden příspěvek na fóru, kde se to řešilo.. :D

"Don't use system("anything"). It is slow. It is disliked by antivirus software. It is OS-dependent. It tags you as an absolute beginner. And it is a massively huge, gaping, ugly security hole.
If all you are doing is some silly homework assignment or playing with your own code, it is fine. But for everything else: please, please don't."

Ale abych byl kontruktivní, tak se to dá jednoduše nahradit například vypsáním textu a prázdným getcharem nebo něco podobného.. Otázka ale je, proč to vlastně používat.. Nevím přesně, jak je to ve windows, když spustíš normálně terminálovou aplikaci.. Zavře se hned po returnu z main? Vím, že to dělají některé IDE (což je ale teda hrubý nedostatek), ale docela by mě i zajímalo, jak se bude chovat normálně spuštěná aplikace..

Pokud by se hned zavřela (což nechceme), tak když už system(něco), tak to dát do podmíněného překladu..

#ifdef _WIN32
  system("pause");
#endif

Takhle se tam to systémové volání vloží jen při překladu pro windows a nebude házet undefined error při překladu např. pod linuxem.. :)

Samozřejmě stejně to jde udělat pro linux, mac, unix.. Obecně je dobrá praxe tohle udělat, když už použiju nějaký ten platform-specific kód..

Editováno 21.3.2015 23:04
Nahoru Odpovědět  +1 21.3.2015 23:01
Chyba je mezi klávesnicí a židlí.
Avatar
gamer111111
Člen
Avatar
gamer111111:

Díky za rady, ale potřeboval bych, aby se mi ty čísla v té kostce měnila, a já když uvidím dvě stejná čísla, tak to zastavím.

 
Nahoru Odpovědět 22.3.2015 15:06
Avatar
Libor Šimo (libcosenior):

Vyskúšaj tento programík.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#if GETCH_LINUX
int getch()
{
    struct termios oldt,
    newt;
    int ch;
    tcgetattr( STDIN_FILENO, &oldt );
    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
    return ch;
}
#endif


#ifdef _WIN32
    #include <conio.h>
    #define CLEAR system("cls")
    #define GETCH_LINUX 0
#else
    #include <termios.h>
    #include <unistd.h>
    #define CLEAR system("clear")
    #define GETCH_LINUX 1
#endif

int main(void)
{
    int i, n;
    char c;

    n = 10;
    srand(time(0));
    for( i = 0 ; i < n ; i++ ) {
        CLEAR; // pre win, linux, unix
        printf("--- \n");
        printf("|%d| \n", rand() % 6);
        printf("--- \n");

        printf("\n");

        printf("--- \n");
        printf("|%d| \n", rand() % 6);
        printf("--- \n");

        printf("\n");

        printf("--- \n");
        printf("|%d| \n", rand() % 6);
        printf("--- \n");

        /* klávesou Enter pokračuješ ďalej, klávecou 's' to stopneš */
        c = getch();
        if (c == 's')
            break;
        else
            continue;
    }
    printf("\nSTOP!\nUkoncite lubovolnou klavesou.\n");
    getch();

    return(0);
}
Nahoru Odpovědět 23.3.2015 14:16
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na gamer111111
Libor Šimo (libcosenior):

Teraz som si všimol, že v zadaní máš stopnutie medzerníkom, tak si to v kóde oprav.

Nahoru Odpovědět 23.3.2015 14:51
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
gamer111111
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
gamer111111:

Nevím přesně, kde to je, nějak se v tom neorientuji.

 
Nahoru Odpovědět 23.3.2015 20:57
Avatar
gamer111111
Člen
Avatar
gamer111111:

Už jsem to našel, ale mám jiný problém ta konzole se mi objeví, ale jak cokoliv zmáčknu tak se vypne?

 
Nahoru Odpovědět 23.3.2015 21:01
Avatar
Nahoru Odpovědět 24.3.2015 9:06
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na gamer111111
Libor Šimo (libcosenior):

Veľmi staré IDE, prejdi na Code::Blocks alebo Visual Studio.

Nahoru Odpovědět 24.3.2015 15:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
gamer111111
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
gamer111111:

Toto funguje dobře, ale ještě bych potřeboval, abych to mohl zastavit, a aby mi to počítalo ty body, když jsou dvě čísla stejné.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* funkcia - pauza na 1 milisekundu */
void sleep(unsigned int msecund)
{
clock_t ciel; // deklarácia premennej typu clock_t
ciel = msecund + clock(); // vložiť do premennej čas o trvaní 1 milisekundy (sekunda má 1000 milisekúnd)
while (ciel > clock()); // beží kým sa nevy-clock-uje po 0 (nulu)
}

int main(void)
{
int i, n;

n = 10;

srand(time(0));

for( i = 0 ; i < n ; i++ ) {
printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");

printf("\n");

printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");

printf("\n");

printf("--- \n");
printf("[%d] \n", rand() % 6);
printf("--- \n");
sleep(1500);
system("cls");
}

system ("PAUSE");

return(0);
}

 
Nahoru Odpovědět 26.3.2015 18:20
Avatar
Odpovídá na gamer111111
Libor Šimo (libcosenior):

Trosku sa musis posnazit aj sam. Zakladny kod mas, teraz to uz len dokoncit. ;-)

Nahoru Odpovědět 26.3.2015 18:25
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na gamer111111
David Novák:

zkoušej.. ;)
Jinak se programovat nikdy nenaučíš.. musíš se naučit myslet.. dekomponovat problém na podproblémy.. Když to někdo napíše za tebe, je ti to k ničemu.. V dospělosti za tebe nikdo pracovat nebude.

Nahoru Odpovědět 1.4.2015 8:57
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na gamer111111
Libor Šimo (libcosenior):

Je tam pre mňa problém s threadom, nemám s tým ešte žiadne skúsenosti. Je divné, že ste dostali takú náročnú úlohu.
Ale možno špatne rozumiem zadaniu a je to jednoduché.

Nahoru Odpovědět 1.4.2015 18:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
gamer111111
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
gamer111111:

Skoro to už mám ale nevím jak to zastavovat tím mezerníkem, můžete mi pomoct?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* funkcia - pauza na 1 milisekundu */
void sleep(unsigned int msecund)
{
clock_t ciel; // deklarácia premennej typu clock_t
ciel = msecund + clock(); // vložiť do premennej čas o trvaní 1 milisekundy (sekunda má 1000 milisekúnd)
while (ciel > clock()); // beží kým sa nevy-clock-uje po 0 (nulu)
}
int main(void)
{
int i, n;
int a,b,c,body,zdrzo­vac;
body= 0;
n = 10;
srand(time(0));
for( i = 0 ; i < n ; i++ ) {
printf("--- \n");
a = rand() % 6;
a++;
printf("[%d] \n", a);
printf("--- \n");
printf("\n");
printf("--- \n");
b = rand() % 6;
b++;
printf("[%d] \n", b);
printf("--- \n");
printf("\n");
printf("--- \n");
c = rand() % 6;
c++;
printf("[%d] \n", c);
printf("--- \n");
if (a == b) {
body++;
}
if (a == c) {
body++;
}
if (b == c) {
body++;
}
printf(" \nAktualni pocet bodu: %d\n", body);
sleep(1500);
system("cls");
}
printf(" \n Celkovy pocet bodu : %d \n", body);
getch();
system ("PAUSE");
return(0);
}

 
Nahoru Odpovědět 12.4.2015 20:37
Avatar
Nahoru Odpovědět 15.4.2015 10:38
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):

Samozrejme, že to nie je dokonalé, na tom nemal čas. :)

Nahoru Odpovědět 15.4.2015 10:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Novák:

Jsi na něho nějaký hodný - měl by se to naučit sám ;)

Jo a pokud by byl OP někdy na vysoké, tak s takovým to postupem prakticky okamžitě skončí - plagiátorství a disciplinární komise..

Nahoru Odpovědět 15.4.2015 10:44
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na David Novák
Libor Šimo (libcosenior):

Ten chlapec nikdy nebude programovať a navyše si myslím, že keď odovzdá to čo som napísal, môže s tým mať problém. Ak pochopí princíp (popísal som to myslím dostatočne), môže si to upraviť a bude to jeho. ;)

Nahoru Odpovědět  +1 15.4.2015 12:18
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.