Program nauki angielskiego - gra w słowa

0

Witam!
Za zadanie miałem napisać mini gre do nauki języka angielskiego, coś podobnego jak gra BadaBum jesli ktoś kojarzy. Na środku ekranu miało wyświetlać się słowo po polsku, a w rogach ekranu 4 propozycje tłumaczenia tego słówka po angielsku. Wciskając odpowiednio klawisz 1,2,3 lub 4 mieliśmy dokonywać wyboru. Oprócz tego za dobrą odpowiedź miał być przyznawany punkt, a za złą odejmowany 1 punkt. Punktacja ma być także wyświetlana. Prawie mi się udało, jednak program na pewną wadę. Za kazdym razem dobrą odpowiedzią jest pierwsze słowo, nie ma tutaj żadnej losowości. Problem w tym, ze nie mam pojęcia jak zastosować tutaj funkcję random/randomize tak jak w Pascalu. Może ktoś pomóc? Daję mój kod, który napisałem.

#include <cstdlib>
#include <iostream>
#include <conio.h>
#include "console.hpp"

using namespace std;
using namespace ddt::console;

 struct jezyk
 {string polski;
 string angielski;
 };

int main()
{  
jezyk jezyki[10];
jezyki[0].polski="biurko"; 
jezyki[1].polski="okno";     
jezyki[2].polski="pies";     
jezyki[3].polski="jablko";     
jezyki[4].polski="szkola";
jezyki[5].polski="rower"; 
jezyki[6].polski="drukarka"; 
jezyki[7].polski="pilka"; 
jezyki[8].polski="pogoda"; 
jezyki[9].polski="drzewo";      

jezyki[0].angielski="desk"; 
jezyki[1].angielski="window";     
jezyki[2].angielski="dog";     
jezyki[3].angielski="apple";     
jezyki[4].angielski="school";
jezyki[5].angielski="bike"; 
jezyki[6].angielski="printer"; 
jezyki[7].angielski="ball"; 
jezyki[8].angielski="weather"; 
jezyki[9].angielski="tree"; 

 int ster=0;
 char znak;
 int licznik=0;
    do
    {
      gotoxy(36,11);     
      cout<<jezyki[ster].polski<<endl;
      gotoxy(34,12);  
      cout<<"Punkty: "<<licznik<<endl;
      gotoxy(30,13);  
      cout<<"K - konczy program";
      gotoxy(2,2);
      cout<<"1. "<<jezyki[ster].angielski;
      
      gotoxy(70,2);
      if ((ster+1) > 9)
      ster=1;
      cout<<"2. "<<jezyki[ster+1].angielski;
      
      gotoxy(2,24);
      if ((ster+2) > 9)
      ster=1;
      cout<<"3. "<<jezyki[ster+2].angielski;
      
      gotoxy(70,24);
      if ((ster+3) > 9)
      ster=1;
      cout<<"4. "<<jezyki[ster+3].angielski;

      
      znak = getch();
      if (znak == '1')
        {
        licznik++;      
        ster++;
         if (ster==10)
           ster=0;         
        }
      if (znak != '1')
        {
        licznik--;
        ster++;
         if (ster==-1)
           ster=9;
        }  
      system("cls");    
    }  

  while (!((znak=='k') || (znak=='K')));

}
 
0

Żeby iść z duchem czasu.
http://www.cplusplus.com/reference/random/?kw=random
możesz wykorzystać podany tam kod

std::default_random_engine generator; //jako parametr możesz podać seed (ziarno), np aktualny czas. Wtedy generowane wartości nie będą się powtarzać przy każdym uruchomieniu.
    std::uniform_int_distribution<int> distribution(1,4);
    int pseudorandomNumber = distribution(generator);

Wtedy przygotowujesz sobie zestaw 4 słów, w którym jedno jest poprawne i zamieniasz słowo o wylosowanym indeksie w tablicy ze słowem, któro jest poprawne (np trzymaj je zawsze na początku tablicy).

0

O losowaniu liczb poczytasz choćby tutaj http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Pseudolosowe-liczby-calkowite/290, losujesz naturalnie nie tylko pozycję którą zajmuje poprawne słowo, ale też i "zamienniki". Jako że ja spod "pingwina" to kodu nie odpalę a co za tym idzie nie sprawdzę/poprawie

0

Spróbowałem wprowadzić ten rand, ale nie mam pojęcia jak to zastosować. wiem, że to jest forum dla prawdziwych programistów i dla każdego z Was to banalne zadania, ale nic z tego nie rozumiem. Nie jestem dobrym programistom, mam podstawy w szkole i tyle. Nie wiem co tu zmienić, zrobiłem coś takiego

 #include <cstdlib>
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include "console.hpp"

using namespace std;
using namespace ddt::console;

 struct jezyk
 {string polski;
 string angielski;
 };

int main()
{  
jezyk jezyki[10];
jezyki[0].polski="biurko"; 
jezyki[1].polski="okno";     
jezyki[2].polski="pies";     
jezyki[3].polski="jablko";     
jezyki[4].polski="szkola";
jezyki[5].polski="rower"; 
jezyki[6].polski="drukarka"; 
jezyki[7].polski="pilka"; 
jezyki[8].polski="pogoda"; 
jezyki[9].polski="drzewo";      

jezyki[0].angielski="desk"; 
jezyki[1].angielski="window";     
jezyki[2].angielski="dog";     
jezyki[3].angielski="apple";     
jezyki[4].angielski="school";
jezyki[5].angielski="bike"; 
jezyki[6].angielski="printer"; 
jezyki[7].angielski="ball"; 
jezyki[8].angielski="weather"; 
jezyki[9].angielski="tree"; 

 int ster=0;
 char znak;
 int licznik=0;
    do
    {
      gotoxy(36,11);     
      cout<<jezyki[ster].polski<<endl;
      gotoxy(34,12);  
      cout<<"Punkty: "<<licznik<<endl;
      gotoxy(30,13);  
      cout<<"K - konczy program";
      
      srand( time( NULL ) );
      std::cout << std::rand() << std::endl;
      int liczba = std::rand();
      gotoxy(2,2);
      cout<<"1. "<<jezyki[liczba].angielski;
      
      gotoxy(70,2);
      if ((ster+1) > 9)
      ster=1;
      cout<<"2. "<<jezyki[liczba+1].angielski;
      
      gotoxy(2,24);
      if ((ster+2) > 9)
      ster=1;
      cout<<"3. "<<jezyki[liczba+2].angielski;
      
      gotoxy(70,24);
      if ((ster+3) > 9)
      ster=1;
      cout<<"4. "<<jezyki[liczba+3].angielski;

      
      znak = getch();
      if (znak == liczba)
        {
        licznik++;      
        ster++;
         if (ster==10)
           ster=0;         
        }
      if (znak != liczba)
        {
        licznik--;
        ster++;
         if (ster==-1)
           ster=9;
        }  
      system("cls");    
    }  

  while (!((znak=='k') || (znak=='K')));

}
1
jezyk jezyki[]=
{
  {"biurko","desk"},
  {"okno","window"},
  {"pies","dog"},
  ...
  };
int liczba=std::rand()%(sizeof(jezyki)/sizeof(*jezyki));
cout<<"1. "<<jezyki[liczba].angielski;
1

polecam Ci skorzystać z ncurses i podzielić sobie na funkcje coś ala;

static void corner_print(int corner_num, const char *str) {
	int rows, cols;
	getmaxyx(stdscr,rows,cols);
	switch(corner_num) {
	case 0:
		mvprintw(2,2,"0");
		mvprintw(8,8,str);
		break;
	case 1:
		mvprintw(rows - 2,2,"1");
		mvprintw(rows - 8,8,str);
		break;
	case 2:
		mvprintw(2,cols - 2 - strlen(str),"2");
		mvprintw(8,cols - 8 - strlen(str),str);
		break;
	case 3:
		mvprintw(rows - 2,cols - 2 - strlen(str),"3");
		mvprintw(rows - 8,cols - 8 - strlen(str),str);
		break;
	}
}
0

Język angielski to dla mnie nie tylko język obcy - to moja pasja i miłość, która zajmuje znaczące miejsce w moim życiu od wielu lat. Zapraszam na http://www.sic-egazeta.amu.edu.pl/index.php?t=2737 Jeśli chcesz nauczyć się tego wspaniałego języka angielskiego w sposób inny niż w niejednej szkole językowej... jeśli chcesz płynnie mówić po angielsku i poznać go w sposób atrakcyjny, nowatorski i ciekawy - zapraszam na programy do nauki angielskiego.

0

Język angielski to dla mnie nie tylko język obcy - to moja pasja i miłość, która zajmuje znaczące miejsce w moim życiu od wielu lat. Zapraszam na http://www.sic-egazeta.amu.edu.pl/index.php?t=2737 Jeśli chcesz nauczyć się tego wspaniałego języka angielskiego w sposób inny niż w niejednej szkole językowej... jeśli chcesz płynnie mówić po angielsku i poznać go w sposób atrakcyjny, nowatorski i ciekawy - zapraszam na programy do nauki angielskiego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1