Kostka do gry

0

Przy wpisywaniu przykładowego wejscia rezultat daje 2.
Sprawdzarka daje programowi 0/3. Doradzi ktoś co jest źle?

Tresc zadania:

Przykładowe wejście:
N S S S E E N

Przykładowe wyjście:
2
#include <iostream>
using namespace std;

class dice {
  public: 
    int n = 2;
    int s = 5;
    int e = 4;
    int w = 3;
    int bottom = 6;;
    int top = 1;

  int getResult(int t) {
    return t;
  }

  void rzut(char p) {
    int tmp;
    if(p == 'S') {
      tmp = top;
      top = n; 
      n = bottom; 
      bottom = s;
      s = tmp;
     cout << getResult(top) << endl;
    }
    if(p == 'N') {
      tmp = s;
      s = bottom;
      bottom = n;
      n = top; 
      top = tmp;

     cout << getResult(top) << endl;
    }
      if(p == 'W') {
      tmp = s;
      top =  e;
      e = bottom;
      bottom = w;
      w = tmp;

     cout << getResult(top) << endl;
    }
     if(p == 'E') {
      tmp = s;
      top = w;
      w = bottom;
      bottom = e;
      e = tmp;
      
     cout << getResult(top) << endl;
    }
  }


};

int main()
{
  
  dice test;
  char input;
  while(cin >> input) {
    if(input != 'N' && input != 'S' && input != 'E' && input != 'W') {
      break;
    } else {
        test.rzut(input);
    }
  }

    return 0;
}
1

Może wklej po ludzku tą treść zadania, a nie jakieś obrazki z setką reklam.
Czemu używasz tych wszystkich zmiennych pomocniczych jak wypisujesz tylko top? Może zamiast drabinki ifòw jakiś switch lub jakaś funkcja?

1

Już było na tym forum, nawet z kilkowierszowym rozwiązaniem.
W sumie całość sprowadza się do:

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main()
{
	/*///
    map<pair<char,char>,char> map=
    {
        {
            {{'1','N'},'5'},{{'1','S'},'2'},{{'1','E'},'3'},{{'1','W'},'4'},
            // dalej zastąpić ? na poprawne 
            {{'2','N'},'?'},{{'2','S'},'?'},{{'2','E'},'?'},{{'2','W'},'?'},
            {{'3','N'},'?'},{{'3','S'},'?'},{{'3','E'},'?'},{{'3','W'},'?'},
            {{'4','N'},'?'},{{'4','S'},'?'},{{'4','E'},'?'},{{'4','W'},'?'},
            {{'5','N'},'?'},{{'5','S'},'?'},{{'5','E'},'?'},{{'5','W'},'?'},
            {{'6','N'},'?'},{{'6','S'},'?'},{{'6','E'},'?'},{{'6','W'},'?'},
        }
    };
    char top='1';
    top=map[{top,'N'}];
    /*/
    const static string dir("NSEW");
    int tb[][4]=
    {
       //N S E W
    	{5,2,3,4}, // 1
    	{0,0,0,0}, // 2
    	{0,0,0,0}, // 3
    	{0,0,0,0}, // 4
    	{0,0,0,0}, // 5
    	{0,0,0,0}, // 6
    };
    int top=1;
    top=tb[top][dir.find('N')];    
	//*///
	return 0;    
}
0

@_13th_Dragon: Sorry ale nie wiem jak to zaimplementować w mój obecny kod. Dlaczego sprawdzarka nie akceptuje mojego kodu skoro outputuje poprawną odpowiedź?

0

@Descendant: a jaki jest output dla wielu rzutów następujących po sobie? Zresztą tu się nie ma co zastanawiać za bardzo: narysuj sobie graf przejść/wyjść automatu skończonego jakim jest jest kostka i go zaimplementuj. To co @_13th_Dragon Ci napisał to chyba najprostsza i na oko najbardziej optymalna forma zapisu tego: po prostu upakowana tablica przejść-wyjść; jak chcesz działać bardziej obiektowo to poczytaj jak działa "state machine pattern":
https://gameprogrammingpatterns.com/state.html
Tutaj to by było mocno nadmiarowe, bo nie masz hierarchii stanów i dla danego stanu będzie po prostu jedno wyjście i cześć, ale w gruncie rzeczy możesz to też tak napisać. Będzie kwieciście, javovo-korporacyjnie i rozwlekle, ale może prościej Ci będzie zobaczyć co się tam dzieje.

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