Игра 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().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д