Добавление в Lua функции из c++

1.07.2010. c++, Lua

0

Одним из достоинств lua-скриптов является то, что из них можно вызывать функции, написанные на c/c++.

Объявление функции:

int func(lua_State  *l);

После объявления о функции необходимо сообщить lua-интерпритаторы.

lua_register(l, "smile", func);

Первый параметр - указатель на экземпляр lua-интерпритатора, второй — имя функции, которой передается параметр, третий параметр — имя c/c++ функции, которая будет выполняться из lua
Теперь немного об обмене параметрами между lua-скриптом и нашей функцией.
Обмен между lua и основной программой осуществляется через стек. Количество параметров, передаваемых от скрипта фактически не ограничено и не является постоянным. Можно передать 1 параметр, а можно 20;)

int count = lua_gettop(l); //получаем количество переданных 
//параметров (и одновременно номер последнего элемента)

Теперь, когда мы знаем, сколько нам передали параметров можно получать и их самих:
Если вы точно знаете, какой тип данных и каким по счету вам передали, то для получения данного элемента можно использовать функцию lua_totype(l,n), где type — тип данных (number, string, nil, etc), а n — номер параметра (нумерация начинается с 1, а не с 0)
Для проверки типа данных можно использовать функцию lua_istype(l,n)
Большинство функций должны что-либо возвращать. Для того, чтоб передать lua возвращаемые параметры опять необходимо использовать стек, только теперь не читать его, а писать в него:
lua_pushtype(l, data) — вместо data — либо переменная, либо строчка заданного типа, type заменяется на тип (number,string)
Функции в lua могут возвращать несколько параметром. Количество возвращаемых функцией параметров возращается как результат ее работы:

return n;

Пример приметивной программы, считающий сумму чисел от 1 до переданного параметра:

#include <iostream>
#include "lua5.1/lua.hpp"
using namespace std;
 
int func(lua_State *l);
int main()
{
lua_State *l = lua_open();
luaL_openlibs(l);
lua_register(l, "sum", func); // регистрируем функцию,
//которая в lua будет иметь имя sum
luaL_dofile(l,"script.lua");
 
lua_close(l);
return 0;
}
int func(lua_State *l)
{
 
int count = lua_gettop(l); // получаем количество
// переданных параметров
if (count&lt;1){lua_pushstring(l,"Error"); return 0;} //если нам не передали
// параметров, то good bye
 
for (int j=0;j&lt; count;j++)
{
if (lua_isnumber(l,j+1)) //если число, то
{int n=lua_tonumber(l,j+1); // получаем j-тый
// переданный параметр
lua_pushnumber(l,(n*(n+1))/2); // сумма чисел
// от 1 до n — n*(n+1)/2
}
}
return count;
};
</iostream>
sums={sum(1,2,3,4,5,6,7,8,9,10)}; -- создаем массив sums,
-- состоящий из возвращенных функцией sum параметров
for i=1,10,1 do
io.write("Сумма от 1 до "..i.." "..sums[i].."\n");
end

Hello World: Lua и C++

29.06.2010. c++, Lua

0

Lua - простой и  удобный интерпретируемый язык программирования, позволяющий легко добавить скрипты в вашу программу.

Скачать и установить lua можно отсюда. Пользователи ubuntu/debian могут установить из репозитория:
sudo aptitude install lua5.1 liblua5.1-dev

Теперь создайте новый проект на c++ в своей IDE, затем создайте новый файл: script.lua

Для использования в c++ скриптов на lua необходимо подключить файл lua.hpp:

#include "lua.hpp" // или <lua.hpp>, "lua5.1/lua.hpp", в зависимости от того, как у вас установлен lua

Тем, кто пишет на c необходимо вместо #include "lua.hpp" написать:

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

Также вам необходимо подключить библиотеку lua (liblua5.1.so в linux или lua51.lib в Windows).

Теперь инициализируем lua:

lua_State *l = lua_open();
luaL_openlibs(l);

Далее создаем lua-скрипт: создаем новый файл script.lua и пишем в нем print "Hello World!!!"

Для испольнения этого скрипта в программе на c/c++ существует специальная функция:

luaL_dofile(указатель на экземпляр lua, имя или путь к файлу со скриптом);

После работы с lua надо не забыть его закрыть:

lua_close(l);

Теперь, если вы все сделали правильно, после запуска программы вы увидети строчку "Hello World!!!"

Программа польностью:
main.cpp:

#include &lt;iostream&gt;
#include "lua5.1/lua.hpp"
using namespace std;
 
int main()
{
    lua_State *l = lua_open();
    luaL_openlibs(l);
    luaL_dofile(l,"script.lua");
 
    lua_close(l);
    return 0;
}

script.lua:

print "Hello World";

Краткие основы JavaScript

19.06.2010. JavaScript

0

Что такое?

JavaScript - объектно-ориентированый скриптовой язык программирования, в первую очередь предназначенный для создание интерактивный (т.е. изменяющихся без перезагруки) web-страниц

Типы данных и переменные

Основные типы данных в javascript:

JavaScript - язык со свободными типами данных, т.е. можно проводить операции с различными типами данных (складывать число и строку и т.д.)

Переменные.

Переменная в javascript начинается с буквы, знака доллара или подчеркивания и может содержать только буквы, знак доллара, подчеркивание и цифры. Регистр, в котором написана переменная важен (a и A - разные переменные)
Создаются переменые очень просто:

Приведение типов

Для проведения некоторых операция требуется преобразование одного типа данных в другой. Для этого существуют специальные функции:

Примечание: запись func(a1[,a2[,a3..]]) означает, что в [ ] находятся необязательные параметры, которые можно опустить. Т.е. если написано s(a[,b]), то можно писать и s(a) и s(a,b)

Арифметические операторы

Математика

Функции

Math.функция

Константы

Math.константа

Логические операторы и операторы сравнения

Условные операторы

if  (условие) {code{ - если условие истино, то выполняется код в { }

if (условие)

{ code }

else

{code 2}

Если усовие истино, то выполняется code, иначе code 2

switch (выражение)

{

case value1:

код;

break;

case value2:

код2;

break;

default:

код

}

В зависимости от значение выполяется различные код, если ни одно значение не совпадает выполняется код, описанный в default

условие ? код 1 : код 2 - если условие истино, выполняется код 1, иначе код 2

Операторы цикла

for (инициализация, условие, изменение) {code} - цикл выполняется до тех пор, пока условие истино. Например for (i=0;i<13;i++) {a+=a}

while (условие) {код} - пока условие истино выполняем код

do { код } while (условие) - аналогично предыдущему, только сначала выполнится код, а потом проверится условие

Функции

Cоздание фукнции в Java Script:

function name(parametr1[,parametr2...)
{

code

}

Вызов

name(параметры);

Строки

Специальные функции для работы со строками:

escape(string) - возвращает escape-последовательность стоки

unescape(string) - обратная операция

eval - вычисляет значение выражения, записанного в строку. Например, eval("2+5") вернет 7

Свойства и методы объекта String:

Записывается так: имя перемнной.свойство (метод)

Массивы

Массивы - множество переменных, объединеных общим именем.

Создание массива - name = new Array ([длинна])

Пример:

a=new Array;

a[0]=0;

a[1]="one";

a[2]=true;

И т.д.

Свойства и методы массивов в JavaScript:

Рисуем красивый вихрь в GIMP

14.03.2010. GIMP

3

Создаем изображение 1000x1000px. Затем идем в Фильтры->Визуализация->Облака->Сплошной шум и  настраиваем как-нибудь так:

Теперь выбираем инструмент кисть,  устанавливаем масштаб в 6 и степень дрожания - 1.4

После этого закрашиваем часть изображения примерно так:

Теперь настала очередь использовать инструмент "палец";) Размер ставим примерно равным 5 и смешиваем черное и серое изображение вот таким образом:

Теперь идем в фильтры->искажения->вихрь и щипок и ставим примерно такие параметры (можете изменять, как вам больше нравится):
вихрь в gimpС помощью пальца, штампа или кисти убираем образовавшиеся по краям небольшие белые области.

Теперь настала пора разукрасить наш вихрь. Первым делом сделаем его цветным. Для этого идем в Цвет->Цветовой баланс и придаем вихрю начальный цвет:

Теперь пора разукрашивать наш вихрь. Алгоритм раскраски нашего вихря очень прост:

  1. создаем прозрачный слой
  2. заливаем его каким-либо градиентом
  3. экспериментируем с режимом смешивания и прозрачностью, чтобы результат выглядел красиво
  4. При желании повторяем все, начиная с пункта 1

Например, создайте слой, установите режим смешивания "Рассеянный свет" и проведите градиент "Full saturation spectrum CW" из правого верхнего угла в левый нижний и посмотрите, как изменится раскраска вашего вихря. Таким образом, экспериментируя с различными градиентами, слоями, прозрачностью и режимами смешивания, можно придавать вихрю различные раскраски.

У меня в результате получился такой вихрь:

Снова CSS. Шрифты, форматирование, позиционирование

17.02.2010. CSS, Дизайн

0

Шрифты

Для настройки шрифтов существует свойство font:

font-family: шрифты или их семейства.

Пример:

font-family:arial, serif; //делает основным шрифт Arial, если он отсутствует, то шрифты из группы serif

font-size - устанавливает размер шрифта

font-size:12pt; // устанавливаем размер шрифта в 12pt

font-size:50px;

font-style: style; // стиль шрифта

font-style:normal - обычный текст

font-style:italic - курсив

font-style: oblique - наклонный шрифт.

Как всегда, все это можно задавать сразу в font:

font: times 16pt italic;

Форматирование

text-align: выравнивание. Может быть center, left, right, justify (по ширине)

text-decoration - "украшения" текста. Различные подчеркивания, мерцания и т.д.

blink - мигание текста

underline - подчеркнутый текст

line-through - перечеркнутый текст

overline - надчеркнутый текст (линия сверху)

none - отсутствует.

Позиционирование

float - устанавливает обтекание элемента

right - элемент выравнивается по правому краю, обтекание слева

left - наоборот

inherit - по умолчанию

none - обтекание отсутствует

clear - убирает обтекание

both - со всех сторон

right - справа

left - cлева

width и height:

Устанавливает ширину и высоту блока. Кроме этого возможны:

min-width & min-height - минимальная ширина и высота

И

max-width & max-height - максимальные ширина и высота

position: как позиционировать.

Устанавливает, как позиционировать элемент.

absolute - позиционировать относительно окна, а не родительских элементов

fixed - почти тоже самое,  при прокрутке остается на месте

relative - позволяет позиционировать элемент. По умолчанию элементы нельзя позиционировать

static - по умолчанию, элементы не позиционируются

z-index - устанавливает виртуальный слой, в котором находится элемент. Больший номер слоя соответствует более верхнему слою

overflow - сообщает браузеру, что делать, если содержимое элемента не влезает

visible - делает его видимым, границы объекта игнорируются

auto - при переполнение появляются полосы прокрутки

hidden - все что не влезло идет лесом, т.е. исчезает

scroll - все время есть полосы прокрутки

Другое

Если вы хотите, чтобы какое-то свойство использовалось при возникновление конфликтом, то можно использовать ключевое слово !important. Пишется оно после задания свойства до ;

color: red !important;

Можно задавать специальные свойства для элементов, если на них навели мышь. Для этого после имени класса, id, имени тега надо написать :hover

a:hover

{

}

P.S. Любите ужастики? Тогда вам будет интересен фильм человек-волк

Что такое CSS?

8.02.2010. CSS, Дизайн

0

Что такое CSS?

CSS, или каскадные таблицы стилей (Cascading Style Sheets) - это способ описания внешнего вида документа. Обычно используется вместе с html и xml. Основой задачей CSS является придание документу\странице\сайту своего собственного стиля, начиная от цвета и размера шрифта и заканчивая всевозможными эффектами, типа прозрачности, закругленных углов таблицы и т.д. Причиной к создание CSS послужила необходимость управлять внешним видом web-страниц и теперь эта технология используется в большинстве сайтов.

Синтаксис CSS очень прост. Любой CSS состоит из правил. Правило состоит из селектора и описания.

Селектор отвечает за то, к чему будут применены свойства в правиле. Селектор может быть именем тега, специальным классом или уникальным идентификатором. Также один селектор может зависеть от другого. Например, у нас есть тег <em>. С помощью CSS можно указать, что, например, жирный текст внутри этого тега должен быть не жирным, а красным. Это реализуется вот таким образом:

селектор селектор2 селектор3

{

//стиль

}

Стиль, описанный здесь, будет применяться только для элементов, соответствующих всем трем селекторам одновременно. Также можно перечислять, к каким селекторам нужно применить стиль. Тогда селекторы разделяются запятой, а не пробелом.

В стеле описываются свойства и их значения. Синтаксис выглядит так:

свойство: значение;

Например, запись color:red задает свойству "цвет текста" значение красный.

Еще немного про селекторы:

Селектор, означающий имя тега пишется также, как и имя тега:

Например, селектор тега <a> пишется a:

a

{

color:green;

}

Здесь, для текста внутри тега <a> устанавливается зеленый цвет.

Селектор-класс должен начинаться с точки:

.myclass

{

font-size:14pt;

color:#FFF;

}

В этом примере я создал свой класс с белым цветом шрифта и размером в 14 пунктов.

Для указания какому-либо экземпляру тега, что он должен использовать определенный класс для отображения своего содержимого, нужно в атрибутах тега прописать class="myclass":

<p class="myclass> Здесь будет белый текст в размером шрифта в 14 пунктов</p>

Кроме классов существуют еще ID, уникальные идентификаторы. В любом документе может быть только один тег, использующий ID. Чтобы указать тегу, что он должен для отображения использовать стиль с таким-то ID надо прописать в атрибут тега id="myid". Любой ID в CSS начинается с #:

#myid

{

background:grey; //установка фона в серый цвет.

}

-----------------------------------

<div id="myid">

Текст с примененным стилем myid. Этот текст будет на сером фоне

</div>e

Способы подключения CSS к HTML:

Подключить CSS к HTML-файлу можно несколькими способами:

  1. Записать весь CSS внутри тега <style> в заголовке документа (тег <head>)
  2. Подключить внешнюю таблицу стилей.Опять таки внутри тега <head>:

    <link rel="stylesheet" type="text/css" href="style.css" />

  3. Третий вариант не позволяет подключить таблицу стилей, но позволяет прописать стили внутри самого тега. Для этого используется атрибут style: style="свойства:значение;свойство 2:значение 2;".Например:

    <span style="color:green background: black">зеленый текст на черном фоне</span>

Вот и все на сегодня, подробнее о CSS и о "свойствах и значения" я расскажу как-нибудь в следующий раз

P.S. Нужен реферат? Вот вам рефераты на заказ.

Добавляем отражение к изображению в GIMP (а-ля зеркало)

7.02.2010. GIMP, Дизайн

0

Сегодня я расскажу как можно сделать отражение изображения в GIMP

Сначала откройте изменяемое изображение. Затем уменьшите размер слоя в 2 раза и затем еще на 5px. Теперь вам надо, с помощью инструмента выравнивание, выравнять изображение по верхнему краю и по центру. После этого продублируйте слой, выровняйте его по нижнему краю и, используя инструмент зеркало, отразите его по вертикали и горизонтали. Затем создайте слой с черным фоном и установите его в  самый низ. Должно получиться вот так:

результат

Теперь нажмите на нижний слой и добавьте маску слоя:

маска слоя

Теперь установите прозрачность зеркального слоя на 80%, и проведите от начала слоя к его концу градиент из белого в прозрачный (можно из немного серого) Должно получится так:

почти готово

Сейчас надо создать новый прозрачный слой под слоями с изображениями и над слоем фона и выделить в этом слое пространство примерно между серединой первого и второго изображений:

правильное выделениеИ Выделение->растушевать с значением 15. Затем заполняем выделенное градиентом из белого в черный и устанавливаем прозрачность слоя на 10-20%. Теперь смещаем верхнее изображение на 10px вниз и готово. Вот что должно получиться:

результат Исходное изображение:

исходное изображение
P.S.
Все еще не знаете, что вас ждет в 2012 году, то вам надо смотреть онлайн фильм 2012
P.P.S.
Если вы не хотите изучать дизайн и html, то специально для вас разработка и создание сайтов

Уроки GIMP. Рисуем молнию. Вариант 1.

3.02.2010. GIMP, Дизайн

0

Сегодня я расскажу, как можно в gimp нарисовать молнию (по крайне мере, что-то похожее на молнию).

Первым делом нам необходимо создать новое изображение размером 400х400. Затем залить его черно-белым градиентом. Для этого выбираем инструмент "Градиентная заливка". В параметрах выставляем градиент и проводим из верхнего левого угла к центру правой стороны. В результате должно получится что-то такое:

Теперь идем в Фильтры->визуализация->облака->разностные облака и устанавливаем детализацию на максимум (15). С размером по X и Y можно поэкспериментировать, я поставил на 3.1 и 3.4.

Нажимаем ОК и инвертируем (цвет->инвертировать) полученное изображение:

Возможно вы уже видите очертания нашей молнии, а чтобы они стали видны любому нам пора в цвет->кривые и приводим ее примерно к такому виду (следите за вашим изображение, параметры будут немного отличаться). Главное, чтобы вы увидели на черном фоне тонкую молнию. Весь оставшийся мусор (если он есть) без сомнений удаляйти

Мои параметры:

И результат:

Вот это уже очень даже похоже на молнию, только цвет какой-то неправильный. Поэтому лезем в цвет->цветовой баланс и перекрашиваем нашу молнию:

И, как всегда, результат:

Осталось немного косметических эффектов. Выделяем нашу молнию (выделение->выделение по цвету. Затем инвертировать). Применяем фильтр сгладить и гауссово размывание (3px). После этого увеличиваем контрастность, чтоб молния снова стала похожей на молнию.

Вот и все. Самая примитивная молния нарисована.

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

Уроки C++. Структуры.

1.02.2010. c++, Программирование

0

Очень часто бывает необходимо объединить в одной переменной хранить несколько значений. Например, 2 координаты: х и у. Вот тогда можно использовать структуры данных, или просто структуры.
Создавать и работать с структурами очень просто. Для объявления структуры надо написать struct name
{ type varname;
type2 var2name}
Например,
struct point
{
float x;
float y;
int color;
string name;
};

Теперь, после того, как мы объявили структуру, пора создать ее экземпляр:
point points[1000]; // мы создали массив из 1000 элементов

Обращение к элементу структуры осуществляется через точку:

points[10].x=0,5;

points[10].y=1;

cout<<points[1].name;

И так далее.

Если вы создаете структуры динамически, то обращение к элементу осуществляется через ->:

point *p;

p=new point;

p->x=1;

p->y=2;

P.S.
Скачать программы и обои для стен, игры для nokia 5800 и бесплатные игры на телефон.

Уроки GIMP. Рисуем огонь.

29.01.2010. GIMP, Дизайн

0

Сегодня я расскажу как можно нарисовать огонь с помощью GIMP

Первым делом, создайте новое изображение с разрешением 600х600 точек. Затем идем в Фильтры->визуализация->облака->сплошной шум и настраиваем фильтр приблизительно как на этом рисунке:

Теперь берем кисть, устанавливаем ей черный цвет и закрашиваем верхнюю часть примерно так:

А сейчас надо воспользоваться таким полезным инструментом, как палец. Он позволяет нам размазывать изображения как мы хотим. С помощью этого инструмента добейтесь того, чтоб на вашем изображении появились черно-белые огненные языки. Находим черный кусок и размазываем его вверх так, чтоб образовывалось что-либо наподобие языка пламени. Для большой реалистичности делаем в несколько этапов, постепенно уменьшая размер пальца. Если не хватает черного цвета, то добавляем его кистью. Затем применяем фильтр общие->эрозия. Результат должен быть примерно таким:

Затем идем в Цвет->Цветовой Баланс и придаем черно-белому огню цвет:

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

Первым делом идем в фильтры->искажения->рябь

Настраиваем:

Далее фильтры->размывание->Гауссово размывание. И фильтры->имитация->масляная краска с размером маски 3. Также используем фильтры сгладить и увеличение резкости.

Еще можно применить фильтры->искажения->исправить искажения оптики:

Вот и все. После небольшого количества простых действий мы смогли нарисовать достаточно реалистичный огонь. А вот и сам результат:

Кстати, если вы фанат photoshop`а, то вот здесь есть уроки фотошоп на русском. Надеюсь, вы найдете там то, что вам нужно.

С++. Урок 3. Ветвления программы (Условия: if-else)

29.12.2009. c++, Программирование

0

Сегодня вы познакомитесь у условными операторами. Благодаря ним вы сможете в зависимости от ситуации производить различные действия.

Читать дальше

C++. Урок 1. Знакомство

27.12.2009. c++, Программирование

0

Первый урок по программированию на языке C++. Сегодня вы узнаете, что это вообще такое, что вам необходимо для изучения и напишете свою первую программу.

Читать дальше

Страница 1 из 11

Rambler's Top100 Блогун - монетизируем блоги