Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.01.2008, 16:08
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 1  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
По умолчанию Помогите написать крестики-нолики

Вот решил, что хватит заниматься менюшками да баннерочками и решил написать игру. Выбор пал на не слишком сложные, но и на не слишком простые крестики-нолики.

Опишу что должно быть:
1. поле размером 300 на 300 пикселей (одна клетка будет 100х100 пикселей)
2. пока без анимации и прочих прибамбасов

На данный момент написан следующий код:
Код:
var user = null;
var computer = null;

/*
function rand(min:Number, max:Number):Number {
	var randRange:Number = Math.round(Math.random()*(max-min))+min;
	return randRange;
}
*/

function setPlayer() {
	if (Math.round(Math.random()) == 0) {
		user = "krestik_mc";
		computer = "nolik_mc";
	} else {
		user = "nolik_mc";
		computer = "krestik_mc";
	}
}
setPlayer();

function setEmpty() {
	for (var i=0; i<=2; i++) {
		for (var j=0; j<=2; j++) {
			_root["cell_"+i+j] = 1;
			//_root["cell_"+i+j] = 1 - пустая клетка
			//_root["cell_"+i+j] = 2 - юзер
			//_root["cell_"+i+j] = 3 - комп
		}
	}
}
setEmpty();

var listener:Object = new Object();
Mouse.addListener(listener);

listener.onMouseUp = function() {
	var x_num:Number = Math.round((_xmouse-50)/100);
	var y_num:Number = Math.round((_ymouse-50)/100);
	
	if (_root["cell_"+x_num+y_num] == 1) {
		var row:Number = (Math.round((_xmouse-50)/100)*100)+50;
		var col:Number = (Math.round((_ymouse-50)/100)*100)+50;
		var clip:MovieClip = _root.attachMovie(user, user+getNextHighestDepth(), getNextHighestDepth());
		clip._x = row;
		clip._y = col;
		_root["cell_"+x_num+y_num] = 2;
	}
	compTurn();
}

function compTurn() {
	
}
Не могу допереть как реализовать ход компьютера... жду советов. Всем заранее спасибо.

Старый 31.01.2008, 16:13
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 2  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
http://www.google.com.ua/search?q=%D...L_enUA216UA217
__________________
: M F N W :

Старый 31.01.2008, 16:27
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 3  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Да алгоритм у них не слишком сложный, а вот как его реализовать...
Вероятно надо как-то обойти все клетки и посмотреть где значения равны 2 (т.е. клетка занята юзером). Ну это можно сделать 2-ия циклами for, а вот как хранить полученные данные?
Потом надо как-то научить комп понимать, что если юзер занял 2 клетки, то 3-ю надо срочно закрыть...
Вот как все это сделать?

Старый 31.01.2008, 16:45
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 4  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
про научить комп я вам ссылку дал. данные о каждой ячейке можно хоанить в массиве с 9 элементами, в чем проблема?
__________________
: M F N W :

Старый 31.01.2008, 17:02
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 5  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Спасибо, буду вникать.

Старый 31.01.2008, 17:23
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 6  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
По вашей ссылке нашел следующий алгоритм:
Цитата:
1)проверить доску, и посчитать количество знаков на каждой диагонали.
2)если есть диагональ, содержащая только одну пустую клетк, ход делается на неё. Если таких несколько (трудно представить, как до такого могло дойти, но мало ли) - на общую пустую клетку либо на случайную.
3)если есть есть несколько диагоналей с двумя пустыми клетками, ход делается на клетку, которую пересекает наибольшее число диагоналей этого типа. (с одной занятой клеткой).
4)если все предыдущеие пункты не срабатывают, ход делается на центральную клетку, или (если хотите дать шанс на победу) - на случайную.
Сразу застопорился на первом пункте. А именно непонятно как узнать, что 2 клетки на одной диагонали заняты?
Попутно возник вопрос как в AS создать массив вида array(key=>value)

Старый 31.01.2008, 17:28
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 7  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
Код:
var arr:Array = new Array();
arr[0]='X'
arr[1]='0'
arr[2]=' '
arr[3]='0'
и так до 8. а посчитать какие из них диагональные я думаю не проблема
__________________
: M F N W :

Старый 31.01.2008, 17:43
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 8  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Ниче не получается... мож я изначально неправильно делаю просто?
Код:
var arr:Array = new Array();

function compTurn() {
	for (var i=0; i<=2; i++) {
		for (var j=0; j<=2; j++) {
			arr["cell_"+i+j] = _root["cell_"+i+j];
		}
	}
	trace(arr); //ничего, даже ошибок не выдает :(((
}
и не понятно как потом считать какие из них диагональные...

Старый 31.01.2008, 18:20
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 9  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
блин, нарисуй решетку - пронумеруй ее, слева-направо пронумеруй от 0 до 8, и посмотри какие ячейки диагональные.

Что должен делать твой код?
__________________
: M F N W :

Старый 31.01.2008, 18:28
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 10  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Мой код должен записать массив такого вида:
arr(cell_00=1, cell_01=1, cell_02=1, cell_10=1, cell_11=1, ...);
и получать доступ к элементу массива я хочу так:
trace(arr["cell_00"]);
ну типа как ассоциативный массив в PHP

А решетка у меня и так пронумерована, это происходит в самом начале кода (см. первый пост).
Выглядит так:

cell_00|cell_01|cell_02
----------------------
cell_10|cell_11|cell_12
----------------------
cell_20|cell_21|cell_22


Последний раз редактировалось GreatRash; 31.01.2008 в 18:30.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.