2014-12-09 2 views
0

프로토 타입 함수가 다른 2 차원 배열을 사용해 본 결과이 게임의 점수 시스템을 구현할 수 없습니다. 내가 할 수있는 것에 대한 아이디어가 있습니까? 저는이 코드의 출력을 가져오고 싶습니다.이 출력은 1-6까지의 6 가지 숫자로 구성되어 있으며 점수를 더할 수 있도록 값을 할당합니다. 전의. 내가 1을 굴리면 100 점의 가치가 있습니다. 굴림 값에 포인트 값을 지정하는 가장 빠르고 효율적인 방법은 무엇입니까?배열의 요소에 값을 어떻게 할당합니까?

#include <stdio.h> 
#include <time.h> 

int main() { 

    int i, r, diceRoll; 
    char player1[20]; 
    int temp, swapped; 
    int roll1[6]; 

    srand(time(NULL)); 

    printf("Enter name for Player 1:\n"); 
    scanf(" %s", &player1); 

    for(i = 0; i < 6; i ++) { 
     r = (rand() % 6) + 1; 
     diceRoll= r; 
     roll1[i] = diceRoll; 
    } 

    while(1) { 
     swapped = 0; 
     for(i = 0; i < 6-1; i++) { 

      if(roll1[i] > roll1[i + 1]) { 

       temp = roll1[i]; 
       roll1[i ] = roll1[i+1]; 
       roll1[i+1] = temp; 
       swapped = 1; 
      } 
     }//for 

     if(swapped == 0) { 
      break; 
     } 
    }//while 
    printf("\n\n %s's Dice Roll:\n\n", player1); // prints out the dice rolls of player 1 
    return 0; 
}//main 
+0

질문을 다시 말하고 코드에서 로직을 삽입 할 위치를 지정하십시오. 배열 삽입이 주사위 굴리기와 관련이 있는지 설명하십시오. – Dai

+0

필자는 함수 프로토 타입을 만들고 나중에 점수를 인쇄하려고 할 때 호출 할 생각이었습니다. 편집에 관해서, 나는 아직도 여기에서 꽤 새로운데, 나는 나의 질문을 더 잘 편집하는 방법을 알아 내려고 노력하고있다. –

+5

'int xx [] = {0104090160250360}; int score = 0; (int i = 0; i <6; i ++) score + = xx [roll1 [i]]; ' – chux

답변

2

왜 대응하는 포인트 값에 매핑 된 값을 스트레이트로 집계하지 않습니까? (똑바로 않는 한 (100)는 롤 값이 더 쉽게되는 경우가. *)

int score = 0; 
for(i = 0; i < 6; ++i) 
{ 
    switch(roll1[i]) 
    { 
    case 1: score += 100; break; 
    case 2: score += 230; break; 
    case 3: score += 540; break; 
    case 4: score += 2320; break; 
    case 5: score += 13130; break; 
    case 6: score += 454260; break; /* Of course, change to the score you want for each value. */ 
    } 
} 
printf("\n\n %s's Dice Roll:%d\n\n", player1, score); 

", 1 100pts입니다 Farkle 같은 게임을 만드는 것이었다 내가 원래 생각했던 5 50 부, 고 형상이다 , 그리고 그 외 모든 것은 0 일 때까지 3 종류 (3 3 = 300pt, 3 1s는 1000 등)가됩니다. 모든 입력은 크게 평가 될 것입니다. "여러 가지 방법이 있습니다. 이것을 쉽게 수행 할 수 있고 Chux map 접근 방식을 기반으로 3 가지 종류로 사용할 수 있습니다.

int score = 0; 
int face_score = 0; 
int base_points[6] = { 100, 0, 0, 0, 50, 0 }; 
int three_of_a_kind_points[6] = { 300, 200, 300, 400, 500, 600 }; 
int four_of_a_kind_points[6] = { 
int repeat_counter[6] = { 0, 0, 0, 0, 0, 0 }; 
int kind_mask = 0; 
int pair_count = 0; 
int three_of_a_kind_count = 0; 
int four_of_a_kind_count = 0; 
for(i = 0; i < 6; ++i) 
{ 
    kind_mask |= 1 << (roll1[i] - 1); 
    switch(++repeat_counter[roll1[i] - 1]) 
    { 
    case 1: break; 
    case 2: ++pair_count; break; 
    case 3: score = three_of_a_kind_points[rolli[i] - 1]; ++three_of_a_kind_count; break; 
    case 4: score = 1000; ++four_of_a_kind_count; break; 
    case 5: score = 2000; break; 
    case 6: score = 3000; break; 
    } 
} 

if(pair_count == 3) /* Three pairs */ 
    score = 1500; 
else if(three_of_a_kind_count == 2) /* Two three of a kinds */ 
    score = 2500; 
else if(four_of_a_kind && (pair_count == 2)) /* A four of a kind and one pair (2 because four of a kind counted as a pair in the aggregation phase) */ 
    score = 1500; 
else if(kind_mask = 0x2F) /* One of each type */ 
    score = 1500; /* Straight */ 
else if(!score) /* score only 1's and 5's */ 
    score = repeat_counter[0] * 100 + repeat_counter[4] * 50; 
printf("\n\n %s's Dice Roll:%d\n\n", player1, score); 

이 코드를 컴파일하거나 실행하지 않았으므로 100 % 올바르지 않을 수 있습니다.

+0

어리석은 질문이지만 'C'또는 C++입니까? 나는 전에 그것을 보지 못했고, 나는 C를 사용하기로되어있다. –

+0

이것은 C와 C++이다. –

+0

내가 원래 생각했던 것은 Farkle과 같은 게임을 만드는 것이었다. 1은 100pts, 5는 50pts, 그리고 당신이 3 종류 (3 3 = 300pt, 3 1s는 1000 등)가 될 때까지 그 밖의 모든 것은 0입니다. 어떤 입력이라도 크게 환영받을 것입니다. –

관련 문제