2014-02-12 2 views
0

첫 번째 C++ 클래스 용 슬롯 머신을 만들어야하며 릴에 대한 열거 형 데이터 유형과 배열을 사용해야합니다. 내 프로그램은 현재 3 개의 릴 모든 프레임을 선택하지만 내 인생에서 나는 더 컴팩트하게 만드는 방법을 생각할 수 없습니다. if 문을 사용하여 승패 결과를 만들 수 있도록 모든 릴값을 유지해야합니다. 동일한 스위치를 통해 각 변수를 루프하는 방법이 있습니까?하나의 switch 문을 통해 다른 변수 보내기

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

enum frameType {PETROLEUM=1, COAL, NATURAL_GAS, URANIUM, GLOBAL_WARMING,NUCLEAR_DISASTER, DIRT}; 
enum outcomeType {PETROLEUM_WIN, COAL_WIN, NATURAL_GAS_WIN, URANIUM_WIN, LOSS, DRAW}; 

int main() 
{ 
    srand(time(NULL)); 

    frameType frm1; 


    int frameReel1[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 
    int frameReel2[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 
    int frameReel3[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 

    int RandIndex1 = rand() % 25; 
    int RandIndex2 = rand() % 25; 
    int RandIndex3 = rand() % 25; 

    int a = frameReel1[RandIndex1]; 
    int b = frameReel2[RandIndex2]; 
    int c = frameReel3[RandIndex3]; 

    switch (a) 
    { 
    case PETROLEUM: 
    cout << "[petroleum]n"; 
    break; 
    case COAL: 
    cout << "[coal]"; 
    break; 
    case NATURAL_GAS: 
    cout << "[natural gas]"; 
    break; 
    case URANIUM: 
    cout << "[uranium]"; 
    break; 
    case GLOBAL_WARMING: 
    cout << "[global warming]"; 
    break; 
    case NUCLEAR_DISASTER: 
    cout << "[nuclear disaster]"; 
    break; 
    case DIRT: 
    cout << "[dirt]"; 
    break; 
} 

switch (b) 
{ 
case PETROLEUM: 
    cout << "[petroleum]"; 
    break; 
case COAL: 
    cout << "[coal]"; 
    break; 
case NATURAL_GAS: 
    cout << "[natural gas]"; 
    break; 
case URANIUM: 
    cout << "[uranium]"; 
    break; 
case GLOBAL_WARMING: 
    cout << "[global warming]"; 
    break; 
case NUCLEAR_DISASTER: 
    cout << "[nuclear disaster]"; 
    break; 
case DIRT: 
    cout << "[dirt]"; 
    break; 
} 

switch (c) 
{ 
case PETROLEUM: 
    cout << "[petroleum]"; 
    break; 
case COAL: 
    cout << "[coal]\n"; 
    break; 
case NATURAL_GAS: 
    cout << "[natural gas]"; 
    break; 
case URANIUM: 
    cout << "[uranium]"; 
    break; 
case GLOBAL_WARMING: 
    cout << "[global warming]"; 
    break; 
case NUCLEAR_DISASTER: 
    cout << "[nuclear disaster]"; 
    break; 
case DIRT: 
    cout << "[dirt]"; 
    break; 
} 
} // end main 

답변

1

이것은 반복 코드를 피하는 데 매우 유용한 기능 중 하나입니다.

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

enum frameType {PETROLEUM=1, COAL, NATURAL_GAS, URANIUM, GLOBAL_WARMING,NUCLEAR_DISASTER, DIRT}; 
enum outcomeType {PETROLEUM_WIN, COAL_WIN, NATURAL_GAS_WIN, URANIUM_WIN, LOSS, DRAW}; 


void printFrameType(int a) 
{ 
    switch (a) 
    { 
    case PETROLEUM: 
     cout << "[petroleum]n"; 
     break; 
    case COAL: 
     cout << "[coal]"; 
     break; 
    case NATURAL_GAS: 
     cout << "[natural gas]"; 
     break; 
    case URANIUM: 
     cout << "[uranium]"; 
     break; 
    case GLOBAL_WARMING: 
     cout << "[global warming]"; 
     break; 
    case NUCLEAR_DISASTER: 
     cout << "[nuclear disaster]"; 
     break; 
    case DIRT: 
     cout << "[dirt]"; 
     break; 
    } 
} 


int main() 
{ 
    srand(time(NULL)); 

    frameType frm1; 

    int frameReel1[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 
    int frameReel2[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 
    int frameReel3[] = {1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,5,5,6,7,7,7,7,7}; 

    int RandIndex1 = rand() % 25; 
    int RandIndex2 = rand() % 25; 
    int RandIndex3 = rand() % 25; 

    int a = frameReel1[RandIndex1]; 
    int b = frameReel2[RandIndex2]; 
    int c = frameReel3[RandIndex3]; 

    printFrameType(a); 
    printFrameType(b); 
    printFrameType(c); 
} // end main 

이 코드를 개선하기 위해 다른 방법이 있습니다,하지만 당신이 첫 번째 C++ 클래스이고, 그래서 나는 새로운 정보를 압도하지 않습니다 :이 함수의 switch 문에, 당신의 코드입니다. frameReel1부터 frameReel2frameReel3이 동일하므로 왜 하나만 가지고 있지 않고 frameReel이라고 부르는 것이 좋을까요?

for(int i = 0; i < 3; i++) 
{ 
    any code you put in here will run three times, so 
    if you put the random choice and the switch statement 
    in here, it will print 3 random frame types 
} 

당신은 for(int i = 0; i < 3; i++) 나중에 무엇을 의미하는지 배울 것이다, 그러나 당신은 지금 마술로 취급 할 수

대신 코드를 단축하는 함수를 사용하여, 당신은 또한이 같은 루프를 사용할 수 있습니다. 다른 횟수로 실행하려면 3을 다른 숫자로 변경하십시오.

Tony D 's와 LeonardBlunderbuss의 대답은 더 뛰어나지 만 고급 개념을 포함합니다.

0

당신은 재사용 가능한 지원 기능을 쓸 수 있습니다 : 다음

std::ostream& operator<<(std::ostream& os, frameType x) 
{ 
    switch (a) 
    { 
     case PETROLEUM:  return os << "[petroleum]n"; 
     case COAL:    return os << "[coal]"; 
     case NATURAL_GAS:  return os << "[natural gas]"; 
     case URANIUM:   return os << "[uranium]"; 
     case GLOBAL_WARMING: return os << "[global warming]"; 
     case NUCLEAR_DISASTER: return os << "[nuclear disaster]"; 
     case DIRT:    return os << "[dirt]"; 
     default:    return os << "<invalid>"; // or throw? 
    } 
} 

:

frameType a = static_cast<frameType>(frameReel1[RandIndex1]); 
... 

std::cout << a << b << c; 

(당신은 정말 frameReel1/2/3frameType의 저장해야

1
.

이 코드를 시도하십시오 :

int outcomes[3] = {frameReel1[RandIndex1], frameReel2[RandIndex2], frameReel3[RandIndex3]}; 
for(int i=0; i<3; i++) 
    switch(outcomes[i]) 
    // Cases...