Что нового

Перемещение в пределах заданных координат

SeMgA

Новичок
Сообщения
42
Репутация
0
Добрый день помогите пожалуйста составить код
имеем плоскость с координатами Х и У, и плоскость 9 клеток

Нужно научиться передвигаться в пределах данного квадрата не выходя за его пределы в случайном направлении(при условии что наискось нельзя)
я не могу додуматься как это реализовать
Идеи были такие:
Присвоить каждому квадрату переменную и для этой переменной задать направление(например 1 квадрат $K1(движение случайное вправо или в низ)) итд для каждого квадрата.
Или через Switch и Case но обратил внимание если в 1 функции в Switch пересекаются координаты, Switch начинает тупить


Подскажите пожалуйста как можно реализовать передвижение, спасибо
 

Вложения

gunter123

Продвинутый
Сообщения
138
Репутация
55
Здравствуйте, плоскость можно реализовать с помощью массивов

Код:
#include "Array.au3"

Const $iFIELD_SIZE = 3                        ; Ширина и высота поля

Dim $aField[$iFIELD_SIZE][$iFIELD_SIZE]        ; Двухмерный массив 3х3
$iX = Random(0, 2, 1)                        ; Случайная начальная координата X
$iY = Random(0, 2, 1)                        ; Случайная начальная координата Y

$aField[$iX][$iY] = 1                         ; Отметим случайную точку в плоскости

While True
   _ArrayDisplay($aField)
   _MoveRandom()
WEnd

Func _MoveRandom()                            ; Функция, передвигающая точку по одной из координат на 1 или -1
   $aField[$iX][$iY] = ''
   $iRand = Random(0, 1, 1)

   If $iRand == 1 Then
      If $iX == 0 Then
         $iX = 1
      ElseIf $iX == $iFIELD_SIZE - 1 Then
         $iX = $iX - 1
      Else
         $iRand = Random(0, 1, 1)
         If $iRand == 0 Then
            $iX -= 1
         Else
            $iX += 1
         EndIf
      EndIf
   Else
      If $iY == 0 Then
         $iY = 1
      ElseIf $iY == $iFIELD_SIZE - 1 Then
         $iY = $iY - 1
      Else
         $iRand = Random(0, 1, 1)
         If $iRand == 0 Then
            $iY -= 1
         Else
            $iY += 1
         EndIf
      EndIf
   EndIf
   $aField[$iX][$iY] = 1
EndFunc
 
Автор
S

SeMgA

Новичок
Сообщения
42
Репутация
0
Спасибо, я так это реализовал в конечном случае, но мне не нравятся задержки, попробую Ваш пример, может не будет)


Код:
Func Test() ;Квадрат
   If $X = координаты $Y = Координаты Then ;для 1 квадрата
      $Key = Random(1, 2, 1)
         If $Key = 1 Then
            Send("{right}")
         ElseIf $Key = 2 Then
            Send("{down}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 2 квадрата
      $Key = Random(1, 3, 1)
         If $Key = 1 Then
            Send("{right}")
         ElseIf $Key = 2 Then
            Send("{left}")
         ElseIf $Key = 3 Then
            Send("{down}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 3 квадрата
      $Key = Random(1, 2, 1)
         If $Key = 1 Then
            Send("{left}")
         ElseIf $Key = 2 Then
            Send("{down}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 4 квадрата
      $Key = Random(1, 3, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{right}")
         ElseIf $Key = 3 Then
            Send("{down}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 5 квадрата
      $Key = Random(1, 4, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{right}")
         ElseIf $Key = 3 Then
            Send("{down}")
         ElseIf $Key = 3 Then
            Send("{left}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 6 квадрата
      $Key = Random(1, 3, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{left}")
         ElseIf $Key = 3 Then
            Send("{down}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 7 квадрата
      $Key = Random(1, 2, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{right}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 8 квадрата
      $Key = Random(1, 3, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{left}")
         ElseIf $Key = 3 Then
            Send("{right}")
         EndIf
   EndIf

   If $X = координаты $Y = Координаты Then ;для 9 квадрата
      $Key = Random(1, 2, 1)
         If $Key = 1 Then
            Send("{up}")
         ElseIf $Key = 2 Then
            Send("{left}")
         EndIf
   EndIf
EndFunc
 
Верх