Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   начальный этап изучения js (https://javascript.ru/forum/misc/24556-nachalnyjj-ehtap-izucheniya-js.html)

Wizout 10.01.2012 19:24

решил вместо пятнашек попробовать сделать первую игру крестики нолики.

так вот нужна ваша помощь ))
Сделал такой план что нужно реализовать:
1. игровое поле для игры в крестики нолики.
2. функция определяющая выигрыш.
3. выбор игры - 2 игрока за одним компом или игрок против компа.
4. Выбор - играть крестиками или ноликами.
5. Функция показывающая, чей сейчас ход.
6. функция ставящая крестики или нолики на поле

что еще нужно добавить?

Livanderiaamarum 10.01.2012 19:47

СОВЕТ:
Нужно разбить процесс игры на части ЛОГИЧЕСКИ понятные человеку, но не понятные компьютеру, и описать эти части принимая за логические единицы. Чтобы язык воспринимал их как логические единицы нужно выделять их в функции. например функция СДЕЛАТЬ ХОД.. это логическая единица. внутри функции описываешь действия которые будут делать вид и работать ТАК, как будто человек делает ход (функция изменят какие-то цифры, положения крестиков.т.п.) и допустим среди этих не логических действий(изменения цифр) встречается логическое, например (ПРОВЕРИТЬ СТОИТ ЛИ ТУТ КРЕСТИК ИЛИ КЛЕТКА ПУСТА А ЕСЛИ НЕТ ТО ЧТО В НЕЙ СТОИТ), то это уже опять логическая единица и её снова нужно группировать в функцию, и вызывать где нужно.

это общий подход)))

то есть есть логические единицы, а есть не логические единицы)
не логические это 2+4, и.т.п. а логические это "Сделать ход" "проверить пустоту поля" "Обьявить победу"

так вот ОБЯЗАТЕЛЬНО ВСЕ, даже очень простые логические единицы, (например проверить пустое ли поле" выводи в функции) и потом ты сможешь вызывать их где надо относительно нужного тебе поля например)

Wizout 10.01.2012 21:26

подскажите такую вещь, есть массив, он используется в качестве поля, как его вывести в элементе canvas в виде:
[][][]
[][][]
[][][]
?

Livanderiaamarum 10.01.2012 21:39

Цитата:

Сообщение от Wizout (Сообщение 149389)
подскажите такую вещь, есть массив, он используется в качестве поля, как его вывести в элементе canvas в виде:
[][][]
[][][]
[][][]
?


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

мысленно логически отдели ОБОЛОЧКУ от ядра)
ядро это прога которая считает КАК БУДЕТ РАБОТАТЬ ИГРА, а оболочка это прога которая РИСУЕТ КАРТИНКУ игры ИСХОДЯ ИЗ текущего состояния ядра))

как рисовать поле щас скажу)

Livanderiaamarum 10.01.2012 21:42

У тебя такой массив?
[[поле, поле, поле],
[поле, поле, поле],
[поле, поле, поле]]

или такой
[поле, поле, поле, поле, поле, поле, поле, поле, поле]

Livanderiaamarum 10.01.2012 21:47

Ты уже придумал как определять при каждом сделанном ходе ВЫПАЛА ЛИ ВЫИГРАШНАЯ КОМБИНАЦИЯ)?
Какие идеи есть?

dmitriymar 10.01.2012 21:48

Цитата:

Сообщение от Wizout
вывести в элементе canvas

зачем тебе она для крестиков-ноликов?

Wizout 10.01.2012 21:51

Цитата:

Сообщение от Livanderiaamarum (Сообщение 149391)
У тебя такой массив?
[[поле, поле, поле],
[поле, поле, поле],
[поле, поле, поле]]

или такой
[поле, поле, поле, поле, поле, поле, поле, поле, поле]

второй

Цитата:

Сообщение от Livanderiaamarum (Сообщение 149392)
Ты уже придумал как определять при каждом сделанном ходе ВЫПАЛА ЛИ ВЫИГРАШНАЯ КОМБИНАЦИЯ)?
Какие идеи есть?

определять наверное выигрышную позицию пока такой набросок:

function winner()	//функция определения выиграша
	{
		if(field[0]==field[1] && field[1]==field[2] && field[2]==0 ||
		   field[3]==field[4] && field[4]==field[5] && field[5]==0||
		   field[6]==field[7] && field[7]==field[8] && field[8]==0||
		   field[0]==field[4] && field[4]==field[8] && field[8]==0||
		   field[2]==field[4] && field[4]==field[6] && field[6]==0||
		   field[0]==field[3] && field[3]==field[6] && field[6]==0||
		   field[1]==field[4] && field[4]==field[7] && field[7]==0||
		   field[2]==field[5] && field[5]==field[8] && field[8]==0)
		   alert("Вы выиграли!");
		   
		if(field[0]==field[1] && field[1]==field[2] && field[2]==1 ||
		   field[3]==field[4] && field[4]==field[5] && field[5]==1||
		   field[6]==field[7] && field[7]==field[8] && field[8]==1||
		   field[0]==field[4] && field[4]==field[8] && field[8]==1||
		   field[2]==field[4] && field[4]==field[6] && field[6]==1||
		   field[0]==field[3] && field[3]==field[6] && field[6]==1||
		   field[1]==field[4] && field[4]==field[7] && field[7]==1||
		   field[2]==field[5] && field[5]==field[8] && field[8]==1)
		   alert("Вы выиграли!");
	}

Wizout 10.01.2012 21:52

Цитата:

Сообщение от dmitriymar (Сообщение 149393)
зачем тебе она для крестиков-ноликов?

чтобы с canvas больше практики было :)

Livaanderiamarum 10.01.2012 21:54

Ну и жесть))))
А не проще пускать букву Ж от места где поставлен крестик или нолик и смотреть СКОЛЬКО КРЕСТИКОВ пересекает каждая палочка буквы Ж :) если хоть одна палочка пересекает 3 крестика включая текущий, то ход выиграшный))))

было бы у тебя поле 20 на 20 клеток какое бы ты условие в if написал бы))?) :haha:


Часовой пояс GMT +3, время: 20:45.