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

Wizout 05.01.2012 19:46

начальный этап изучения js
 
всем привет, изучаю потихоньку javascript по самоучителю на данном сайте и дочитал до раздела "пишем на javascript", но задания даваемые в самоучителе особой пользы не дают, так как слишком простые

хотелось бы немного побольше практики, если не сложно могли бы вы дать парочку простых задач для практики? Буду оч признателен. После практики примусь за новый раздел:)

Serg_pnz 05.01.2012 19:54

Игра "Пятнашки" с таймером и кнопкой "Начать заново", и проверкой на "сходимость" игры.

Wizout 05.01.2012 23:55

Цитата:

Сообщение от Serg_pnz
Игра "Пятнашки" с таймером и кнопкой "Начать заново", и проверкой на "сходимость" игры.

хехе я думаю этого не сделать с теми знаниями, которые были даны =)

devote 05.01.2012 23:57

Цитата:

Сообщение от Wizout
хехе я думаю этого не сделать с теми знаниями, которые были даны =)

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

nerv_ 06.01.2012 10:01

Цитата:

Сообщение от devote
ну дык ты начни делать, а во время разработки и знания придут нужные.

Wizout, я сам новичок :) И сейчас пишу скрипт для оформления vba кода на одном из форумов по excel (пример1, пример2). Попробуйте сделать что-нибудь аналогичное (если интересно). Или Вам нужны задачи на какую-то определенную тему?

Serg_pnz 06.01.2012 12:59

Цитата:

Сообщение от devote (Сообщение 148241)
ну дык ты начни делать, а во время разработки и знания придут нужные.

И я про это - главное начать. Зато потом портфолио уже будет с багажом (простите за тавтологию), хоть будет что показать...

Чуть подучитесь - пишите чат - хороший способ познакомиться с аяксом...

Wizout 06.01.2012 14:12

хорошо, попробую, подскажите еще хоть какие средства использовать, чтобы пятнашки сделать? массивы или объекты?

nerv_ 06.01.2012 14:39

Wizout, это не камень в Ваш огород, но ср-во №1 - это мозг ;) По вопросу: думаю, придется и то и другое.

bohdantheone 06.01.2012 16:04

Wizout,
я на С++ когда-то разрабатывал, так использовал для этого массив. Да интересная задача, надо будет попробовать на JS такое сварганить

рони 06.01.2012 16:31

Вариант :)

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:

Wizout 10.01.2012 21:57

Цитата:

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

было бы у тебя поле 20 на 20 клеток) :haha:

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

Livaanderiamarum 10.01.2012 21:57

Цитата:

Сообщение от Wizout (Сообщение 149396)
чтобы с canvas больше практики было :)

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

п.с. сделай массив какой я показал, то есть массив массивов, матрица называется.

Livaanderiamarum 10.01.2012 21:58

Цитата:

Сообщение от Wizout (Сообщение 149399)
ну извиняй ))
у меня не так много опыта, чтобы мог сразу нормальный код написать, а не говнокодить... поэтому тут и сижу, синтаксис js освоил, а чтобы что-то писать начать нужна практика, будет больше практики станет и код лучше

На ну так вот, чтобы пускать букву Ж твоя структура представления полей не подходит)) нужна матрица))) понимаешь зачем))? если нет то обьясню)

nerv_ 10.01.2012 23:03

набросал на скорую руку
var x = [
	[1, 0, 1],
	[0, 1, 0],
	[0, 0, 1]
 ];

var z = check();

function check() {
	for(var i = 0; i < 3; i++) if(x[i][0] == x[i][1] && x[i][1] == x[i][2]) return true;
	for(var i = 0; i < 3; i++) if(x[0][i] == x[1][i] && x[1][i] == x[2][i]) return true;
	if(x[0][0] == x[1][1] && x[1][1] == x[2][2]) return true;
	if(x[0][2] == x[1][1] && x[1][1] == x[2][0]) return true;
	return false;
}

alert(z);

Livaanderiamarum 10.01.2012 23:56

Цитата:

Сообщение от nerv_ (Сообщение 149415)
набросал на скорую руку

а если у тебя поле 20 на 20

trikadin 11.01.2012 02:14

Livaanderiamarum, мне кажется, для "скороручного" решения вполне нормально. И в крестиках-ноликах поле всегда 3x3...

А вообще, Wizout, если уж взялись делать крестики-нолики, то уж хотя бы искусственный интеллект им допишите...

Livaanderiamarum 11.01.2012 02:49

Цитата:

Сообщение от trikadin (Сообщение 149446)
Livaanderiamarum, мне кажется, для "скороручного" решения вполне нормально. И в крестиках-ноликах поле всегда 3x3...

А вообще, Wizout, если уж взялись делать крестики-нолики, то уж хотя бы искусственный интеллект им допишите...

А мы ща в аське общаемся) я рассказываю секреты ООП)

trikadin 11.01.2012 03:24

Цитата:

Сообщение от Livaanderiamarum
А мы ща в аське общаемся) я рассказываю секреты ООП)

Бедный парень.

devote 11.01.2012 03:25

Цитата:

Сообщение от trikadin
Бедный парень.

:lol:

Livaanderiamarum 11.01.2012 04:15

Цитата:

Сообщение от trikadin (Сообщение 149462)
Бедный парень.

Почему)? я ему за 2 часа обьяснил как устроено все)))) почти весь JS обьяснил))

там то я не стебался;)

trikadin 11.01.2012 04:16

Цитата:

Сообщение от Livaanderiamarum
Почему)? я ему за 2 часа обьяснил как устроено все)))) почти весь JS обьяснил))

А может, вам лучше на педагога? За 2 часа объяснить почти весь JS - это сильно.

Livaanderiamarum 11.01.2012 04:20

Цитата:

Сообщение от trikadin (Сообщение 149475)
А может, вам лучше на педагога? За 2 часа объяснить почти весь JS - это сильно.

ну там мне помогло что он знает С++ С и достаточно хорошо шарп
))) просто объяснял в чем разница прототипов и классов) и как устроено хранение и работа обектов на уровне ядра. как ссылки работают, операторы и.т.п. заем нужно __prototype__

обьяснил что prototype это как бы папочка из которой дети обьекта будут брать свойства если в них самих они не найдутся)) и что эти свойства В САМОГО папку не кладутся чтобы не засорять его. .и.т.п. многие такие вещи, о том как ссылки работают, как базы работают и.т.п.

нашу переписку можно даже в вузах использовать как пособие)

то есть я в нчаале намеренно обьясняю НЕПРАВИЛЬНО и человек говорит " а нахрена так?? " ии тут я ему говорю " так вот создателей это тоже бесило и они придумали такую штуку" и обьясняю штуку чтобы так не было".

то есть практически НИ ГДЕ не обьясняется А ЗАЧЕМ нужны прототипы, а зачем поиск идентефикаторов происходит именно так, а зачем ровно работает именно так, а не иначе. А ЗАЧЕМ что-то работает так, а не иначе.
а это нужно для понимания)

trikadin 11.01.2012 04:23

Молодец, чё)

zebra 11.01.2012 04:50

Цитата:

Сообщение от Livaanderiamarum
а, тока я чувствую мы в ответе за тех кого приручили)

Ты его укусил, и он тоже будет тролить?

Livaanderiamarum 11.01.2012 04:52

Цитата:

Сообщение от zebra (Сообщение 149489)
Ты его укусил, и он тоже будет тролить?

Троллить?

nerv_ 11.01.2012 10:03

Цитата:

Сообщение от trikadin
А может, вам лучше на педагога? За 2 часа объяснить почти весь JS - это сильно.

У Ильи курсы минимум на месяц, а тут за два часа :D

Livaanderiamarum 11.01.2012 20:20

Цитата:

Сообщение от nerv_ (Сообщение 149508)
У Ильи курсы минимум на месяц, а тут за два часа :D

Ну ладно ладно) я процентов 20 рассказал) седня это выяснилось когда начал рассказывать как скобки работают)

melky 11.01.2012 21:22

Цитата:

Сообщение от Livaanderiamarum (Сообщение 149478)
как устроено хранение и работа обектов на уровне ядра. как ссылки работают, операторы

ну-с, преподаватель, ответьте нам на эти вопросы. Ясненько, подробненько, с примерами исходного кода на яве движка JS от Mozilla (у них он есть в свободном доступе), примерами из реальной жизни, карточными играми и профурсетками.
как устроено хранение и работа объектов на уровне ЯДРА ?
Как работают ссылки?
Как работают операторы?
Цитата:

Сообщение от Livaanderiamarum (Сообщение 149478)
нашу переписку можно даже в вузах использовать как пособие)

не дай Боже студентам потом считать, что прототайп - это папочка.:-E

Цитата:

Сообщение от Livaanderiamarum (Сообщение 149478)
то есть я в нчаале намеренно обьясняю НЕПРАВИЛЬНО и человек говорит " а нахрена так?? " ии тут я ему говорю " так вот создателей это тоже бесило и они придумали такую штуку" и обьясняю штуку чтобы так не было".


- дети, <2*2 == 5>!
Цитата:

Сообщение от Livaanderiamarum (Сообщение 149478)
то есть практически НИ ГДЕ не обьясняется А ЗАЧЕМ нужны прототипы,

если ты знаешь, что это такое, зачем тебе узнавать "зачем они нужны" ?

Цитата:

Сообщение от Livaanderiamarum (Сообщение 149478)
а зачем ровно работает именно так, а не иначе.

ок. почему при == вызывается valueOf, а не myOverloadedMethod или toString ?


простите ребят,

Livaanderiamarum 11.01.2012 21:44

гыы))

Wizout 12.01.2012 00:21

ну что сказать в теории некоторые моменты он хорошо расписал как что работает =)) в книге про это не было написано, жду вот пока Livaanderiamarum освободится, чтобы побыстрее к практике уже перейти, еще бы мата поменьше в тексте и было бы совсем замечательно:p


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