forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Алгоритм игры Lines (http://forum.boolean.name/showthread.php?t=3896)

Magus 15.09.2007 15:46

Re: Алгоритм игры Lines
 
Цитата:

for (i1=1;i1<15;i1++)
{
for (int i2=1;i2<15;i2++)
Опять 25! ;)

impersonalis 15.09.2007 15:49

Re: Алгоритм игры Lines
 
Код:

while (true)
{
x=rand()%14;
y=rand()%14;//Рандомно определяем x и y координаты нового добавляемого шарика
if (!g[x][y])
{
g[x][y]=rand()%7+1;//Если место пусто, то добавляем шар
break;
}
}

Приведи код к нормальному стилю!
----------
так и не понял: у тебя индексация элементов матрицы с нуля или с 1 ?

dimanche13 15.09.2007 16:32

Re: Алгоритм игры Lines
 
Код:

addBall(int sBall)
{
  int x,y,c;
  for (int k=0;k<sBall;k++)
    {
        do {   
            x=rand()%14;
            y=rand()%14;
            c=rand()%7+1;
          } while(!SetBall(x,y,c))
      }
}

//или в цикле попроще: while(!SetBall(rand()%14,rand()%14,rand()%7+1))

int setBall(int x,int y,int c)
{
  if(isEmptyPosition(x,y))
  {
      g[x][y] = c;
        return true;
  }
  return false;
}

Или типа такого, писал в браузере, возможны ошибки))) А я вообще вот подумал: ход компа это лана-фигня, а вот ход игрок посложнее будет ,ч чуть ли не A* надо использовать... впрочем и тут я оставляю за собой право на ошибку)))
"так и не понял: у тебя индексация элементов матрицы с нуля или с 1 ?" -присоединяюсь к вопросу.

Alex_90 15.09.2007 17:15

Re: Алгоритм игры Lines
 
Цитата:

Опять 25! ;)
Да! Потому, что вариант
Цитата:

for (i1=1;i1<14;i1++)
дает следующий глюк: шары выводятся так же не на игровом поле!

Alex_90 15.09.2007 17:30

Re: Алгоритм игры Lines
 
:dontknow:
Sorry, но я с такой конструкцией еще не сталкивался!
Цитата:

while (true)
{
...
break;
}
и с такой тоже!
Цитата:

if (!g[x][y])
{
...
break;
}

dimanche13 15.09.2007 17:45

Re: Алгоритм игры Lines
 
Цитата:

Сообщение от Alex_90
Sorry, но я с такой конструкцией еще не сталкивался!
и с такой тоже!

1. while(true) или while(1) - бесконечный цикл.
2. break - команда для выхода из бесконечного цикла.(не только)
3. if(что-то-там) break; - выход из цикла по соблюдении условия.

Бесплатный совет(впрочем как и все остальные): используй такие определения
#define SIZEX 14
#define SIZEY 14
тогда
for(x=0;x<SIZEX;x++)
x = rand() % SIZEX
по-моему намного читабельнее, как ты считаешь?

Alex_90 15.09.2007 20:59

Re: Алгоритм игры Lines
 
Код добавления шаров исправил, но все равно выводится в основном не по 3 а по 4 шара (а требуется по 3):
Цитата:

//Добавляем шары
int x,y=0;//Добавляем переменные, которым присваиваем значение "0"
bool r;//Переменная состояния клетки (занята-свободна)
for (int k=1;k<4;k++)//Добаляем 3 шара
{
r=false;//По умолчанию это место уже занято чем либо
while (true)
{
x=rand()%m1;
y=rand()%m1;//Рандомно определяем x и y координаты нового добавляемого шарика
if (g[x][y]==0)
{
g[x][y]=rand()%7+1;;//Если место пусто, то добавляем шар
break;
}
}
//Теперь опять может наступисть проигрыш игрока
//Проверяем вариант проигрыша игрока
for (i1=1;i1<m2;i1++)
{
for (int i2=1;i2<m2;i2++)
{
if (g[i1][i2]==0)
{
proigrish=true;
break;
}
}
}
}
m1=14
m2=15

impersonalis 15.09.2007 21:12

Re: Алгоритм игры Lines
 
while(!answer){
Цитата:

"так и не понял: у тебя индексация элементов матрицы с нуля или с 1 ?" -присоединяюсь к вопросу.
}

haedim 15.09.2007 21:25

Re: Алгоритм игры Lines
 
Согласен с impersonalis. Другой причины здесь не вижу.

dimanche13 15.09.2007 21:43

Re: Алгоритм игры Lines
 
47 и 48 посты ответ на твой вопрос, ответь же наконец и на наш вопрос! Это одна из самых тонких вещей в С++, если указываешь размер массива N, то последний элемент массива array[N-1](!!!), потому что счет идет с нуля array[0], array[1] ... array[9].
Мы написали тебе полный алгоритм хода компьютера. Просто перечитай, и все поймешь. С уважением.

Alex_90 20.09.2007 21:33

Re: Алгоритм игры Lines
 
:)
Итак:
  1. Идексация массива идет от 1 до 15 (так как от одного до 14 (что прямо указанно в моем сообщении выше) вызывает глюк - смещение шаров (при отрисовке это видно) на одну клетку назад. Шар который должен выводиться в первом ряду клеток выводится вообще перед полем!!!). Объявляется вы файле Var.h массив так:
    Цитата:

    int g[14][14];
  2. Функция HodCompa (), как наверно можно догадаться, не единственная (есть HodIgroka (), Otrisovka (), Shphere (), отображающаяя шар на экране с текстурами, подсветкой и другими прибомбасами). Дробить существующую функцию HodCpmpa () на несколько не буду, потому что тогда что либо найти в свем коде точно невозможно!!!:)

dimanche13 20.09.2007 21:45

Re: Алгоритм игры Lines
 
Итак:
1.Индексация массива идет не с 1 до 15, а с 0 до 13 перечитай главу про массивы. Так простейший одномерный массив типа инт
int array[5] = { 1, 2, 3, 4, 5 }
так вот array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
2. Дело твоё. Я же советую как проще...

Alex_90 20.09.2007 21:48

Re: Алгоритм игры Lines
 
Цитата:

с 0 до 13
Даже так!!!


impersonalis 20.09.2007 23:11

Re: Алгоритм игры Lines
 
Цитата:

Сообщение от Alex_90
Идексация массива идет от 1 до 15

Код:

x=rand()%m1;
y=rand()%m1;//Рандомно определяем x и y координаты нового добавляемого шарика

x=0..(m1-1)
y=0..(m1-1)

Alex_90 21.09.2007 22:30

Re: Алгоритм игры Lines
 
НУ НАКОНЕЦ-ТО, ГЛЮК ИСПРАВИЛ!!!
Но почему-то обнаружился новый: шары при каждом вызове функции выводятся шары в одни и те же места?
Что еще более удивительно в WinMain у меня есть следующая строка:
Цитата:

srand(GetTickCount());
прямо запрещающая подобные выходки rand.
Как заставить шары выводиться в разных метстах?:)


Часовой пояс GMT +4, время: 15:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot