Witam serdecznie.
Jest to mój pierwszy post na forum także proszę o wyrozumiałość. Mam pewien problem..Mam napisać program, który generuje losowy ciąg 5 liczb, np. „ 1 2 3 4 5”. Ja jako użytkownik podaję jakiś ciąg liczbowy, np. „1 1 2 3 6”. Program ma sprawdzać 2 rzeczy:
a. Ilość zgodnych wartości liczbowych i pozycji (w przykładzie pierwsza jedynka jest na dobrej pozycji)
b. Ilość dobrych cyfr z kodu (w przykładzie mamy 3 takie cyfry: 1, 2, 3, ale tylko 1 jest na dobrej pozycji).
Gracz odgaduje kod aż do momentu w którym trafi. Dla uproszczenia: zakładamy, że cyfry kodu składają się z cyfr 1…6.
Chciałbym zaznaczyć iż dopiero zaczynam swoją przygodę z programowaniem także...liczę na każdą pomoc :) Poniżej umieszczam kod, który napisałem..(opierałem się o gotowy kod podobnego programu)
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
int sprawdzenie1(char*,char*,int);
int sprawdzenie2(char*,char*,int);
int main(int argc, char *argv[])
{
int i,j;
char losowane[20],zgadywane[7];
char odp,c,*s;
int kroki = 10;
do
{
for(i=0;i<7;i++) zgadywane[i]='0';
for(i=0;i<10;i++) losowane[i]='0';
do
{
for(i=0;i<6;i++) losowane[i]=(rand()%10)+48;
s=argv[1];
if (*s=='a')
{
printf("Poprawna kombinacja: ");
for(i=0;i<6;i++) printf("%c ",losowane[i]);
for(i=1;i<=kroki;i++)//petla obslugujaca ilosc krokow
{
printf("Krok %d, Podaj %d liczb : ",i,5);
j=0;
while(j<6+1)//prtla obslugujaca ilosc wpisywanych liczb
{
if (j!=6)//obsluga wpisywania dla liczb oprocz ostatniej
{
c=getch();
if ((zgadywane[j]=c)>='0' && (zgadywane[j]=c)<='9')
//liczby obslugiwane tylko z zakresu 0 - 9
{
printf("%c ",zgadywane[j]);//wyswietlenie liczby jezeli
//jest z zakresu 0-9
j++;
}
if ((c=='\010') && (j>0))//czy backspace?? 010 - kod z ascii
//w kodzie 8kowym, kod zmazuje liczby po wcisnieciu backspace
{
j--;//cofnij licznik
printf("\010");//backspace
printf("\010");//backspace
printf(" ");//wstaw pusty znak
printf("\010");//backspace
}
} else if (j==5)//obsluga ostatniej liczby wpisanej
{
c=getch();
if( c=='\015')//czy enter?? 015 - kod z ascii w kodzie 8kowym
{
if (sprawdzenie1(losowane,zgadywane,5)==5)
//czy cala kombinacja jest prawidlowa?
{
printf("Brawo!\n");
i=kroki;//sztuczne spelnienie warunku zakonczenia gry
break;//przerwanie petli
} else
{
j++;
printf("(%d,",sprawdzenie1(losowane,zgadywane,5));
//sprawdza ilosc liczb na swoim miejscu
printf("%d)",sprawdzenie2(losowane,zgadywane,5));
//sprawdza ilosc liczb nie na swoim miejscu
printf("\n");
}
}
if ((c=='\010') && (j>0))//czy backspace?? 010 - kod z ascii w kodzie 8kowym
{
j--;
printf("\010");
printf("\010");
printf(" ");
printf("\010");
}
}
}
}
printf("Prawidlowa kombinacja: ");
for (i=0;i<6;i++) printf("%c ",losowane[i]);
printf("\nJeszcze raz?(t/n): ");//odp reaguje tylko dla t - powtarza gre
//dla kazdego innego znaku wychodzi z gry
odp=getch();
if (odp=='t') printf("t\n");
}while (odp=='t');
return 0;
}
int sprawdzenie1(char *los,char *zgad,int poz)
{
int i,licznik=0;
for(i=0;i<poz;i++) if (los[i]==zgad[i]) licznik++;//proste porownanie
//odpowiednich miejsc w tablicach liczb losowanych i zgadywanych
return licznik;
}
int sprawdzenie2(char *los,char *zgad,int poz)
{
int i,j,licznik=0;//liczniki petli i liczb nie na swoim miejscu
int ilosc[10],ilosc2[10];//tablice ilosci powtarzajacych sie liczb
for(i=0;i<10;i++) ilosc[i]=0;//wyzerowanie tablic
for(i=0;i<10;i++) ilosc2[i]=0;
for(i=0;i<poz;i++) if (los[i]!=zgad[i])//zliczenie powtarzajacych
//sie liczb w tablicy liczb losowanych bez zliczania liczb na swoim
// miejscu
{
switch(los[i])
{
case '0': ilosc[0]=ilosc[0]+1;
break;
case '1': ilosc[1]=ilosc[1]+1;
break;
case '2': ilosc[2]=ilosc[2]+1;
break;
case '3': ilosc[3]=ilosc[3]+1;
break;
case '4': ilosc[4]=ilosc[4]+1;
break;
case '5': ilosc[5]=ilosc[5]+1;
break;
case '6': ilosc[6]=ilosc[6]+1;
break;
case '7': ilosc[7]=ilosc[7]+1;
break;
case '8': ilosc[8]=ilosc[8]+1;
break;
case '9': ilosc[9]=ilosc[9]+1;
break;
}
switch(zgad[i])//jak wyzej tylko dla liczb zgadywanych
{
case '0': ilosc2[0]=ilosc2[0]+1;
break;
case '1': ilosc2[1]=ilosc2[1]+1;
break;
case '2': ilosc2[2]=ilosc2[2]+1;
break;
case '3': ilosc2[3]=ilosc2[3]+1;
break;
case '4': ilosc2[4]=ilosc2[4]+1;
break;
case '5': ilosc2[5]=ilosc2[5]+1;
break;
case '6': ilosc2[6]=ilosc2[6]+1;
break;
case '7': ilosc2[7]=ilosc2[7]+1;
break;
case '8': ilosc2[8]=ilosc2[8]+1;
break;
case '9': ilosc2[9]=ilosc2[9]+1;
break;
}
}
for(i=0;i<10;i++)
//zaleznosci sprawdzajace ilosc liczb nie na swoim miejscu
//bez uwzgledniania liczb na swoim miejscu przy uzyciu tablic
//z iloscia powtarzajacych sie liczb losowanych i zgadywanych
{
if (ilosc[i]==ilosc2[i]) licznik=licznik+ilosc[i];
if (ilosc[i]<ilosc2[i]) licznik=licznik+ilosc[i];
if (ilosc[i]>ilosc2[i]) licznik=licznik+ilosc2[i];
}
return licznik;
}
}
{
printf("\n"); //przejscie do nastepnej lini
//menu
cout << "1. Nowa Gra" << endl;
cout << "2. Statystyki" << endl;
cout << "3. Autor" << endl;
cout << "4. Wyjscie" << endl;
printf("\n"); //przejscie do nastepnej lini
cout << "Wybierz opcje z Menu gry ";
printf("\n"); //przejscie do nastepnej lini
int menu = 0;
printf("\n"); //przejscie do nastepnej lini
cin >> menu;
printf("\n"); //przejscie do nastepnej lini
switch(menu) {
case 1: cout << "1. 1 gracz" << endl;
cout << "2. 2 graczy" << endl;
cout << "3. 3 graczy" << endl;
break;
case 2: cout << "1. Gracz Karel wygral 3 rozgrywki" << endl;
cout << "2. Gracz Jacek wygral 2 rozgrywki" << endl;
cout << "3. Gracz Bubus wygral 1 rozgrywke" << endl;
break;
case 3: cout << "Autorem tego programu jest: blabla" << endl;
cout << "Wszelkie prawa zastrzezone." << endl;
cout << ";)" << endl;
break;
case 4: cout << "Wcisnij dowolny klawisz by zakonczyc" << endl;
break;
}
printf("\n"); //przejscie do nastepnej lini
int gracze = 0;
cin >> gracze;
printf("\n"); //przejscie do nastepnej lini
switch(gracze) {
case 1: cout << "Gra rozpoczyna sie...1 gracz" << endl;
break;
case 2: cout << "Gra rozpoczyna sie...2 graczy" << endl;
break;
case 3: cout << "Gra rozpoczyna sie...3 graczy" << endl;
break;
printf("\n"); //przejscie do nastepnej lini
}
int buba = 0;
cin >> buba;
switch(buba) {
break;
case 2: cout << "Gracz nr 1 zdobyl mistrzostwo juhu" << endl;
break;
case 3: cout << "Autorem tego programu jest" << endl;
break;
case 4: cout << "wyjscie" << endl;
break;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Ponadto program powinien mieć następujące funkcjonalności:
- Wyświetlenie menu głównego z opcjami nowej gry, zakończenia programu, wyświetlenie statystyk oraz
wyświetlenia informacji o autorze programu. - Program ma się kończyć na wyraźne polecenie użytkownika, a nie po każdej grze.
- Nowa gra dla od jednego do trzech graczy (każdy odgaduje ten sam kod, ale wygrywa tylko ten, który zgadł).
- Gra ma wyświetlać historyczne odgadnięcia gracza wraz z podpowiedziami (pobodnie do planszowego
odpowiednika). - Wyświetlenie w ilu krokach hasło zostało odgadnięte.
- W każdym kroku użytkownik może się poddać.
- Wyświetlenie statystyk wygranych i przegranych poszczególnych graczy
Proszę o jakiekolwiek wskazówki, naprostowanie mnie na właściwą ścieżkę itp. itd. z góry dziękuję za pomoc i pozdrawiam serdecznie.