Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: находятся ли две точки в массиве на одной диагонали

Сообщения:  [1-10]    [11-20]  [21-25] 

 
 автор: pavluxa09   (20.07.2012 в 14:00)   письмо автору
 
   для: Valick   (20.07.2012 в 13:15)
 

В принципе игра уже готова, за исключением клиентской части, нужно внешний вид ей предать

  Ответить  
 
 автор: Valick   (20.07.2012 в 13:15)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 20:28)
 

для примера покажу функцию которую я писал для морского боя
<?php
//****************************************************************************************
// Функция проверки ранен или убит
// $kor - массив выборки кораблей из БД
// $point - точка выстрела
// $x - размерность поля по горизонтали
// $y - размерность поля по вертикали
//****************************************************************************************
// 1 - фрагмент целого корабля
// 3 - фрагмент раненого корабля
// 4 - фрагмент убитого корабля
//****************************************************************************************
// Автор: Каменев ВВ 2010 г.
//****************************************************************************************
function badship($kor,$point,$x,$y){
$r[$point]=4;
$a=1;
    if(isset(
$kor[$point-$a])){
        if(
$kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
        if(
$kor[$point-$a]==3){
            while(isset(
$kor[$point-$a])){
                if(
$kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
                
$r[$point-$a]=4$a++;}
        }
    }
$a=1;
    if(isset(
$kor[$point+$a])){
        if(
$kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
        if(
$kor[$point+$a]==3){
            while(isset(
$kor[$point+$a])){
                if(
$kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
                
$r[$point+$a]=4$a++;}
        }
    }
$a=$y;
    if(isset(
$kor[$point-$a])){
        if(
$kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
        if(
$kor[$point-$a]==3){
            while(isset(
$kor[$point-$a])){
                if(
$kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
                
$r[$point-$a]=4$a=$a+$y;}
        }
    }
$a=$y;
    if(isset(
$kor[$point+$a])){
        if(
$kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
        if(
$kor[$point+$a]==3){
            while(isset(
$kor[$point+$a])){
                if(
$kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
                
$r[$point+$a]=4$a=$a+$y;}
        }
    }
return 
$r;
}
//****************************************************************************************
?>

  Ответить  
 
 автор: Valick   (20.07.2012 в 13:09)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 20:28)
 

Проверять надо все возможные варианты, предварительно отбросив остальные, а это циклы с рекурсиями. Собирать все подходящие по условию варианты и уже из них выбирать окончательный.
Два, четыре или 138 циклов будет это заранее не известно.
Задача легкая только на первый взгляд.
Заставить сервер самостоятельно играть за другого игрока, даже не думайте.
Нужно будет набивать базу сыгранных партий, основываясь на анализе которых сервер будет выбирать подходящие ходы.
А для этого нужна мощная и продуманная организация БД

  Ответить  
 
 автор: pavluxa09   (18.07.2012 в 20:28)   письмо автору
 
   для: Valick   (18.07.2012 в 20:24)
 

Не совсем то понял при чём тут БД, ну то ладно. Вопрос в другом. Я застрял на том, что у меня дамка выполнила удар, и после этого мне нужно проверить, может она её может побить. Ведь если она ещё может побить то нужно что бы она обязательно это сделала, и не допускать того что бы человек ходил, когда ему необходимо дамкой ещё сделать удар.

Собственно вопрос в том, как пройтись циклом по диагоналям на которых расположена моя дамка, я не знаю как лучше, толи двумя циклами (основная и побочная диалогнали), то ли четырмя (сверху слева, сверху справа, снизу слева, снизу справа). Подскажите, как лучше реализовать эту проверку? И предложите пожалуйста вариант цикла. Я прошу Вас

  Ответить  
 
 автор: Valick   (18.07.2012 в 20:24)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 19:28)
 

вы проверяете то что нафиг не надо проверять
пустое поле, шашка или дамка - это практически константа
цифрами они удобнее только из-за того что так лучше для бд
и в конце концов вы бд используете только для хранения

[поправлено модератором]

  Ответить  
 
 автор: pavluxa09   (18.07.2012 в 20:06)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 19:28)
 

Помогите пожалуйста составить 4 цикла, либо как-то их объединить, что бы я мог пройтись по диагоналям на которых расположена моя дамка.

То есть, у меня есть дамка, о ней я знаю её X и Y координаты. Так же я знаю размер поля. Моя задача первым циклом пройтись по вертикали которая отходит от точки сверху влево, далее сверху справа, далее снизу слева и далее снизу справа.

Как подобный цикл можно реализовать? Помогите пожалуйста, уже все мозги себе вынес.

  Ответить  
 
 автор: pavluxa09   (18.07.2012 в 19:28)   письмо автору
 
   для: confirm   (18.07.2012 в 19:18)
 

Ну в принципе Вы правы, но дело в том что я уже практически реализовал. Мне осталось только сделать проверку, что после хода дамки нужно проверить может ли она ещё побить кого-то или нет, с этим я запутался, не как не доходит как пройтись по диалоганям на которых она расположена. Уже и рисовал, не помогает ( Помогите пожалуйста.

Осталось этот вопрос решить, и определение победителя, но если я решу этот то и тот без проблем решается. Помогите прошу Вас ради всего святого

  Ответить  
 
 автор: confirm   (18.07.2012 в 19:18)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 19:00)
 

Никой выгоды, так как отдать половину серверу, а вторую клиенту, это выгоднее. В этом случае, то что больше 2, это клиент, а четность/нечетность числа будет указывать шашка это или дамка. Проверка же на четность, это N & 1, что намного выгоднее, чем деление, да еще с проверкой нацело или нет (по модулю). Думать надо.

  Ответить  
 
 автор: pavluxa09   (18.07.2012 в 19:01)   письмо автору
 
   для: pavluxa09   (18.07.2012 в 19:00)
 

Но вот как мне найти крайние точки диагоналей, вот в этом вопрос. У меня шашка размещена на доске, я знаю её X и Y и мне нужно понять, от куда нужно начинать перебирать что бы эту диагональ пройти. И как одновременно пройти две диагонали.

  Ответить  
 
 автор: pavluxa09   (18.07.2012 в 19:00)   письмо автору
 
   для: confirm   (18.07.2012 в 18:45)
 

Выгода в моём варианте есть, что бы понять шашка это или дамка достаточно выполнить условие if( этот ID < 3 ). А далее смотрим, если он нацело делиться на 2 то это шашка/дамка сервера, иначе клиента. Всё же очевидно!

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-25] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования