2015-09-25 2 views
0

У меня проблемы с играми в кости. У меня есть задача:C игра в кости игра

Правила игры следующие: 1. Игрок бросает кости и добавляет значения лиц. 2. Если первый бросок равен 7 или 11, игрок выигрывает. 3. Если первый рулон равен 2, 3 или 12, игрок проигрывает. 4. Если первым броском является любое другое число, эта сумма становится точкой игрока. 5. Чтобы выиграть, игрок должен продолжить катить кости до тех пор, пока он не «сделает очко». 6. Игрок проигрывает, свернув 7 перед точкой.

1) Определите WON и LOST как макросы в вашей программе. Используйте значения 0 для WON и 1 для LOSE 2) Внедрите функцию с прототипом функции int rollDice (void);

rollDice() следует использовать RAND(), чтобы случайным образом число между 1 - 6

возвращают число, порожденный RAND()

3) реализовать функцию, с прототип функции Int пустяки (недействительными);

Когда игрок готов играть, он (а) будет использовать клавишу ENTER, чтобы бросить кости

Если пользователь выигрывает в его/ее первом броске, поздравить игрок и вернуться с WON

Если пользователь проигрывает в своем первом броске, поздравляйте игрока и возвращайтесь с помощью LOSE

Позвольте пользователю продолжать играть до тех пор, пока он не победит/проиграет, не даст соответствующий массаж и не закончит игру с последним значением рулона ,

4) Ваша главная() должен Позвоните вашей функция пустяки()

Попросите пользователь, если он (а) хочет продолжить играть в другую игру, отслеживание количества потерь и победы

Когда пользователь решает закончить игру, отобразите количество побед и потерь, которые у него были.

Дайте пользователю соответствующее сообщение в зависимости от количества побед или потерь (s) он был

Возвращение со значением EXIT_SUCCESS

Вот что у меня есть сейчас, но он говорит мне, что там являются ошибками. Может ли кто-нибудь помочь мне с этой задачей?

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

#define WON 0 
#define LOSE 1 

int rollDice(void); 
int playGame(void); 

int rollDice(void) { 
    return ((rand() % 6) + 1); 
} 

int playGame(void){ 
    int dice_1 = 0; 
    int dice_2 = 0; 
    int sum = 0; 
    time_t t; 
    srand(time(&t)); 
    printf("ROLL THE DICE WITH [ENTER]\n"); 
    dice_1 = rollDice(); 
    dice_2 = rollDice(); 
    sum = dice_1 + dice_2; 
    if (sum == 7 || sum == 11){ 
    printf("Congratulations you roll %d and WON at your first try!", sum); 
    } 
    else { 
    printf("Your roll was %d ,you lose try agian.\n", sum); 
    } 
    return 0; 
} 

int main (void){ 
    playGame(); 
} 

Ошибка является (в GCC Linux):

x.c: 9: 1: ошибка: шальная «\ 302» в программе

INT rollDice (недействительными);

^

x.c: 9: 1: ошибка: шальная «\ 240» в программе

х.c: 10: 1: ошибка: отклонение '\ 302' в программе

int playGame (void);

^

хс: 10: 1: ошибка: шальная '\ 240' в программе

хс: 12: 1: ошибка: шальная '\ 302' в программе

INT rollDice (недействительными) {

^

хс: 12: 1: ошибка: шальная '\ 240' в программе

хс: 16: 1: ошибка: шальная '\ 302' в программе

INT пустяки (аннулируются) {

^

хс: 16: 1: ошибка: шальная '\ 240' в программе

+1

оказывается у вас нет ничего сейчас ... –

+0

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что SO не «делает мой дом» работа ". – Olaf

+1

Что не работает? – xxbbcc

ответ

1

Здесь несколько вещей.

  1. Вы не читаете/используете возвращаемое значение от playGame(). Вы должны хранить результат и действовать на нем.
  2. Ваша логика не является полной, так как критерии для «игры за точку» и потери одинаковы.
  3. У вас нет ничего на месте, что заставляет программу ждать, пока пользователь нажмет ENTER.

Я включил в себя заполненный список кодов ниже.

Листинг


/******************************************************************************* 
* Preprocessor directives 
******************************************************************************/ 
#include <stdio.h> 
#include <ctype.h> 
#include <time.h> 
#include <stdlib.h> 
#include <stdbool.h> 

#define WON 0 
#define LOSE 1 


/******************************************************************************* 
* Function prototypes 
******************************************************************************/ 
int rollDice(void); 
int playGame(void); 


/******************************************************************************* 
* Function definitions 
******************************************************************************/ 
/*----------------------------------------------------------------------------*/ 
int rollDice(void) { 
    return ((rand() % 6) + 1); 
} 

/*----------------------------------------------------------------------------*/ 
int playGame(void){ 
    int dice_1 = 0; 
    int dice_2 = 0; 
    int sum = 0; 
    int result; 
    int point = 0; 
    time_t t; 
    bool playForPoint = false; 

    srand(time(&t)); // Initialize random seed 
    printf("ROLL THE DICE WITH [ENTER]\n"); 
    fgetc(stdin); 
    dice_1 = rollDice(); 
    dice_2 = rollDice(); 
    sum = dice_1 + dice_2; 
    printf("D1:%2d - D2:%2d - Sum:%2d\n", dice_1, dice_2, sum); 

    switch (sum) 
    { 
     case 7: 
     case 11: 
      result = WON; 
      break; 
     case 2: 
     case 3: 
     case 12: 
      result = LOSE; 
      break; 
     default: 
      playForPoint = true; 
      point = sum; 
      printf("Playing for point:%d. Please hit enter.\n", point); 
      fgetc(stdin); 
      break; 
    } 

    while (playForPoint) 
    { 
     dice_1 = rollDice(); 
     dice_2 = rollDice(); 
     sum = dice_1 + dice_2; 
     printf("D1:%2d - D2:%2d - Sum:%2d\n", dice_1, dice_2, sum); 
     if (sum == 7) { 
      playForPoint = false; 
      result = LOSE; 
     } else if (sum == point) { 
      playForPoint = false; 
      result = WON; 
     } else { 
      printf("Please roll the dice again with [ENTER].\n"); 
      fgetc(stdin); 
     } 
    } 

    return result; 
} 

/*----------------------------------------------------------------------------*/ 
int main (void){ 
    int result = playGame(); 
    switch (result) 
    { 
     case WON: 
      printf("You won the game.\n"); 
      break; 
     case LOSE: 
      printf("You lost the game.\n"); 
      break; 
     default: 
      printf("Something went wrong in the program.\n"); 
      break; 
    } 

    return 0; 
} 

Пример вывода


ROLL THE DICE WITH [ENTER] 

D1: 3 - D2: 5 - Sum: 8 
Playing for point:8. Please hit enter. 

D1: 3 - D2: 1 - Sum: 4 
Please roll the dice again with [ENTER]. 

D1: 3 - D2: 2 - Sum: 5 
Please roll the dice again with [ENTER]. 

D1: 1 - D2: 5 - Sum: 6 
Please roll the dice again with [ENTER]. 

D1: 3 - D2: 2 - Sum: 5 
Please roll the dice again with [ENTER]. 

D1: 2 - D2: 6 - Sum: 8 
You won the game. 
+0

СПАСИБО ВАС !!! ВЫ СДЕЛАЛИ МОЮ ЖИЗНЬ – AnaF

+1

@AnaF Нет проблем. Если это адекватно ответили на ваши вопросы вопрос, пожалуйста, отметьте галочку в верхней части вопроса и подумайте о ее продолжении. – DevNull

+0

@Dogbert - Вы сделали домашнее задание для них. – PhillyNJ

1

Вы еще не удовлетворены правилами игры. Ваш код занимает 7 и 11 в качестве победителей и любой другой номер в качестве проигравшего.

После проверки 7/11 вам необходимо проверить на 2, 3 или 12 и напечатать сообщение «потерять», если оно истинно. Если нет, у вас есть номер точки, и вам нужно предложить пользователю продолжить показ, пока он не получит номер точки (выигрыш) или 7 (потерять).

Вам также необходимо отслеживать выигрыши/убытки в main. Вы должны будете вызвать playGame в цикле, предлагая пользователю продолжить выполнение каждой итерации.

+0

Спасибо, я не знаю, t действительно понимаю, как вызвать playGame() в главном – AnaF

+0

@AnaF Вы уже это сделали. Однако вам нужно возвращать 'WIN' или' LOSE' в соответствии с 'playGame' и захватывать это в' main', обновляя соответствующий счетчик. – dbush

Смежные вопросы