Код игры в кости "Big Pig" идет бесконечно l oop: C - PullRequest
0 голосов
/ 23 марта 2020

Здравствуйте, я новичок в c, и в настоящее время я учусь по учебной программе университета, поэтому мне нужно соблюдать эти правила: мы не можем использовать массивы или глобальные переменные.

Итак, я ' мы пытались сделать игру в кости под названием "большая свинья". Я сейчас создаю функцию, которую компьютер собирается использовать для игры, под названием «play_computer ()». Существует также функция с именем computer_strategy_decider (). Computer_strategy_decider () должна выбирать да или нет. Я только что сделал функцию rand, которая вызывает 1 или 2, чтобы заставить это работать. Play_computer () позволяет вам выбрать две кубики, и оттуда нужно вычислить счет. Если вы выберете только один, ваш счет не увеличится, и ваша игра будет прекращена. Если вы добавите два, вы получите 25 добавленных. Если вы получаете любое другое двойное значение, например, добавляется, например, (a + a) * 2 или 4 * a. И, наконец, если вы получите два случайных числа, компьютер решит, хочет ли он продолжить. Вот где приходит computer_strategy_decider () ..

Проблема заключается в функции play_computer (). Кажется, все работает хорошо, когда компьютер выдает два разных значения и не продолжает работу. Это заканчивается нормально. Но если он хочет продолжить, он уходит в бесконечное число l oop. Бесконечный l oop также имеет те же значения кости. То же самое l oop происходит, когда выпадают двойники. Что-то в моем коде некорректно. Я не знаю, связано ли это с rand () или нет. Я не думаю, что это rand (), так как я использую rand () на computer_strategy_decider (). Моя теория, надеюсь, что-то маленькое, что я пропустил.

Мой код работал час go, прежде чем я добавил некоторые изменения, поэтому я разочарован, хаха.

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

int computer_strategy_decider(){

int deci;
srand(time(NULL));
deci=1+ (int) rand() % 2;
    return deci;}






int play_computer(round_number,strategy){

  int roll_1,roll_2,cntrl_var=0,score_comp=0;
  char answ;

  printf("\nRound %d-- My Turn:",round_number);printf("\n---------------------------------");

  while(cntrl_var==0){
   srand(time(NULL));
   roll_1 = 1 + (int) rand() % 6;
   roll_2 = 1 + (int) rand() % 6;

  printf("\nI got --> [Dice 1]: %d [Dice 2]: %d",roll_1,roll_2);
  if(roll_1==roll_2 && roll_1!=1){
    score_comp=score_comp+roll_1*4;
    printf("\nScore: %d",score_comp);printf("\nDoubles! Roll again!");}
  else if(roll_1==1 && roll_2==1){
    score_comp=score_comp+25;
    printf("\nScore: %d",score_comp);printf("\nDoubles! Roll again!");}
  else if(roll_1==1 || roll_2==1){
    cntrl_var=1;
    printf("\nYou got a single one! End of your turn!");}
  else{
    score_comp=score_comp+roll_1+roll_2;
    printf("\nScore: %d",score_comp);
    while(cntrl_var==0){
      printf("\nDo you want to continue (Y/N)?");
      if (strategy==1){
        printf("Y");
        break;}
      else if (strategy==2){
        printf("N");
        break;}}
    if (strategy==1)
        cntrl_var=0;
    else if (strategy==2)
        cntrl_var=1;
    else
        cntrl_var=0;}}

  printf("\nMy Score: %d",score_comp);

  return score_comp;}

int main(){

int round_no=1,deci;
deci=computer_strategy_decider();
play_computer(round_no,deci);
}

1 Ответ

0 голосов
/ 23 марта 2020

Я положил srand в то время как l oop, и это вызвало многократный вызов srand. Поэтому я положил сран выше l oop. Это исправило!

...