|
15.09.2007, 15:46
|
#46
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 823
Написано 101 полезных сообщений (для 205 пользователей)
|
Re: Алгоритм игры Lines
for (i1=1;i1<15;i1++)
{
for (int i2=1;i2<15;i2++)
|
Опять 25!
|
(Offline)
|
|
15.09.2007, 15:49
|
#47
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Алгоритм игры Lines
while (true)
{
x=rand()%14;
y=rand()%14;//Рандомно определяем x и y координаты нового добавляемого шарика
if (!g[x][y])
{
g[x][y]=rand()%7+1;//Если место пусто, то добавляем шар
break;
}
}
Приведи код к нормальному стилю!
----------
так и не понял: у тебя индексация элементов матрицы с нуля или с 1 ?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
15.09.2007, 16:32
|
#48
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
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 ?" -присоединяюсь к вопросу.
|
(Offline)
|
|
15.09.2007, 17:15
|
#49
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Алгоритм игры Lines
Опять 25!
|
Да! Потому, что вариант
дает следующий глюк: шары выводятся так же не на игровом поле!
|
(Offline)
|
|
15.09.2007, 17:30
|
#50
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Алгоритм игры Lines
Sorry, но я с такой конструкцией еще не сталкивался!
while (true)
{
...
break;
}
|
и с такой тоже!
if (!g[x][y])
{
...
break;
}
|
|
(Offline)
|
|
15.09.2007, 17:45
|
#51
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
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
по-моему намного читабельнее, как ты считаешь?
|
(Offline)
|
|
15.09.2007, 20:59
|
#52
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
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
|
(Offline)
|
|
15.09.2007, 21:12
|
#53
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Алгоритм игры Lines
while(!answer){
"так и не понял: у тебя индексация элементов матрицы с нуля или с 1 ?" -присоединяюсь к вопросу.
|
}
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
15.09.2007, 21:25
|
#54
|
Разработчик
Регистрация: 16.09.2006
Сообщений: 354
Написано 10 полезных сообщений (для 2 пользователей)
|
Re: Алгоритм игры Lines
Согласен с impersonalis. Другой причины здесь не вижу.
|
(Offline)
|
|
15.09.2007, 21:43
|
#55
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Re: Алгоритм игры Lines
47 и 48 посты ответ на твой вопрос, ответь же наконец и на наш вопрос! Это одна из самых тонких вещей в С++, если указываешь размер массива N, то последний элемент массива array[N-1](!!!), потому что счет идет с нуля array[0], array[1] ... array[9].
Мы написали тебе полный алгоритм хода компьютера. Просто перечитай, и все поймешь. С уважением.
|
(Offline)
|
|
20.09.2007, 21:33
|
#56
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Алгоритм игры Lines
Итак: - Идексация массива идет от 1 до 15 (так как от одного до 14 (что прямо указанно в моем сообщении выше) вызывает глюк - смещение шаров (при отрисовке это видно) на одну клетку назад. Шар который должен выводиться в первом ряду клеток выводится вообще перед полем!!!). Объявляется вы файле Var.h массив так:
- Функция HodCompa (), как наверно можно догадаться, не единственная (есть HodIgroka (), Otrisovka (), Shphere (), отображающаяя шар на экране с текстурами, подсветкой и другими прибомбасами). Дробить существующую функцию HodCpmpa () на несколько не буду, потому что тогда что либо найти в свем коде точно невозможно!!!
|
(Offline)
|
|
20.09.2007, 21:45
|
#57
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
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. Дело твоё. Я же советую как проще...
|
(Offline)
|
|
20.09.2007, 21:48
|
#58
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Алгоритм игры Lines
|
(Offline)
|
|
20.09.2007, 23:11
|
#59
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Алгоритм игры Lines
Сообщение от Alex_90
Идексация массива идет от 1 до 15
|
x=rand()%m1;
y=rand()%m1;//Рандомно определяем x и y координаты нового добавляемого шарика
x= 0..(m1-1)
y= 0..(m1-1)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
21.09.2007, 22:30
|
#60
|
Знающий
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение (для 2 участников)
|
Re: Алгоритм игры Lines
НУ НАКОНЕЦ-ТО, ГЛЮК ИСПРАВИЛ!!!
Но почему-то обнаружился новый: шары при каждом вызове функции выводятся шары в одни и те же места?
Что еще более удивительно в WinMain у меня есть следующая строка:
прямо запрещающая подобные выходки rand.
Как заставить шары выводиться в разных метстах?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:29.
|