Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2009, 17:56   #1
eaks
Новичок
Джуниор
 
Аватар для eaks
 
Регистрация: 17.05.2009
Сообщений: 1
Лампочка C, помогите с задачей

Разработать программу, реализирующую игру с картами. На столе раскладываются 24 карты с номерами от 1 до 6 каждой масти (туз считается за 1 и т.д.). Масти карт не существенны. Каждый игрок берёт карту и складывает её значение с суммой тех, что были взяты ранее. Таким образом подсчитывается общая сумма, а не на каждого игрока в отдельности. Первый, кто наверёт в точности 50 очков, выигрывает. Предусмотреть возможность ведения лог-файла игры, а также определение случайным образом игрока делающего первый ход. 2 игрока. Пользователь и компьютер
вот, что я навоял:

Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>


int user_step(int * kards);
int computer_step(int * kards);

// выбор кто делает первый ход
int my_rand()
{

int i;
i = rand()%100;
if(i>50)
   return 0;
 else
  return 1;
}


int main()
{
int summa = 0;
int max = 50;
int kards[6] = {4,4,4,4,4,4};
int step,sm;


step = my_rand();

while (summa < 50)
   {
    if(step%2)
       {
       
       printf("summa = %d\n",summa); 
        sm = computer_step(kards);
        printf("computer step \n%d \n",sm);
        summa = summa + sm;
        step++;
        if(summa > 50)
          {
           printf("Komputer loose!\n");
            getch();
            return 0;
          }
         if(summa == 50)
          {
           printf("Komputer loose!\n");
            getch();
            return 0;
          }
       }
     else
       {
       printf("summa = %d\n",summa);
        sm = user_step(kards);
        summa = summa + sm;
        step++;
        if(summa > 50)
          {
           printf("You loose!\n");
            getch();
            return 0;
          }
         if(summa == 50)
          {
           printf("You win!\n");
            getch();
            return 0;
          }
       }
   }
 getch();
}

int user_step(int * kards)
   {
        int i,k;
        printf("choose your card:");
        for(i = 0; i< 6; i++)
             if(kards[i]!= 0)
                  printf("%d ",i+1);
        printf("\n");
        do
        {
         scanf("%d",&k);
         if((k>0 && k<7)&& (kards[i]!=0))
          {
           kards[i]--;
            return i + 1;
          }
        else
         printf ("Error, you inputed wrong number \n");
        }while(1); 
  
   }

int computer_step(int * kards)
   {
    int i;
     do
     {
       i = rand()%6;
       if(kards[i] != 0)
         {
          kards[i]--;
           return i+1;
         }
     }while(1);  


}
Есть большие подозрения что чего-то тут не правильно, т.к. в результате первый ход всегда делает комп и выигрывает тот, кто набирает не больше 50 очков.
Помогите, а?
eaks вне форума Ответить с цитированием
Старый 17.05.2009, 19:47   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
первый ход всегда делает комп
сделайте так
Код:
int my_rand()
{
srand(time(0));
int i;
i = rand()%101;
if(i>50)
   return 0;
 else
  return 1;
}
а то у вас постоянно генерируется одно и то же число, поэтому комп и ходит первый

Цитата:
выигрывает тот, кто набирает не больше 50 очков
это не правда, ровно на 50 очков выйгрыш считается

У вас тут другая проблема - происходит выход за пределы массива kards и портится стек

Код:
if((k>0 && k<=6)&& (kards[k-1]!=0))
          {
            kards[k-1]--;
            return k + 1;
          }

Последний раз редактировалось counter; 17.05.2009 в 19:52.
counter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачей piterpiter Общие вопросы C/C++ 0 28.04.2009 14:41
Помогите с задачей drossel Общие вопросы C/C++ 9 01.06.2008 21:45
Помогите с задачей Лёха Паскаль, Turbo Pascal, PascalABC.NET 7 08.02.2008 20:08
Помогите с задачей bel_ka Общие вопросы C/C++ 13 26.12.2007 19:23