Прежде всего, я очень извиняюсь за мой плохой английский, я пытался объяснить проблему как можно лучше.
Игра в кости в 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
Код, который вы разместили, действительно печатает «вы выиграли», если он находит исходный номер до того, как находит
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
, потому что это может быть более эффективным в таких случаях, когда ввод (бросок костей) представляет собой плотно упакованные целые числа.