Игра в кости в c

Прежде всего, я очень извиняюсь за мой плохой английский, я пытался объяснить проблему как можно лучше.

Игра в кости в c

Компьютер бросает два кубика, и если выпало 7 или 11, вы напрямую выигрываете, или если выпадает 2,3 и 12, вы сразу проигрываете.

если сумма 4,5,6,8,9 или 10, он хочет, чтобы вы снова бросили кости. и на этот раз вы должны найти ту же сумму 4,5,6,8,9 или 10, если вы получите 7 или 11, прежде чем найти то же число, которое вы проиграете. (Вот где проблема, даже если компьютер находит одно и то же число дважды. Он не распечатывается как «вы выиграли». https://imgur.com/KL358Fi

Примеры: бросаются игральные кости… 11 Вы выиграли.

Вы хотите сыграть снова (y/Y – n/N)? у

кости катятся … 3 Вы проиграли

Вы хотите сыграть снова (y/Y – n/N)? у

кости катятся… 12 Кайбеттиниз

Yeni oyun oynansin mi (г/г – н/н)? у

кости катятся… 7 Вы выиграли.

Вы хотите сыграть снова (y/Y – n/N)? у

кости катятся … 7 вы выиграли

Вы хотите сыграть снова (y/Y – n/N)? у

кости бросаются… 9 результат не ясен, кости будут брошены снова. ролл (р/р)?

кости бросаются… 8 результат не ясен, кости будут брошены снова. ролл(р/р)?

Кости бросаются… 11 результат не ясен, кости будут брошены снова. ролл (р/р)? р

кости катятся… 9 Вы выиграли.

Yeni oyun oynansın mı (y/Y –(n/N)? e

Zarlar atiliyor… 5 результат неясен, кости будут брошены заново. крен (р/р) р

Zarlar atiliyor… Результат 10 не ясен, кости будут брошены заново. крен (р/р) р

Zarlar atiliyor… 7 Вы проиграли.

Вы хотите сыграть снова (y/Y – n/N)? Н

КРАПС закончился.

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

int main() 
{
 char ynd;
 int kazan=0; 
 int sonuc=0;
 char yoyun;


 do{



    printf("dice is rolling  ");
    srand(time(NULL));
    kazan = rand()%11+1;
    kazan++;

    if( kazan==7 || kazan==11 )
    {
        printf(" %d you won.\n",kazan);
    }
        else if( kazan==2 || kazan==3 || kazan==12 )
        {
            printf(" %d you lose.\n",kazan);
        }


    sonuc=kazan;

    if( kazan==4 || kazan==5 || kazan==6 || kazan==8 || kazan==9 || kazan==10 )
    {


        do{
            printf("%d result is unclear, dice will be rolled again roll(r/R) ",kazan);
            scanf(" %s",&ynd);
            printf("dice is rolling  ");
            kazan = rand()%11+1;
            kazan++;
            if(kazan == sonuc)
            {
                printf("%d you won",kazan);
                break;
            }
            else if(kazan==7){
                printf("%d You lose",kazan);
                break;
            }

        }  

            while(ynd=='r' || ynd=='R');
    }

printf("want to play a new game ( y/Y-n/N )");
    scanf(" %s",&yoyun);
} while(yoyun=='y' || yoyun=='Y');

printf("craps has ended");


return 0;
}

Какой у Вас вопрос? Вы разместили код, что-то не так с ним?   —  person cl-creator    schedule 20.04.2020

См. также:  понимание структур, указателей и определений типов

Пожалуйста, прочтите страницы справки, пройдите тур по SO , прочтите Как спросить, а также это контрольный список вопросов.   —  person cl-creator    schedule 20.04.2020

если кости 4, 5, 6, 8, 9 или 10, я хочу, чтобы компьютер нашел то же число и распечатал, как вы выиграли.   —  person cl-creator    schedule 20.04.2020

Вы не объяснили никаких проблем, которые у вас возникли с (слишком большим) кодом, который вы опубликовали, и вы не задали никаких вопросов. Сбрасывать много кода и ожидать, что мы выясним, о чем вы спрашиваете, а затем ответим на него, неуместно. Пожалуйста, потратьте некоторое время на чтение Как спросить и минимальный воспроизводимый пример, а затем вернитесь к редактированию своего поста и спросите больше полный вопрос, чтобы мы могли попытаться помочь.   —  person cl-creator    schedule 20.04.2020

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. cl-creator

    Код, который вы разместили, действительно печатает «вы выиграли», если он находит исходный номер до того, как находит 7. Возможно, вы исправили свою ошибку в переводе?

    Однако это не приводит к проигрышу, если он выбрасывает 11 до того, как найдет дубликат.

    Я также вижу некоторые потенциальные улучшения:

    • Вы должны #include <stdlib.h> использовать srand и rand (gcc автоматически исправляет это для вас). См. здесь. В общем, попытайтесь устранить предупреждения, выдаваемые компилятором (поищите их в Интернете, если вы не понимаете).
    • Я рекомендую использовать srand(time(NULL)) только в начале программы, потому что, если пользователь играет в игру быстро, он получит идентичные игры, пока не истечет секунда.

    • Вы можете использовать rand()%6+rand()%6+2 для имитации «distribution-what-is-define»>распределение бросков кубиков (например, 7 более вероятно, чем любое другое число). Простое использование rand()%11+1 приводит к равномерному распределению.

    • Вы увеличили результат броска на ++ и 1 сразу после того, как вызвали rand. Было бы проще просто добавить 2 после вызова rand.

    • Нет необходимости проверять, является ли бросок кости неопределенным. Просто используйте последний else и переместите sonuc=kazan в блок.

    • Возможно, вы захотите изучить возможность использования таблицы переходов, а не операторов if, потому что это может быть более эффективным в таких случаях, когда ввод (бросок костей) представляет собой плотно упакованные целые числа.

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main() 
    {
        char ynd;     
        int kazan=0;
        int sonuc=0;
        char yoyun;
        srand(time(NULL));
        do {
            printf("dice is rolling  ");
            kazan = rand()%6+rand()%6+2;
            if( kazan==7 || kazan==11 )
            {
                printf(" %d you won.\n",kazan);
            }
            else if( kazan==2 || kazan==3 || kazan==12 )
            {
                printf(" %d you lose.\n",kazan);
            }   
            else
            {                       
                sonuc=kazan;
                do {
                    printf("%d result is unclear, dice will be rolled again roll(r/R) ",kazan);
                    scanf(" %s",&ynd);
                    printf("dice is rolling  ");
                    kazan = rand()%6+rand()%6+2;
                    if(kazan == sonuc)
                    {
                        printf("%d you won.\n",kazan);
                        break;
                    }
                    else if(kazan==7 || kazan==11){    
                        printf("%d You lose.\n",kazan);
                        break;
                    }
                } while (ynd=='r' || ynd=='R');
            }
            printf("want to play a new game ( y/Y-n/N )");
            scanf(" %s",&yoyun);            
        } while(yoyun=='y' || yoyun=='Y');  
        printf("craps has ended.\n");
        return 0;
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: