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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2010, 16:42   #1
Card1nal
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 44
По умолчанию Алгоритм игры со спичками

Добрый день.
Помогите пожалуйста разработать алгоритм для ИИ для следующей игры:

Дано 4 ряда спичек. Количество спичек в ряду задается формулой
(ряд*2)-1
Можно брать сколко угодно спичек с одного ряда, но на другой забираться нельзя. Проигравшим считается взявший последнюю спичку.

Пока есть программа для, так сказать, "мультиплеера"

Код:
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include "my_printf.h"


int             *my_fill_tab(int *tab, int lines)
{
  int           i;

  i = 0;
  tab = malloc(lines * sizeof(tab));
  while (i < lines)
    {
      tab[i] = ((1 + i) * 2);
      i++;
    }
  return (tab);
}

void            my_aff_tab(int *tab, int max)
{
  int           i;
  int           matches;
  int           spaces;

  i = 0;
  while (tab[i])
    {
      spaces = ((max * 2) - tab[i]) / 2;
      while (spaces-- != 0)
        my_putchar(' ');
      matches = tab[i];
      while (matches-- != 1)
        my_putchar('|');
      my_putchar('\n');
      i++;
    }
}

int             calcul_total(int *tab)
{
  int           result;
  int           i;

  i = 0;
  result = 0;
  while (tab[i])
    result += (tab[i++]) - 1;
  return (result);
}
void            my_game_pvp(int *tab)
{
  int           player;
  int           line;
  int           matches;
  char          buffer[2];
  int           total_matches;

  player = 0;
  total_matches = calcul_total(tab);
  while (total_matches != 0)
    {
      my_printf("Player %d , please, enter the line\n", (player %2 + 1));
      read(0, buffer, 2);
      line = atoi(buffer);
      line--;
      my_printf("Player %d , please, enter how much matches would you like to take\n", (player %2 + 1));
      read(0, buffer, 2);
      matches = atoi(buffer);
      if (tab[line] < matches + 1)
        {
          my_printf("there are not enough matches\n");
          player--;
        }
      else
        tab[line] -= matches;
      player++;
      total_matches = calcul_total(tab);
      my_aff_tab(tab, 4);
    }
  my_printf("Player %d is the Winner!\n", ((player + 1) % 2 + 1));
}


int             main(void)
{
  int           *tab;

  tab = my_fill_tab(tab, 4);
  my_aff_tab(tab, 4);
  my_game_pvp(tab);
  return 0;
}
Буду очень благодарен))
Card1nal вне форума Ответить с цитированием
Старый 14.02.2010, 18:53   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Я даже не знаю, ну первое время пускай рандомом, а как мало спичек остается, пускай какие-нибудь стандартные ситуации обрабатывает...
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 14.02.2010, 19:17   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Первым ходом нужно брать спичек (взял противник - 1), а дальше (4 - взял противник). Если оба знают эту стратегию, то победит тот, кто начал игру, взяв 1 спичку. Короче, если начинаешь первым, нужно чтоб после каждого хода оставалось четное количество спичек, вторым - нечетное
пыщь
JTG вне форума Ответить с цитированием
Старый 14.02.2010, 19:20   #4
Card1nal
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 44
По умолчанию

JTG, спасибо, но тут твой алгоритм не подходит, поскольку оснавная задача дазже не сколько спичек брать, а с какого ряда

Все, всем спасибо, уже нашел.

Последний раз редактировалось Card1nal; 15.02.2010 в 14:32.
Card1nal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 игры Соколов Дмитрий Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 31.03.2009 11:26
алгоритм для игры Гольф Primitiv Помощь студентам 1 23.02.2009 14:39
игры Компьютер Помощь студентам 9 04.03.2008 19:12
Игры wwwдмитрий Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 24.12.2007 12:28