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