Добавление в 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

Снова 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, то специально для вас разработка и создание сайтов

Урок 11. C++. STL Стеки и очереди (stack and queue)

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

0

Собственно сегодня небольшой урок про стеки и очереди.

Стеки (stack)

Стеки - это множество элементов, сложенных в стопку. Например, у нас есть коробка 3х5. Мы кладем в нее доски такого же размера с различными узорами. У нас получается стек. Достать из него мы можем только начинаяя с последнего элемента, поэтому первый положенные элемент вынут будет последним. В стеках реализуется принцип first in last out (FILO).

Для создания стека нужно подключить <stack> и в коде программы его объявить:

stack <type> name, где type - тип стека, а name - имя стека.

У стека есть немного функций:

Пример:

string s;

stack <string> st;

while (cin>>s);

st.push(s);

while (!(st.empty()))

{cout<<st.top();st.pop()}

В этом примере мы считываем слова с клавиатури и выводим их в обратном порядке

Очереди (Queue)

Очереди, как следует из название, используют принцип first in first out (FIFO). То есть, тот, кого мы первым запихнули в очередь, первым из нее и выйдет (хотя в реальной жизни не всегда так....)

Реализуются очереди также просто.

Подключаем <queue>

И создаем очередь

queue <type> name;

Перечень функций почти тот-же:

Пример:

queue <int>  events;

int n;

while (cin>>n)

events.push(n);

while (!events.empty)

{make(events.front());events.pop()}

В данном примере make - какая-то функция, обрабатывающая события

Вот и все об очередях со стеками. Просто и немного;)

C++. Урок 9. Стандартные алгоритмы для работы с STL (algorithm)

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

0

В C++ существует множество спецальных алгоритмов для работы с массивами. Они позволяют сортировать данные в массиве, искать в нем какое-либо значение, менять элементы местами и т.д. Для их работы вам необходимо подкючить <algorithm> в начале программы.

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

C++. Урок 5. Циклы

10.01.2010. c++

0

Сегодня мы познакомимся с такой вещью, как циклы

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

C++. Урок 4. Массивы

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

1

Очередной урок по c++. На этот раз вы познакомитесь с массивами данных.

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

С++. Урок 2. Переменные и их типы.

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

0

Сегодня вы подробнее узнаете о переменных в c++

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

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

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