Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
gamer111111
Člen
Avatar
gamer111111:16.3.2015 19:11

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:16.3.2015 21:33

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:20.3.2015 17:47

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):21.3.2015 9:21
#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:21.3.2015 10:01

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:21.3.2015 23:01

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:22.3.2015 15:06

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):23.3.2015 14:16

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):23.3.2015 14:51

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:23.3.2015 20:57

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:23.3.2015 21:01

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
Odpovídá na gamer111111
Libor Šimo (libcosenior):24.3.2015 9:06

V čom to compiluješ?

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):24.3.2015 15:01

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:26.3.2015 18:20

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):26.3.2015 18:25

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
gamer111111
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
gamer111111:31.3.2015 15:23

Nevím jak to dokončit

 
Nahoru Odpovědět 31.3.2015 15:23
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na gamer111111
David Novák:1.4.2015 8:57

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):1.4.2015 18:27

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:12.4.2015 20:37

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):15.4.2015 10:44

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:15.4.2015 10:44

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):15.4.2015 12:18

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.