Игра 21 очко - исправить ошибки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пишу программу игру 21 очко. Без этого case все работает, подскажите где ошибка. плз... уже целый день найти не могу
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int koloda[12];
int karta()
{ return( ( rand()%13));
}
main()
 
{
int igrok=0, komp=0,kart,kart1,i,buf;
char  buf1;
 
time_t t;
srand((unsigned)time (&t));
for(i=0;i<9;i++)
koloda[i]=i+2;
 
koloda[9]=2  ;
koloda[10]=3 ;
koloda[11]=4;
koloda[12]=11;
kart=karta() ;
 
printf("\n Vashi karti: %d ", koloda[kart]);
printf(" \n chtobi vzyat eshe najmite 'y' i <Enter>\n");
printf("\n esli hvatit, to najmite 'n' i <Enter>\n");
igrok+=koloda[kart];

while(buf1!='n' ){
 
printf("\n");
buf1=getchar();
buf=getchar();
if(buf1=='n') break;
kart=karta();
igrok+=koloda[kart];
 
printf(" \n %d", koloda[kart]);}

if(igrok>21) {printf("\n U vas perebor");
printf(" \n ti proigral etu partiyu)))");
getch();  return 0;              }

printf(" \n karti komputera:");
do{
kart=koloda[kart]    ;
printf(" %d", koloda[kart]);
komp+=koloda[kart];}
while(komp<17);
 
textcolor(RED) ;
if(igrok>komp && igrok<21) cprintf(" \npozdravlyem, vi vuugrali");
 if(igrok==komp && igrok<21) cprintf(" \nnichyia");
if (igrok<komp && komp<21)  cprintf(" \nti proigral");
if(igrok<komp && komp>21) cprintf("\npobeda");
komp=0;igrok=0;
getch();
}

Решение задачи: «Игра 21 очко - исправить ошибки»

textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
int koloda[12];
int karta()
{ return( ( rand()%13));
}
main()
 
{
int igrok=0, komp=0,kart,kart1,i,buf,igra;
char  buf1;
while(igra!=0){
scanf("%d", &igra);
time_t t;
srand((unsigned)time (&t));
for(i=0;i<9;i++)
koloda[i]=i+2;
 
koloda[9]=2  ;
koloda[10]=3 ;
koloda[11]=4;
koloda[12]=11;
kart=karta() ;
 
printf("\n Vashi karti: %d ", koloda[kart]);
printf(" \n chtobi vzyat eshe najmite 'y' i <Enter>\n");
printf("\n esli hvatit, to najmite 'n' i <Enter>\n");
igrok+=koloda[kart];
 
 
 
 
 
while(buf1!='n' ){
 
printf("\n");
buf1=getchar();
buf=getchar();
if(buf1=='n') break;
kart=karta();
igrok+=koloda[kart];
 
printf(" \n %d", koloda[kart]);}
 
 
if(igrok>21) {printf("\n U vas perebor");
printf(" \n ti proigral etu partiyu)))");
getch();  return 0;              }
 
 
printf(" \n karti komputera:");
do{
kart=karta()    ;
printf(" %d", koloda[kart]);
komp+=koloda[kart];}
while(komp<17);
 
textcolor(RED) ;
if(igrok>komp && igrok<=21) cprintf(" \npozdravlyem, vi vuugrali");
 if(igrok==komp && igrok<=21) cprintf(" \nnichyia");
if (igrok<komp && komp<=21)  cprintf(" \nti proigral");
if(igrok<komp && komp>21) cprintf("\npobeda");
komp=0;igrok=0;
getch();
}              }

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, conio.h, stdlib.h, time.h
  2. Объявляются переменные: igrok, komp, kart, kart1, i, buf, igra (переменная igra используется для ввода значения игроком, а затем используется в условии цикла while)
  3. Задается начальное значение для переменных igrok и komp равное 0.
  4. Запускается бесконечный цикл while, который будет выполняться до тех пор, пока игрок не введет значение 0 для переменной igra.
  5. Внутри цикла while генерируется случайное начальное значение для колоды карт (значения от 2 до 13).
  6. Далее, с помощью цикла for, значения от 0 до 8 заполняются в массиве koloda.
  7. Значения 2, 3, 4 и 11 заносятся в массив koloda вне цикла for.
  8. С помощью функции karta() генерируется случайное число от 0 до 11, которое будет соответствовать номеру карты в колоде.
  9. С помощью функции printf() выводится сообщение с номером карты в колоде, соответствующим значению переменной kart.
  10. С помощью функции scanf() ожидается ввод от игрока (любая буква от 'y' до 'n').
  11. Если игрок вводит 'n', то выполняется выход из внутреннего цикла while с помощью оператора break.
  12. Если игрок вводит любую другую букву, то значение переменной kart обновляется с помощью функции karta().
  13. Значение переменной igrok увеличивается на значение переменной koloda[kart].
  14. Выводится сообщение с номером карты в колоде, соответствующим значению переменной kart.
  15. Внутренний цикл while завершается.
  16. Проверяется условие: если значение переменной igrok больше 21, выводится сообщение U vas perebor и игра завершается.
  17. С помощью цикла do-while выполняется вывод карт компьютера до тех пор, пока значение переменной komp не станет равным 17.
  18. С помощью функции cprintf() выводится сообщение в зависимости от значения переменных igrok и komp.
  19. Значения переменных igrok и komp обнуляются.
  20. Завершается программа с помощью функции getch().

ИИ поможет Вам:


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

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы