Перейти к содержимому

Уважаемый гость, если у Вас возникли проблемы с регистрацией, просьба обратиться в тех.поддержку или на почту admin@pawno-crmp.ru

Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.

Фотография
Урок

Единая тема! С чего начать изучение PAWN

- - - - - pawno уроки crmp

  • Закрытая тема Тема закрыта
В теме одно сообщение

#1
offline   gegelo

gegelo
  • 47
    • Сообщений: 182
    • Регистрация: 20.05.15

Всем привет, с вами gegelo. В данной теме представлена информация для новичков.

 

Что такое PAWN?
 

Pawn - бестиповый процедурно-ориентированный встраиваемый скриптовый язык программирования с C-подобным синтаксисом. Компилятор (Pawno) генерирует P-код (байт-код), который запускается в виртуальных машинах, которых 17 штук (1 под GM, 16 под FS.) 

 

Особенности языка:

  • Возможность подключения модульных инклудов. Можно организовать аккуратную структуру исходного кода.
  • Pawn скрипты выполняются в одном потоке.
  • Код полностью состоит из одиночных, нет вложенных друг в друга функций. Функции могут быть доступными только в пределах скрипта или публичными (которые могут использоваться виртуальной машиной).
  • Все переменные хранятся либо в секции данных, либо в стеке.

 
 
Переменные:
 
Переменные – это ячейки памяти для хранения данных. В Pawn существует несколько типов переменных:

  • Целочисленные
  • Вещественные
  • Логические

Переменная целочисленного типа объявляется следующим образом:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 
Мы объявили переменную, у неё нет никакого значения - она является не инициализированной. Давайте инициализируем данную переменную, то есть присвоим ей значение:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 
Переменная вещественного типа объявляется следующим образом:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 
Она хранит в себе только десятичные числа. Объявляется она так же, как и переменная целочисленного типа, только перед именем переменной пишется приставка "Float:".
 
Переменная логического типа:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 
Она хранит в себе 2 значения. true - истина, false - ложь. Как и в переменной вещественного типа, перед именем должна быть приставка "bool:".
 

Ещё переменные могут быть локального и глобального типа.
 
Глобальные переменные - переменные к которым можно обратиться из любой части кода.
Локальные переменные - переменные, которые находятся внутри тела какой-либо функции, и доступны только внутри данной функции.

 

в Pawn есть уже зарезервированные ключевые слова, которые нельзя использовать в качестве имён:

assert    break   case   char
const   continue   default   defined
do   else   enum   exit
for   forward   goto   if
native   new   operator   public
return   sizeof   sleep   state
static   stock   switch   tagof
while


 
 

Операторы: 
 

Полезные ссылки

Тема: Операторы PAWNАвтор: Amfy
Тема: Тернарный оператор   Автор: Amfy
Тема: Операторы Break и Continue   Автор: Neat

Тема: Циклы, переключатель (switch), break, continue   Автор: Compan

 

Оператор sizeof:

sizeof - оператор, использующийся для получения размера переменных

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Основной плюс использования оператора sizeof - простота изменения кода. Представьте себе ситуацию, когда в вашем коде более 28 тысяч строк и вам нужно изменить в нём размер одного из массивов - тогда вам придётся перерывать весь код, чтобы изменить конечные значения в циклах, в которых обрабатывается данный массив, в ветвлениях (if/case) и т.д.
Всего этого можно избежать, используя оператор sizeof: компилятор Pawn сам возьмёт на себя рутинную работу по расчёту размера массивов. © Daniel_Cortez.

 

 

Оператор Switch:

Оператор switch используется в Pawn для выполнения действий по нескольким (чаще всего 2 и более) ветвям.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Действия в метке default выполняются в том случае, когда значение выражения в switch не принадлежит ни одному из интервалов. Метка default не обязательна.

 

Главное преимущество switch перед if - эффективность: если в конструкции switch указано несколько диапазонов, принадлежность к одному из них определяется быстрее, чем в if.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

 

 

Директивы:
 

Ссылки

Тема:  Директивы  Автор: Neat

 

 

 

Массивы:

Массив — упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.

Массивы так же, как и переменные бывают нескольких видов - одномерные, двумерные и трёхмерные. И нескольких типов - вещественные и целочисленные.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Выше мы создали инициализированный массив из 3 ячеек. Обращаемся к ним по индексам ячеек: 0,1,2

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Массив вещественного типа:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Так же как и с переменными вещественного типа, перед именем пишется приставка "Float:". Ссылаемся и изменяем значение так же, как и с целочисленным типом. 

 

Одномерные массивы ещё используют для всех игроков. Создавая большой массив, который равен максимальному кол-ву игроков на сервере. В Pawn есть встроенная константа MAX_PLAYERS, равная 1000 игрокам.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Двумерный массив:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Массив Enum:

 

Массив Enum - это массив переменных.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Для обращения к массиву, мы должны сделать к нему "ссылку", создав одномерную переменную. Так мы создаём массив для всех игроков. Чтобы сделать enum индивидуально для каждого игрока - нам нужен двумерная переменная.

 

 

 

Константы:

 

Константа - величина, не меняющаяся в процессе выполнения скрипта. В Pawn константы объявляются почти так же, как и переменные, однако каждое объявление начинается со слова const:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

В константах нужно обязательно указывать значение.

 

 

 

Строки:

 

Строка - это последовательность символов.

По сути строки - это те же массивы. А поскольку символы в Pawn могут храниться (!) в целочисленных переменных, то строка - это массив целых чисел. 

 

Инициализация строки (задание ей начального значения) обычно выполняется после её объявления:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Рассмотрим внутреннее представление строки:

KgzJy8P.png

 

Обратите внимание на последний символ '\0' - это завершающий нуль-символ, обозначающий конец строки. По этому символу функция printf (и многие другие функции) определяет, на какой позиции закончить вывод символов на экран.
А теперь давайте рассмотрим строку, как массив целых чисел (коим она в Pawn и является): 

Hq64HaG.png

 

Каждому символу строки соответствует свой номер (код), при этом последний элемент равен нулю - это и есть завершающий нуль-символ.

Кроме нуль-символа в Pawn есть и другие специальные символы:

img
mINBV7P.png

 

Строкам, в которых меньше позиций, нельзя присваивать значения строк, в которых больше позиций. Впрочем, это ограничение можно обойти при помощи функции strcat:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Данная функция "прицепляет" к концу 1-й строки значение 2-й строки. С помощью неё можно безопасно скопировать значение из исходной строки в целевую, указав размер 1-й строки. При этом последний параметр (размер) - необязательный, т.е. его можно не указывать.

 

 

Функции:

 

Функция - обособленная последовательность действий, возвращающая определённое число значений в место вызова. 

 

Синтаксис:

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Любой код на Pawn состоит из функций. Это помогает избежать больших размеров кода, упростить структуру кода.

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Функция складывает 2 числа, полученных на входе, и возвращает результат на место вызова при помощи ключевого слова return

Данная функция выводит на экран "Hi!" и не возвращает никаких значений, т.к. в конце функции нет ключевого слова return.

 

Внимание! Функция main является главной функцией в любом скрипте, т.к. с неё начинается выполнение кода любого скрипта.

 

Теперь перейдём от объявления функций к их использованию. Попробуем использовать описанную выше функцию sum из функции main для сложения двух чисел: 

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Как и говорилось выше, функция main всегда самая главная, а потому выполнение кода начнётся именно с неё. Переменной result будет присвоено значение, которая вернёт функция sum, сложив числа x и y. Однако можно обойтись и без записи результата во временную переменную result, подставив вызов функции sum внутрь вызова функции printf, тогда значение, которое вернёт sum, тут же будет выведено на экран.
Таким образом, на экран будет выведено: 

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

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


gegelo (14 Август 2015 - 15:43):
Update: Дополнено: "Оператор sizeof", "Оператор switch", "Особенности языка". Добавлено: "Константы".


#2
offline   Rambler

Rambler
  • 0
    • Сообщений: 1
    • Регистрация: 13.07.16

У меня вот есть вопрос по поводу двухмерных массивов 

Пожалуйста войдите или зарегистрируйтесь чтобы увидить ссылку.

Объясните пожалуйста глупому, может я что-то не так понял...


  • 0



Темы с аналогичным тегами Урок, pawno, уроки crmp

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Данную тему посетили 765 пользователей