Игра на Си камень ножницы бумага

28 ноября 2018 - Администратор

В этой статье мы разберем, как написать игру на Си камень ножницы бумага.

Рассмотрим общий алгоритм написания игр на Си .Задача: компьютер должен играть с пользователем в игру камень-ножницы-бумага. Пользователь делает свой ход, после чего компьютер отвечает на него. После одной игры определяется победитель или, если никто не победил, ничья. Пользователь либо выбирает играть дальше, либо прекратить игру. Если пользователь продолжил играть, игра начинается заново, если он завершил игру, то показывается статистика по всему количеству игр, победам, проигрышам и ничьям, после, чтобы выйти из программы, пользователь должен нажать любую кнопку.

Общая структура игр на Си.

Вводятся глобальные переменные для  ведения статистки игры (сколько туров, количество побед и проигрышей). Определяетс я главная процедура   очередного тура, хода. Подробно о процедурах в Си. В теле программы  в цикле while  запускается очередной тур, пока не будет остановлена игра

// играем  пока не будет выбран выход из игры
while (igra==1)
{
// очередной тур игры
  tur();
// обновляем статистику по игре
...
// делаем запрос на продолжение игры
  printf(" Сыграем еще раз?\n ");
  printf("Да - 1  Нет - 2 \n");
  scanf("%d", &igra);
}

// вывод статистики игры

...

Краткое описание алгоритма: программа считывает ввод пользователя, после чего компьютер с помощью случайных значений делает свой ход. Сверяется ход игрока и компьютера  после чего программа определяет, кто победил. После этого пользователю предлагается выбор в виде выхода из игры или продолжения игры. Программа считывает ввод пользователя.  Если пользователь продолжил игру, алгоритм начинается сначала, если игрок закончил игру, показывается количество игр за данную сессию, побед, проигрышей и ничей пользователя. После этого пользователь должен нажать любую кнопку, чтобы завершить сессию.Основные переменные: ввод пользователя (vvod), общее количество игр (k), количество побед (pob), проигрышей (por), ничей (nec), состояние игры (igra) и переменная, отвечающая за победу, проигрыш или ничью игрока с компьютером (pobeda).

В программе присутствует всего одна процедура tur(). В процедуре реализован сам код игры, варианты ввода игроков, защита от недопустимых вводов, был реализован алгоритм хода компьютера и определения победителя.

игра на си

 

// переменные, отвечающие за текущее системное время

time_t t;
int sec;
struct tm *t_m;

Сначала пользователь делает свой ход, введя цифру, отвечающую за каждый вариант хода (vvod), чтобы игрок не ввёл недопустимые варианты. Затем с помощью случайных чисел компьютер делает свой ход.

void tur()
{
 // перменные отвечающие за текущее системное время  
time_t t;
int sec;
struct tm *t_m;

  int  kol, vvod, comp;
   kol=0; 
   // ход игрока
   vvod=0;

   // запрашиваем ввод, пока не будет выбран  либо 1 либо 2 либо 3
   while (!(vvod == 1 || vvod == 2 || vvod == 3))
   {
    printf("Что выбираешь? \n");
    printf("Камень - 1, Ножницы - 2, Бумага - 3 \n");
    scanf("%d", &vvod);
   }
   // отображение на экране выбора игрока
    printf("Вы выбрали ");
    switch (vvod)
   {
    case 1 : printf ("Камень\n ");   break;
    case 2 : printf ("Ножницы\n "); break;
    case 3 : printf ("Бумага\n ");  break;            
   }  

   // определяем ход компьютера
   // запрашиваем текущее время
   t=time(NULL);
   t_m=localtime(&t);
   sec=t_m->tm_sec;
   comp=(sec*rand())%3+1;// случайное число в диапазоне от 1 до 3
   // отображение на экране выбора компьютера
   printf("Компьютер выбрал\n ");
   switch (comp)
   {
    case 1 : printf ("Камень\n "); break;
    case 2 : printf ("Ножницы \n"); break;
    case 3 : printf ("Бумагу \n"); break;             
   }
   // определяем кто победил
   if (comp==vvod){pobeda=0;};
   if (vvod==1 && comp==2){pobeda=1;};
   if (vvod==1 && comp==3){pobeda=2;};
   if (vvod==2 && comp==3){pobeda=1;};
   if (vvod==2 && comp==1){pobeda=2;};
   if (vvod==3 && comp==1){pobeda=1;};
   if (vvod==3 && comp==2){pobeda=2;};

   // выводим результат
   switch (pobeda)
   {
    case 0 : printf ("Ничья\n "); break;
    case 1 : printf ("Вы выиграли \n"); break;
    case 2 : printf ("Выиграл компьютер\n "); break;  
   }
 }

Полный код программы на си игра камень ножницы бумага

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include <time.h>
int pobeda=0;

void tur()
{
 // перменные отвечающие за текущее системное время  
time_t t;
int sec;
struct tm *t_m;

   int  kol, vvod, comp;
   kol=0;  
   // ход игрока
   vvod=0;

   // запрашиваем ввод, пока не будет выбран  либо 1 либо 2 либо 3
   while (!(vvod == 1 || vvod == 2 || vvod == 3))
   {
    printf("Что выбираешь? ");
    printf("Камень - 1, Ножницы - 2, Бумага - 3 ");
    scanf("%d", &vvod);
   }
   // отображение на экране выбора игрока
    printf("Вы выбрали ");
    switch (vvod)
   {
    case 1 : printf ("Камень ");   break;
    case 2 : printf ("Ножницы "); break;
    case 3 : printf ("Бумага ");  break;            
   }  

   // определяем ход компьютера
   // запрашиваем текущее время
   t=time(NULL);
   t_m=localtime(&t);
   sec=t_m->tm_sec;
   comp=(sec*rand())%3+1;// случайное число в диапазоне от 1 до 3
   // отображение на экране выбора компьютера
   printf(" Компьютер выбрал ");
   switch (comp)
   {
    case 1 : printf ("Камень "); break;
    case 2 : printf ("Ножницы "); break;
    case 3 : printf ("Бумагу "); break;             
   }
   // определяем кто победил
   if (comp==vvod){pobeda=0;};
   if (vvod==1 && comp==2){pobeda=1;};
   if (vvod==1 && comp==3){pobeda=2;};
   if (vvod==2 && comp==3){pobeda=1;};
   if (vvod==2 && comp==1){pobeda=2;};
   if (vvod==3 && comp==1){pobeda=1;};
   if (vvod==3 && comp==2){pobeda=2;};

   // выводим результат
   switch (pobeda)
   {
    case 0 : printf ("Ничья "); break;
    case 1 : printf ("Вы выиграли "); break;
    case 2 : printf ("Выиграл компьютер "); break;  
   }
 }

int main()
{   
int k=0;
int pob=0;
int por=0;
int nec=0;
int igra=1;

// играем  пока не будет выбран выход из игры
while (igra==1)
{
// очередной тур игры
  tur();
// обновляем статистику по игре
k=k+1;
if (pobeda==0){nec=nec+1;}
if (pobeda==1){pob=pob+1;}
if (pobeda==2){por=por+1;}

// запрашиваем вопрос о продолжении игры
  printf(" Сыграем еще раз? ");
  printf("Да - 1  Нет - 2 ");
  scanf("%d", &igra);
}

printf(" Всего игр %d " , k);
printf(" Побед %d " , pob);
printf(" Поражений %d " , por);
printf(" Ничей %d " , nec);
printf(" Для выхода нажмите любую клавишу " );
getch();        
}

Задание для самостоятельной работы.

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

Вернуться к содержанию 

Поделиться

 
Комментарии (0)

Нет комментариев. Ваш будет первым!