Розробка мобільного 2D-гри «Склади слова із слова»

Передісторія
Як-то звичайним літнім ввечері їхав додому з роботи в метро і побачив у одного хлопця гру на планшеті, де потрібно складати слова з букв. Скачав її на свій планшет і почав грати. Погравши якийсь час, зрозумів, що деякі особливості можна було б реалізувати зручніше, і вирішивши, що я можу зробити іграшку мінімум не гірше, взявся за реалізацію.


Робота зі словниками
Маючи деякий досвід роботи з БД Oracle, вирішив що обробку словників буду вести в ній (Oracle 11.2 XE). Накачав в інтернеті кілька словників у вигляді текстових файлів із роздільниками і з допомогою механізму External Table завантажив в БД. З завантажених слів відібрав 700 іменників довжиною 8-10 букв. Це як раз і будуть ті слова, літери яких гравці будуть вести складання. Далі необхідно для кожного з цих 700 слів підібрати набір слів, які можна з нього скласти. Для цього потрібно проіндексувати всі слова, щоб можна було робити пошук по входженню букв.

Створюємо в'ю поверх таблиці зі словами:
create or replace view as words_parsed_v 
select word,
regexp_count(word, 'а') as а,
regexp_count(word, 'б') as б,
regexp_count(word, 'в') as,
regexp_count(word, 'м') as р,
regexp_count(word, 'д') as д,
regexp_count(word, 'е') as е,
regexp_count(word, 'ж') as ж,
regexp_count(word, 'з') as з,
regexp_count(word, 'і') as і,
regexp_count(word, 'ї') as ї,
regexp_count(word, 'до') as,
regexp_count(word, 'л') as л,
regexp_count(word, 'м') as м,
regexp_count(word, 'н') as н,
regexp_count(word, 'про') as о,
regexp_count(word, 'п') as п,
regexp_count(word, 'р') as р,
regexp_count(word, 'с') as,
regexp_count(word, 'т') as т,
regexp_count(word, 'в') as,
regexp_count(word, 'ф') as ф,
regexp_count(word, 'х') as х,
regexp_count(word, 'ц') as ц,
regexp_count(word, 'ч') as год,
regexp_count(word, 'ш') as ш,
regexp_count(word, 'щ') as щ,
regexp_count(word, 'ъ') as',
regexp_count(word, 's') as s,
regexp_count(word, 'ь') as ь,
regexp_count(word, 'е') as е,
regexp_count(word, 'ю') as ю,
regexp_count(word, 'я') as я
from words;

-- витягнемо 5 рядків для прикладу
select * from words_parsed_v where rownum <= 5;









word б р д е ж з і ї л м н п р т ф х ц ч ш щ ъ и ь е ю я акваріум 2 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 акварель 2 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 траншея 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 генерал 1 0 0 1 0 2 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 диплом 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Далі з використанням цієї в'ю робиться нехитрий алгоритм пошуку "вкладених" слів для каджого "головного" слова.
Варто відзначити, що крім автоматичної обробки так само не обійшлося і без ручної праці по фільтрації всіх частин мови, крім іменників, виправлення орфографічних помилок і т. д.
Взаємодія з онлайн-словниками
Так як не для всіх слів у словниках було тлумачення, то і тут довелося перекручуватися. Написав процедуру, яка з певним інтервалом звертається до онлайн словників і витягує опис. Зрозуміти логіку роботи процедури допоможе найпростіший приклад:
-- Oracle PL/SQL
create or replace function get_url_dic_academic(p_word varchar2) return varchar2 as
begin
return 'http://dic.academic.ru/searchall.php?SWord=' || p_word || '&from=xx&to=ru&did=&stype=';
end;
/

select httpuritype(get_url_dic_academic('біологія')).GetClob() as rst
from dual;

Результат останнього запит захований під спойлер. Його обробкою займається написаний мною парсер з використанням регулярних виразів, код якого приводити тут я не бачу сенсу.
Результат запиту rst
<!DOCTYPE html>
<html lang="ru">
<head>
< meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Словники та енциклопедії на Академіка</title>
<meta name="Description" content="Словники та енциклопедії на Академіка" />
<!--meta http-equiv="Content-Language" content="ru" /-->
<meta name="Keywords" content="Словники, Енциклопедії, пошук, терміни, опису" />
<meta name="inmobi-site-verification" content="b8995e33d3169f217a2278195a66e8c3">
<script type="text/javascript" src="/js/adfox.asyn.code.ver3.js"> </script>
<!--[if IE]>
< meta http-equiv="cleartype" content="on" />
< meta http-equiv="msthemecompatible" content="ні"/>
<![endif]-->

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">

<meta name="revisit-after" content="15 days" />
<meta name="rating" content="safe for kids" />
<meta property="og:title" content="" />
<meta property="og:type" content="article" />
<meta property="og:url" content="" />
<meta property="og:image" content="/images/Logo_social_ru.png?3" />
<meta property="og:description" content="Словники та енциклопедії на Академіка" />
<meta property="og:site_name" content="Словники та енциклопедії на Академіка" />
<link rel="search" type="application/opensearchdescription+xml" title="Словники та енциклопедії на Академіка" href="/dicsearch.xml" />
<meta name="ROBOTS" content="NOINDEX, FOLLOW" />

<!-- DFP -->

<script type='text/javascript'>
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function() {
var gads = document.createElement('script');
gads.async = true;
gads.type = 'text/javascript';
var useSSL = 'https:' == document.location.protocol;
gads.src = (useSSL ? 'https:' : 'http:') +
'//www.googletagservices.com/tag/js/gpt.js';
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(gads, node);
})();
</script>

<script type='text/javascript'>
// --== Google DFP ==--
googletag.cmd.push(function() {
googletag.defineSlot('/59581491/top_bnr', [[728, 90], [970, 90]], 'div-gpt-ad-topline').addService(googletag.pubads());
googletag.defineSlot('/59581491/right-top', [240, 400], 'div-gpt-ad-right-top').addService(googletag.pubads());
//googletag.defineSlot('/59581491/right_bnr', [240, 400], 'div-gpt-ad-right-1').addService(googletag.pubads());
//googletag.defineSlot('/59581491/right_bnr', [240, 400], 'div-gpt-ad-right-2').addService(googletag.pubads());

// Встановимо змінні таргетингу для всієї сторінки
googletag.pubads().setTargeting("lang", "ru"); // ru, en, de, es, fr
googletag.pubads().setTargeting("pageType", "search"); // main, article, search, book, contents
googletag.pubads().setTargeting("segment", ""); // Рекламний сегмент

googletag.pubads().collapseEmptyDivs();

googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
</script>
<!-- /DFP -->

<style type="text/css">div.hidden,#TerminsNavigationBar,#ad_bottom,#ad_right,#ad_top,#ad_top2,#contextmenu,#dic-query,#footer ul+div,#lang,#langbar,#logo img.h#restrictions,#search-box .translate-lang,#search-tabs,#sharemenu,#t-direction-head,#top-menu,#translate-arrow,.smm,div.autosuggest{display:none}p,ul{list-style-type:none;margin:0 0 15px}ul li{margin-bottom:6px}.content ul{list-style-type:disc}*{padding:0;margin:0}body,html{height:100%}body{padding:0;margin:0;color:#000;font:14px Helvetica,Arial,Tahoma,sans-serif;background:#fff;line-height:1.5 em}a{color:#0d44a0;text-decoration:none}h1{font-size:24px;margin:0 0 18px}h2{font-size:20px;margin:0 0 14px}h3{font-size:16px;margin:0 0 10px}a h1,h2 a{color:#454545!important}#page{margin:0 auto;min-height:100%;position:relative;padding-top:105px;width:745px;padding-right:255px}* html #page{height:100%}#header{position:relative;height:122px}#logo{float:left;margin-top:21px;width:125px}#logo a.img{width:90px;margin:0 0 0 16px}#a logo.img.logo-en{margin-left:13px}#logo a{display:block;font-size:12px;text-align:center;word-break:break-all}#site-title{padding-top:35px;margin:0 0 5px 135px}#site-title a{color:#000;font-size:18px;font-style:italic;display:block;font-weight:400}#search-box{margin-left:135px;border-top-right-radius:3px;border-bottom-right-radius:3px;padding:4px;position:relative;background:#abcf7e;min-height:33px}#search-box.dic{background:#896744}#search-box table{border-spacing:0;border-collapse:collapse;width:100%}#search-box table td{padding:0;vertical-align:middle}#search-box table td:first-child{padding-right:3px}#search-box table td:last-child{width:1px}#dic-query,#search-query.translate-lang{padding:6px;font-size:16px;border:1px solid #949494;width:100%;box-sizing:border-box;height:32px;margin:0;background:#fff;float:left;border-radius:0!important}#search-button{width:70px;height:32px;text-align:center;border:1px solid #7a8e69;border-radius:3px;background:#e0e0e0}#search-tabs{display:block;margin:0 15px 0 135px;padding:0;list-style-type:none}#search-tabs li{float:left;min-width:70px;max-width:140px;padding:0 15px;height:23px;line-height:23px;background:#bde693;text-align:center;margin-right:1px}#search-box.dic+#search-tabs li{background:#C9A784}#search-tabs li:last-child{border-bottom-right-radius:3px}#search-tabs li a{color:#353535;font-style:italic;font-size:12px;display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#search-tabs li.active{height:22px;line-height:23px;position:relative;background:#abcf7e;border-bottom-left-radius:3px;border-bottom-right-radius:3px}#search-box.dic+#search-tabs li.active{background:#896744}#search-tabs li.active a{color:#fff}#content{clear:both;margin:30px 0;padding-left:15px}#content a{text-decoration:underline}#content .breadcrumb{margin-bottom:20px}#search_links,#search_sublinks{margin-bottom:8px;margin-left:-8px}#search_links a,#search_sublinks a{padding:3px 8px 1px;border-radius:2px}#search_links a.active,#search_sublinks a.active{color:#000!important;background:#bde693;text-decoration:none!important}.term{color:#8b4513}@media (max-width:767px){.hideForMobile{display:none}#header{height:auto}#page{padding:5px;width:auto}#logo{float:none;width:144px;text-align:left;margin:0;padding-top:5px}#logo a{height:44px;overflow:hidden;text-align:left}#logo img.h{display:initial;width:144px;height:44px}#logo img.v{display:none}#site-title{padding:0;margin:10px 0 5px}#search-box,#search-tabs{clear:both;margin:0;width:auto;padding:4px}#search-box.translate #search-query{width:100%;margin-bottom:4px}#search-box.translate #td-search{overflow:visible;display:table-cell}ul#search-tabs{white-space:nowrap;margin-top:5px;overflow-x:auto;overflow-y:hidden}ul#search-tabs li,ul#search-tabs li.active{background:0 0!important;box-shadow:none;min-width:0;padding:0 5px;float:none;display:inline-block}ul#search-tabs li a{border-bottom:1px dashed green;font-style:normal;color:green;font-size:16px}ul#search-tabs li.active a{color:#000;border-bottom-color:#fff;font-weight:700}ul#search-tabs li a:hover,ul#search-tabs li.active a:hover{color:#000}#content{margin:15px 0}}#search_results{margin-left:23px}.terms-list .item{float:left;margin:2px 0 0 -108px;position:relative;width:100px;color:#898989;font-size:11px;text-align:right}</style>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" sizes="16x16" />
<link rel="shortcut icon" href="/images/icon.ico" type="image/x-icon" sizes="32x32" />
<link rel="shortcut icon" href="/images/icon.ico" type="image/x-icon" sizes="48x48" />

<!--[if lt IE 9]>
<script type="text/javascript" src="/js/html5shiv.js"></script>
<![endif]-->

<!--[if lte IE 8]>
<script type="text/javascript" src="/js/ierange.js"></script>
<![endif]-->

<!--[if lte IE 6]>
<script type="text/javascript" src="/js/ie-hover-pack.js"></script>
<![endif]-->

<!-- test -->
<!-- Yandex -->
<script type="text/javascript"><!--
yandex_site_charset = 'UTF-8';
// Розмір шрифтів
var yandex_ad_fontSize = 1;
// Налаштування оголошень Діректа
var yandex_direct_fontColor = '000000';
var yandex_direct_titleColor = '0000CC';
var yandex_direct_siteurlColor = '006600';
var yandex_direct_linkColor = '0000CC';
function yandex_direct_print(){ }
// Налаштування оголошень Маркету
var yandex_market_fontColor = '000000';
// var yandex_market_BorderColor = 'E3D8F4';
var yandex_market_BorderColor = 'FFFFFF'; // 'E3D8F4';
var yandex_market_BgColor = 'FFFFFF'; // 'F5F1FB';
var yandex_market_headerBgColor = 'FFFFFF';
var yandex_market_catColor = '777278';
var yandex_market_offerlinkColor = '0B57AC';
var yandex_market_linkColor = '0B57AC';
function yandex_market_print(){ }
// Встановлення Спец. розміщення
var yandex_premium_fontColor = '000000';
var yandex_premium_titleColor = '0000CC';
var yandex_premium_siteurlColor = '006600';
function yandex_premium_print(){ }
var yandex_r = Math.round(Math.random() * 100000);
//--></script>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-8594606551930257",
enable_page_level_ads: true
});
</script>

<script type="text/javascript" async src="https://relap.io/api/v6/head.js?token=JLTNw8NHQr9CHRgd"></script>
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-2754246-1', 'auto');
ga('require', 'displayfeatures');

// ga('set', 'dimension1', ");
ga('set', 'dimension2', 'search');
// ga('set', 'campaignKeyword', dimensionValue1);

ga('send', 'pageview', {'dimension1':"});

</script>

<script type="text/javascript">
if(typeof(console) == 'undefined' ) console = {};
if(typeof(console.log) == 'undefined' ) console.log = function(){};
if(typeof(console.warn) == 'undefined' ) console.warn = function(){};
if(typeof(console.error) == 'undefined' ) console.error = function(){};
if(typeof(console.time) == 'undefined' ) console.time = function(){};
if(typeof(console.timeEnd) == 'undefined' ) console.timeEnd = function(){};
Academic = {};
Academic.sUserLanguage = 'ua';
Academic.sDomainURL = ";
Academic.sMainDomainURL = 'http://dic.academic.ru/';
Academic.sTranslateDomainURL = 'http://translate.academic.ua/';
Academic.Lang = {};
Academic.Lang.sTermNotFound = 'Термін, що відповідає запиту, не знайдено';
</script>

</head>
<body>

<div id="page">

<div id="header">
<div id="logo">
<a href="http://dic.academic.ru">
<img src="/images/Logo.png" class="v" alt="dic.academic.ua" width="88" height="68" />
<img src="/images/Logo_h.png" class="h" alt="dic.academic.ua" width="88" height="68" />
<br />
dic.academic.ru </a>
</div>
<ul id="top-menu">
<li id="lang">
<a href="#" class="link">RU</a>

<ul id="lang-menu">
<li><a href="http://www.enacademic.com">EN</a></li>
<li><a href="http://www.deacademic.com">DE</a></li>
<li><a href="http://www.fracademic.com">FR</a></li>
<li><a href="http://www.esacademic.com">ES</a></li>
</ul>
</li>
<!--li><a class="android" href="http://dic.academic.ru/android.php">Android версія</a></li-->
<!--li><a class="apple" href="http://dic.academic.ru/apple.php">iPhone/iPad версія</a></li-->
<li><a class="add-fav link" href="#" onClick="add_favorite(this);">Запам'ятати сайт</a></li>
<li><a href="http://partners.academic.ru/partner_proposal.php" target="_blank">Словник на свій сайт</a></li>
<!--li><a href="#">Форум</a></li-->
</ul>
<h2 id="site-title">
<a href="http://dic.academic.ru">Словники та енциклопедії на Академіка</a>
</h2>

<div id="search-box">
<form action="http://dic.academic.ru/searchall.php" method="get" name="formSearch">

<table><tr><td id="td-search">

<input type="text" name="SWord" id="search-query" required="1"
value="біологія"
title="Введіть текст для пошуку по словників та енциклопедій" placeholder="Введіть текст для пошуку по словників та енциклопедій"
autocomplete="off" autofocus>

<div class="translate-lang">
<select name="з" id="translateFrom">
<option value="xx">Всі мови</option><option value="ab">Абхазький</option><option value="ad">Адигейський</option><option value="я">Азербайджанський</option><option value="ay">Аймара</option><option value="ai">Айнский мова</option><option value="ak">Акан</option><option value="sq">Албанська</option><option value="al">Алтайський</option><option value="en">Англійська</option><option value="ар">Арабська</option><option value="an">Арагонська</option><option value="hy">Вірменський</option><option value="rp">Аруминський</option><option value="at">Астурська</option><option value="af">Африкаанс</option><option value="bb">Багобо</option><option value="eu">Басків</option><option value="ba">Башкирська</option><option value="be">Білоруський</option><option value="bg">Болгарський</option><option value="bu">Бурятський</option><option value="cy">Валлійська</option><option value="wr">Варайский</option><option value="hu">Угорський</option><option value="vp">Вепська</option><option value="hs">Верхньолужицька</option><option value="vi">В'єтнамський</option><option value="ht">Гаїтянська</option><option value="el">Грецький</option><option value="ka">Грузинський</option><option value="gn">Гуарані</option><option value="gd">Гаельська</option><option value="da">Датський</option><option value="dl">Долганський</option><option value="pr">Давньоруський мова</option><option value="he">Іврит</option><option value="yi">Ідиш</option><option value="in">Інгушський</option><option value="id">Індонезійська</option><option value="ik">Инупиак</option><option value="ga">Ірландський</option><option value="is">Ісландська</option><option value="es">Іспанська</option><option value="it">Італійський</option><option value="yo">Йоруба</option><option value="kk">Казахська</option><option value="kc">Карачаевский</option><option value="ca">Каталонська</option><option value="qy">Квенья</option><option value="qu">Кечуа</option><option value="ky">Киргизька</option><option value="zh">Китайський</option><option value="go">Клінгонською</option><option value="kv">Комі</option><option value="ko">Корейська</option><option value="cr">Кри</option><option value="ct">Кримськотатарська</option><option value="kp">Кумицька</option><option value="ku">Курдська</option><option value="km">Кхмерська</option><option value="la">Латинський</option><option value="lv">Латвійська</option><option value="ln">Українська</option><option value="lt">Литовська</option><option value="lb">Люксембурзька</option><option value="mu">Майя</option><option value="mk">Македонська</option><option value="ms">Малайська</option><option value="ma">Маньчжурський</option><option value="mi">Маорі</option><option value="mj">Марійський</option><option value="mc">Мікенський</option><option value="mf">Мокшанську</option><option value="mn">Монгольський</option><option value="nu">Науатль</option><option value="de">Німецька</option><option value="nl">Нідерландський</option><option value="og">Ногайський</option><option value="ні">Норвезький</option><option value="oa">Орокский</option><option value="os">Осетинський</option><option value="ot">Османський</option><option value="pi">Пали</option><option value="pm">Пап'яменто</option><option value="pa">Пенджабська</option><option value="fa">Перська</option><option value="pl">Польський</option><option value="pt">Португальська</option><option value="ro">Румунський, Молдавський</option><option value="ru">Російський</option><option value="sa">Санскрит</option><option value="se">саамська північна</option><option value="sr">Сербська</option><option value="ld">Сефардский</option><option value="sz">Сілезький</option><option value="sk">Словацька</option><option value="sl">Словенська</option><option value="sw">Суахілі</option><option value="tl">Тагальська</option><option value="tg">Таджицький</option><option value="t">Тайський</option><option value="tt">Татарський</option><option value="tw">Тві</option><option value="bo">Тибетська</option><option value="tf">Тофаларский</option><option value="tv">Тувинська</option><option value="tr">Турецький</option><option value="t">Туркменський</option><option value="ud">Удмурдский</option><option value="uz">Узбецький</option><option value="ug">Уйгурська</option><option value="uk">Українська</option><option value="ur">Урду</option><option value="uu">Урумська</option><option value="fo">Українська</option><option value="fi">Фінський</option><option value="fr">Французький</option><option value="ні">Хінді</option><option value="hr">Хорватська</option><option value="cu">Церковнослов'янська (Старослов'янська)</option><option value="ch">Чаморро</option><option value="ke">Черкеський</option><option value="ck">Черокі</option><option value="ce">Чеченський</option><option value="cs">Чеська</option><option value="cv">Чуваська</option><option value="cn">Шайенского</option><option value="sv">Шведський</option><option value="cj">Шорский</option><option value="sx">Шумерська</option><option value="е">Евенкійський</option><option value="gw">Ельзаський</option><option value="mv">Ерзянською</option><option value="eo">Есперанто</option><option value="і">Естонська</option><option value="я">Юпийский</option><option value="sh">Якутська</option><option value="і">Японський</option> </select>
</div>
<div id="translate-arrow"><a>&nbsp;</a></div>
<div class="translate-lang">
<select name="to" id="translateOf">
<option value="xx">Всі мови</option><option value="ab">Абхазький</option><option value="av">Аварська</option><option value="ad">Адигейський</option><option value="я">Азербайджанський</option><option value="ay">Аймара</option><option value="ai">Айнский мова</option><option value="sq">Албанська</option><option value="al">Алтайський</option><option value="en">Англійська</option><option value="ар">Арабська</option><option value="hy">Вірменський</option><option value="af">Африкаанс</option><option value="eu">Басків</option><option value="ba">Башкирська</option><option value="be">Білоруський</option><option value="bg">Болгарський</option><option value="hu">Угорський</option><option value="vp">Вепська</option><option value="vd">Водский</option><option value="vi">В'єтнамський</option><option value="ht">Гаїтянська</option><option value="gl">Галісійська</option><option value="el">Грецька</option><option value="ka">Грузинський</option><option value="da">Датський</option><option value="pr">Давньоруський мова</option><option value="he">Іврит</option><option value="yi">Ідиш</option><option value="iz">Іжорський</option><option value="in">Інгушський</option><option value="id">Індонезійська</option><option value="ga">Ірландський</option><option value="is">Ісландська</option><option value="es">Іспанська</option><option value="it">Італійський</option><option value="yo">Йоруба</option><option value="kk">Казахська</option><option value="kc">Карачаевский</option><option value="ca">Каталонська</option><option value="qy">Квенья</option><option value="qu">Кечуа</option><option value="zh">Китайський</option><option value="go">Клінгонською</option><option value="ko">Корейська</option><option value="ct">Кримськотатарська</option><option value="kp">Кумицька</option><option value="ku">Курдська</option><option value="km">Кхмерська</option><option value="la">Латинський</option><option value="lv">Латвійська</option><option value="ln">Українська</option><option value="lt">Литовська</option><option value="jp">Ложбан</option><option value="mu">Майя</option><option value="mk">Македонська</option><option value="ms">Малайська</option><option value="t">Мальтійська</option><option value="mi">Маорі</option><option value="mj">Марійський</option><option value="mf">Мокшанську</option><option value="mn">Монгольський</option><option value="de">Німецька</option><option value="nl">Нідерландський</option><option value="ні">Норвезький</option><option value="os">Осетинський</option><option value="pi">Пали</option><option value="pm">Пап'яменто</option><option value="pa">Пенджабська</option><option value="fa">Перська</option><option value="pl">Польський</option><option value="pt">Португальська</option><option value="ps">Українська</option><option value="ro">Румунський, Молдавський</option><option value="ru" selected>Російський</option><option value="sr">Сербська</option><option value="sk">Словацька</option><option value="sl">Словенська</option><option value="sw">Суахілі</option><option value="tl">Тагальська</option><option value="tg">Таджицький</option><option value="t">Тайський</option><option value="ta">Тамільська</option><option value="tt">Татарський</option><option value="tr">Турецький</option><option value="t">Туркменський</option><option value="ud">Удмурдский</option><option value="uz">Узбецький</option><option value="ug">Уйгурська</option><option value="uk">Українська</option><option value="ur">Урду</option><option value="uu">Урумська</option><option value="fo">Українська</option><option value="fi">Фінський</option><option value="fr">Французький</option><option value="hi">Хінді</option><option value="hr">Хорватська</option><option value="cu">Церковнослов'янська (Старослов'янська)</option><option value="ch">Чаморро</option><option value="ck">Черокі</option><option value="ce">Чеченський</option><option value="cs">Чеська</option><option value="cv">Чуваська</option><option value="sv">Шведський</option><option value="cj">Шорский</option><option value="е">Евенкійський</option><option value="gw">Ельзаський</option><option value="mv">Ерзянською</option><option value="eo">Есперанто</option><option value="і">Естонська</option><option value="sh">Якутська</option><option value="і">Японський</option> </select>
</div>
<input type="hidden" name="did" id="did-field" value="" />
<input type="hidden" id="search-type" name="stype" value="0" />

</td><td>

<button id="search-button">Знайти!</button>

</td></tr></table>

</form>

<input type="text" name="dic_query" id="dic-query"
title="Інтерактивне зміст. Вводите потрібний Вам термін" placeholder="Інтерактивне зміст. Вводите потрібний Вам термін"
autocomplete="off" autofocus>

</div>
<ul id="search-tabs">
<li data-search-type="0" id="interpretations" class="active"><a href="#" onclick="return false;">Тлумачення</a></li>
<li data-search-type="1" id="translations" ><a href="#" onclick="return false;">Переклади</a></li>
<li data-search-type="10" id="books" ><a href="#" onclick="return false;">Книги</a></li>
<!-- li data-search-type="11" id="cinemas" ><a href="#" onclick="return false;">Фільми</a></li -->
</ul>
</div>

<div id="ad_top2"><div class="banner"></div><!--BETWEEN SSP CODE V2.0 START--><script type="text/javascript">var between_type="adj";document.write('<script type = "text/javascript" src = "http://cache.betweendigital.com/sections/149534.js"></scr'+'ipt>')</script><!--BETWEEN SSP END-->
</div> <div id="content">

<div id="search_results">

<h1 id="title">біологія</h1>
<div id="search_links"> <a class="active" >Тлумачення</a>
<a href="http://translate.academic.ru/биология/ru/">Переклад</a>
<a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=10">Книги</a>
<a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=11">Фильмы</a>
</div><!----><ul class="terms-list" id="found_articles">
<li><p><span class="item">1</span> <strong><a href="http://big_medicine.academic.ru/2478/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — БІОЛОГІЯ. Зміст: I. Історія біології.............. 424 Віталізм і машинизм. Виникнення емпіричних наук у XVI XVIII ст. Виникнення і розвиток еволюційної теорії. Розвиток фізіології в XIX ст. Розвиток клітинного вчення. Підсумки XIX століття ...</p>
<p class="src"><a href="http://big_medicine.academic.ru/">Велика медична енциклопедія</a></p>
</li>
<li><p><span class="item">2</span> <strong><a href="http://dic.academic.ru/dic.nsf/dic_fwords/7704/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — (грец., від bios-життя, logos-слово). Наука про життя і її прояви у тварин і рослин. Словник іноземних слів, що увійшли до складу російської мови. Чудінов А. Н., 1910. БІОЛОГІЯ грец., від bios-життя, logos, слово. Вчення про життєву силу.&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/dic_fwords/">Словник іноземних слів російської мови</a></p>
</li>
<li><p><span class="item">3</span> <strong><a href="http://dic.academic.ru/dic.nsf/dic_biology/627/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — (від біо... і ...логія), сукупність наук про живу природу. Предмет Б. всі прояви життя: будову та функції живих істот і їх природних співтовариств, поширення, походження і розвиток, зв'язки один з одним і з неживою природою. Завдання Б.&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/dic_biology/">Біологічний енциклопедичний словник</a></p>
</li>
<li><p><span class="item">4</span> <strong><a href="http://dic.academic.ru/dic.nsf/enc3p/72882">БІОЛОГІЯ</a></strong> — (від біо... і ...логія) сукупність наук про живу природу про величезному різноманітті вимерлих і нині населяють Землю живих істот, їх будову та функції, походження, поширення і розвитку, зв'язках один з одним і з неживою природою.&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/enc3p/">Великий Енциклопедичний словник</a></p>
</li>
<li><p><span class="item">5</span> <strong><a href="http://illustrated_dictionary.academic.ru/1345/%D0%91%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">Биология</a></strong> — (від біо... і ...логія), сукупність наук про живу природу. Біологія вивчає будову і функції організмів і їх спільнот, походження, поширення, розвиток, зв'язки організмів один з одним і з неживою природою. Біологія встановлює&#8230; </p>
<p class="src"><a href="http://illustrated_dictionary.academic.ru/">Ілюстрований енциклопедичний словник</a></p>
</li>
<li><p><span class="item">6</span> <strong><a href="http://epistemology_of_science.academic.ru/79/%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">биология</a></strong> — БІОЛОГІЯ (від грец. bio життя і logos-слово, вчення) сукупність наук про життя в усьому розмаїтті прояви її форм, властивостей, зв'язків і відносин на Землі. Вперше термін був запропонований одночасно і незалежно один від одного в 1802&#8230; </p>
<p class="src"><a href="http://epistemology_of_science.academic.ru/">Енциклопедія епістемології та філософії науки</a></p>
</li>
<li><p><span class="item">7</span> <strong><a href="http://dic.academic.ru/dic.nsf/ecolog/2771/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — (від біо... і ... логія), сукупність наук про живу природу. Предметом вивчення біології є життя у всіх її проявах. Термін "біологія" запропонували Ж. Б. Ламарк і Р. Тревиранус незалежно один від одного (1802). Екологічний&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/ecolog/">Екологічний словник</a></p>
</li>
<li><p><span class="item">8</span> <strong><a href="http://gallicismes.academic.ru/6493/%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">биология</a></strong> — і, ж. biologie f. 1. Комплекс наукових дисциплін про живу природу, про закономірності органічного життя. БАС 2. Йому &LT; Антуану Батісту П'єру Антуана де Моне, шевальє де Ламарк&GT;.. належала заслуга введення в науковий побут самого терміну&#8230; </p>
<p class="src"><a href="http://gallicismes.academic.ru/">Історичний словник галлицизмов російської мови</a></p>
</li>
<li><p><span class="item">9</span> <strong><a href="http://dic.academic.ru/dic.nsf/ntes/492/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — БІОЛОГІЯ, наука про життя і живих організмах. До неї відносяться ботаніка, зоологія, екологія, фізіологія, цитологія, генетика, таксономія, ембріологія і мікробіологія. Всі ці галузі науки присвячені вивченню походження, історії, будови,&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/ntes/">Науково-технічний енциклопедичний словник</a></p>
</li>
<li><p><span class="item">10</span> <strong><a href="http://dic.academic.ru/dic.nsf/ushakov/747586">БІОЛОГІЯ</a></strong> — БІОЛОГІЯ, біології, мн. ні, дружин. (від грец. bios життя і logos вчення). Загальне вчення про життя органічного світу. Тлумачний словник Ушакова. Д. Н. Ушаков. 1935 1940 ...</p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/ushakov/">Тлумачний словник Ушакова</a></p>
</li>
<li><p><span class="item">11</span> <strong><a href="http://dic.academic.ru/dic.nsf/ogegova/12178">БІОЛОГІЯ</a></strong> — БІОЛОГІЯ, і, жін. Сукупність наук про живу природу, про закономірності органічного життя. Космічна б. (вивчає життєдіяльність організмів в умовах космосу). | дод. біологічний, а, е. Тлумачний словник Ожегова. С. В. Ожегов, М.Ю.&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/ogegova/">Тлумачний словник Ожегова</a></p>
</li>
<li><p><span class="item">12</span> <strong><a href="http://dic.academic.ru/dic.nsf/enc_philosophy/1852/%D0%91%D0%98%D0%9E%D0%9B%D0%9E%D0%93%D0%98%D0%AF">БИОЛОГИЯ</a></strong> — (від грец. bios – життя і logos – вчення) наука про життя, заснована на даних психології, ботаніки, зоології, антропології. Форми життя та їх структура вивчаються морфологією, яка як органология, анатомія і гістологія ставить собі метою&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/enc_philosophy/">Філософська енциклопедія</a></p>
</li>
<li><p><span class="item">13</span> <strong><a href="http://dic.academic.ru/dic.nsf/dic_synonims/9343/%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">биология</a></strong> — сущ., кількість у синонімів: 73 • агробиология (1) • актинобиология (1) • альгологія (3) ...</p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/dic_synonims/">Словник синонімів</a></p>
</li>
<li><p><span class="item">14</span> <strong><a href="http://technical_translator_dictionary.academic.ru/14640/%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">биология</a></strong> — &mdash; [http://www.dunwoodypress.com/148/PDF/Biotech Eng Rus.pdf] Тематики біотехнології EN biology ...</p>
<p class="src"><a href="http://technical_translator_dictionary.academic.ru/">Довідник технічного перекладача</a></p>
</li>
<li><p><span class="item">15</span> <strong><a href="http://philosophy_sponville.academic.ru/220/%D0%91%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">Биология</a></strong> — Біологія ¦ Biologie Наука про живі організми і про життя взагалі. Неважко помітити, що існування біології як науки аж ніяк не може служити резоном до того, щоб жити, і навіть до того, щоб займатися біологією. Тим не менше всі наші&#8230; </p>
<p class="src"><a href="http://philosophy_sponville.academic.ru/">Філософський словник Спонвиля</a></p>
</li>
<li><p><span class="item">16</span> <strong><a href="http://genetics_dictionary.academic.ru/913/%D0%91%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_">Біологія </a></strong> — * біялогія * biology вчення про життя, що включає в себе систему наук: зоологію, ботаніку, генетику, фізіологію, екологію та ін. Вивчає загальні і приватні закономірності прояву життя. Основна мета дослідження-виявлення основних властивостей,&#8230; </p>
<p class="src"><a href="http://genetics_dictionary.academic.ru/">Генетика. Енциклопедичний словник</a></p>
</li>
<li><p><span class="item">17</span> <strong><a href="http://dic.academic.ru/dic.nsf/ruwiki/55">Біологія</a></strong> — У цього терміну існують і інші значення, див Біологія (значення). Біологія (грец. ???????? ???, біо, життя; ін грец. ?????&#160; учення, наука)&#160; система наук, об'єктом вивчення якої є живі істоти і їх взаємодія з&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/ruwiki/">Вікіпедія</a></p>
</li>
<li><p><span class="item">18</span> <strong><a href="http://dic.academic.ru/dic.nsf/bse/69404/%D0%91%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">Биология</a></strong> — (від Біо... і ...Логія сукупність наук про живу природу. Предмет вивчення Б. всі прояви життя: будову та функції живих істот і їх природних співтовариств, їх поширення, походження і розвиток, зв'язки один з одним і з неживою&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/bse/">Велика радянська енциклопедія</a></p>
</li>
<li><p><span class="item">19</span> <strong><a href="http://dic.academic.ru/dic.nsf/es/8884/%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">биология</a></strong> — і; ж. [від грец. bios життя і logos вчення] 1. Комплексна наука про живу природу та закономірності органічного життя. / Про окремих напрямах або розділах цієї науки. Молекулярна, космічна б. // Навчальний предмет, що викладає цю науку.&#8230; </p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/es/">Енциклопедичний словник</a></p>
</li>
<li><p><span class="item">20</span> <strong><a href="http://dic.academic.ru/dic.nsf/enc_medicine/4642/%D0%91%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F">Биология</a></strong> — I Біологія (грец. bios-життя + logos вчення) сукупність природних наук про життя як особливе явище природи. Предметом вивчення служать будову, функціонування, індивідуальне і історичне (еволюція) розвиток організмів, їх взаємовідносини ...</p>
<p class="src"><a href="http://dic.academic.ru/contents.nsf/enc_medicine/">Медична енциклопедія</a></p>
</li>
</ul>
<div class="page-nav">
<strong>Сторінки </strong>
<ul class="arrow">
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=1"><span>Следующая</span>&nbsp;&#8594;</a></li>
</ul>
<ul>
<li class="active">1</li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=1">2</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=2">3</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=3">4</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=4">5</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=5">6</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=6">7</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=7">8</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=8">9</a></li>
<li><a href="/searchall.php?SWord=%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F&amp;stype=0&amp;btype=1&amp;p=9">10</a></li>
</ul>
</div>

</div>

</div>
<div id="ad_bottom">
<div style="text-align: center;">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 336x280, створено 08.10.08 -->
<ins class="adsbygoogle"
style="display:inline-block;width:740px;height:280px"
data-ad-client="ca-pub-8594606551930257"
data-ad-slot="6157433105"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>

<div class="banner"></div>

<!-- Яндекс.Директ -->
<div id="yandex_ad"></div>
<script type="text/javascript">
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Direct.insertInto(48186, "yandex_ad", {
ad_format:"direct",
font_size: 1,
type: "grid",
limit: 4,
title_font_size: 3,
links_underline: true,
site_bg_color: "FFFFFF",
header_bg_color: "FEEAC7",
title_color: "0000CC",
url_color: "006600",
text_color: "000000",
hover_color: "0066FF",
sitelinks_color: "0000CC",
favicon: true,
no_sitelinks: false
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.src = "//an.yandex.ru/system/context.js";
s.type = "text/javascript";
s.async = true;
t.parentNode.insertBefore(s, t);
})(window, document, "yandex_context_callbacks");
</script>

</div>
<div id="footer">
<div id="liveinternet">
<!--LiveInternet counter--><script type="text/javascript"><!--
document.write("<a href='http://www.liveinternet.ru/click' "+
"target=_blank style='border-bottom: none;'><img src='http://counter.yadro.ru/hit?t44.6;r"+
escape(document.referrer)+((typeof(screen)=="undefined")?"":
";s"+screen.width+".*"+screen.height+".*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+
";h"+escape(document.title.substring(0,80))+";"+Math.random()+
"' alt=" title='LiveInternet' "+
"border='0' width='31' height='31'><\/a>")
//--></script><!--/LiveInternet-->
</div>

<div id="restrictions">16+</div>

&copy; Академік, 2000-2014

<ul>
<li>
Зворотній зв'язок:
<a id="m_s" href="#">Техпідтримка</a>,
<a id="m_a" href="#">Реклама на сайті</a>
</li>
</ul>
<div>

<a href="http://partners.academic.ru/partner_proposal.php">Експорт словників на сайти</a>, зроблені на PHP, <div class="img joom"></div> Joomla, <div class="img drp"></div> Drupal, <div class="img wp"></div> WordPress, MODx.
</div>

</div>

<script async src="/js/academic.min.js?150324" type="text/javascript"></script>

<!--script type="text/javascript" src="/js/cl.js"></script>
<script src="/js/select2/select2.min.js"></script-->

<!--script type="text/javascript" src="https://apis.google.com/js/plusone.js"-->
<!--/script-->

<div id="ad_right">
<div class="banner">

<div id='div-gpt-ad-right-top' style='width:240px; height:400px;'>

<script type='text/javascript'>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-right-top'); });
</script>
</div>

</div>

<div class="banner">

<!-- Yandex.Premium 21881 -->
<div id="yandex_premium_21881"></div>
<script type="text/javascript"><!--
(function(w, d, n, s, t) {
function renderDirect () {
Ya.Direct.insertInto("21881", "yandex_premium_21881", {
ad_format: "premium",
type: "vertical",
limit: 3,
favicon: true,
no_sitelinks: false,
sitelinks_color: "0000CC",
title_font_size: 3,
font_size: 1,
site_bg_color: "FFFFFF",
title_color: "0000CC",
text_color: "000000",
url_color: "006600",
hover_color: "0000CC",
links_underline: true,

search_text: "біологія",
search_page_number: 1
});
}

w[n] = w[n] || []; w[n].push(renderDirect); 
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(window, document, "yandex_context_callbacks"); //--></script>

</div> 

<!--AdFox START-->
<!--dic.academic.ru-->
<!--Майданчик: dic.academic.ru / * / *-->
<!--Тип банера: 240x400-->
<!--Розташування: <верх сторінки>-->
<!-- ________________________AdFox Asynchronous code START__________________________ --> 
<script type="text/javascript"> 
<!--
if (typeof(pr) == 'undefined') { var pr = Math.floor(Math.random() * 4294967295) + 1; }
if (typeof(document.referrer) != 'undefined') {
if (typeof(afReferrer) == 'undefined') {
afReferrer = encodeURIComponent(document.referrer);
}
} else {
afReferrer = ";
}
var addate = new Date();

var dl = encodeURIComponent(document.location);
var pr1 = Math.floor(Math.random() * 4294967295) + 1;

document.write('<div id="AdFox_banner_'+pr1+'"><\/div>');
document.write('<div style="visibility:hidden; position:absolute;"><iframe id="AdFox_iframe_'+pr1+'" width=1 height=1 marginwidth=0 marginheight=0 scrolling=no frameborder=0><\/iframe><\/div>');

AdFox_getCodeScript(1,pr1,'//ads.adfox.ru/247068/prepareCode?pp=g&amp;ps=cfov&amp;p2=fifz&amp;pct=a&amp;plp=a&amp;pli=a&amp;pop=a&amp;pr=' + pr +'&amp;pt=b&amp;pd=' + addate.getDate() + '&amp;pw=' + addate.getDay() + '&amp;pv=' + addate.getHours() + '&amp;prr=' + afReferrer + '&amp;dl='+dl+'&amp;pr1='+pr1);
// -->
</script> 
<!-- _________________________AdFox Asynchronous code END___________________________ -->

<div class="banner"></div>

<!--BETWEEN SSP CODE V2.0 START--><script type="text/javascript">var between_type="adj";document.write('<script type = "text/javascript" src = "http://cache.betweendigital.com/sections/153110.js"></scr'+'ipt>')</script><!--BETWEEN SSP END-->

<div class="banner"></div><br />

<div>
<div>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 160x600, створено 09.10.08 -->
<ins class="adsbygoogle"
style="display:inline-block;width:160px;height:600px"
data-ad-client="ca-pub-8594606551930257"
data-ad-slot="0137252453"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div>

<div id="ad_top">
<div class="banner" style="text-align: center;">

<div id='div-gpt-ad-topline' style='width:970px; height:90px;'>
<script type='text/javascript'>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-topline'); });
</script>
</div>

<!-- R-48186-8 Яндекс.RTB-блок -->
<div id="yandex_ad_R-48186-8"></div>
<script type="text/javascript">
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-48186-8",
renderTo: "yandex_ad_R-48186-8",
async: true
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(this, this.document, "yandexContextAsyncCallbacks");
</script>
</div>
</div>

</div>

<!-- *************** сфінкс IP: 144.76.97.182 ******** -->

<!-- AdRiver code START. Type:extension Site: academic PZ: 0 BN: 0 -->
<script type="text/javascript">
(function(L){if(typeof(ar_cn)=="undefined")ar_cn=1;
var S='setTimeout(function(e){if(!self.CgiHref){document.close();e=parent.document.getElementById("ar_container_"+ar_bnum);e.parentNode.removeChild(e);}},3000);',
j=' type="text/javascript"',t=0,D=document,n=ar_cn;L=" + ('https:'== document.location.protocol ? 'https:' : 'http:') + "+L+escape(D. referrer||'unknown')+'&rnd='+Math.round(Math.random()*999999999);
function _(){if(t++<100){var F=D. getElementById('ar_container_'+n);
if(F){try{var d=F. contentDocument||(window.ActiveXObject&&window.frames['ar_container_'+n].document);
if(d){d.write('<sc'+'ript'+j+'>var ar_bnum='+n+';'+S+'<\/sc'+'ript><sc'+'ript'+j+' src="'+L+'"><\/sc'+'ript>');t=0}
else setTimeout(_,100);}catch(e){try{F. src="javascript:{document.write('<sc'+'ript"+j+">var ar_bnum="+n+"; document.domain=\""
+D. domain+"\";"+S+"<\/sc'+'ript>');document.write('<sc'+'ript"+j+" src=\""+L+"\"><\/sc'+'ript>');}";return}catch(E){}}}else setTimeout(_,100);}}
D. write('<div style="visibility:hidden;height:0px;left:-1000px;position:absolute;"><iframe id="ar_container_'+ar_cn
+'" width=1 height=1 marginwidth=0 marginheight=0 scrolling=no frameborder=0><\/iframe><\/div><div id="ad_ph_'+ar_cn
+'" style="display:none;"><\/div>');_();ar_cn++;
})('//ad.adriver.ru/cgi-bin/erle.cgi?sid=189955&target=top&bt=43&pz=0&tail256=');
</script>
<!-- AdRiver code END -->

<!--script src="//cds.j5t2u9c4.hwcdn.net/s/87520fcb-b4a0-4806-87d0-b559f147126b.js" type="text/javascript"></script>-->

</body>
</html>
<link rel="stylesheet" href="/css/academic.min.css?150325" type="text/css" />

Само собою, результат такої обробки також вимагає ручної правки.
Розробка програми
Додаток збиралося в середовищі розробки кроссплатформенних додатків Marmalade SDK мовою програмування C++. Спробую навести UML-діаграму, що відображає класи програми, їх основні властивості і методи.

Головний клас програми, з якими оперує цикл обробки подій — клас Application.
Клас MainScreen — клас, який відповідає за малювання стартового екрана програми. Виглядає він так:


LevelGroupScreen відповідає за малювання таблиці рівнів групи:


LevelScreen — вивід основного екрану, відповідального за ігровий процес:


ImageResource — клас, відповідальний за маніпуляцію з зображеннями-іконками.
Клас Application містить покажчики на всі ці класи скрінів, а так само на клас ImageResource.
При виклику Application.Init() послідовно створює примірники цих класів і ініціалізує їх.
Атрибут ActiveScreen зберігає інформацію про те, який з екранів зараз активний, щоб при необхідності викликати на активному екрані методи обробки вводу (OnClick, OnMove) і перемальовування (Draw).
Метод UpdateInputзаймається обробкою подій введення, ініціюються користувачем і передаються додатком від операційної системи.
Кожен з екранів при необхідності може звернутися до ImageResource для отримання з пам'яті того чи іншого зображення.
Відповідно, при закритті програми послідовно викликаються деструктори всіх об'єктів.
Підбиваючи підсумки
Ті проблеми, які я побачив у вихідній програмі, я вирішив у своєму:
  • підтримка книжкової та альбомної орієнтації екрану;
  • можливість масштабувати шрифт;
  • виділення слова при повторному введенні;
  • сортування слів за довжиною (за спаданням) і алфавітом;
  • підтримка жестів, в тому числі і zoom-жестів;
  • величезну кількість рівнів.
Для тих, кому цікава реалізація: Чоловічий, iOS.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.