Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje > Pravljenje igara
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 17.7.2015, 13:39   #1
OgnjenM
Član
 
Član od: 16.1.2010.
Lokacija: https://www.ognjenmarceta.com/
Poruke: 271
Zahvalnice: 77
Zahvaljeno 51 puta na 32 poruka
Određen forumom Slagalica Kviz

Radim na igri slicnoj popularnoj igri/kvizu Slagalica. Zapravo zavrsio sam kompletno projekat sve super radi, tu je i multiplejer. E sada kako sam sve zavrsio tako sam poceo da vise sminkam i poliram igru.
Primjetio sam da mi se ne svidja trenutno kako radi kod mene igra "Najduza Rec".

Igrac izvlaci 12 nasumicnih slova i od njih pravi najduzu rec, a u pozadini program trazi sam rijesenje od zadatih slova. Tako trenutno radi algoritam, medjutim ne svidja mi se. Jer se zna desiti da igrac dobije nasumicna slova na takav nacin da najduza rec bude maksimalno od 4,5,6 slova, samim tim je i teze igracu.

Npr, igraci su dobili sledeca slova:
O F Z F A J E V V D H C
Najduza rijec koju je program nasao u bazi je [Baza ima preko 50 hiljada reci]:
ZAVOJ

Citao sam malo po forumima kakav je algoritam kod originalne slagalice i postoje dva nagadjanja:

1. Daje se jednak broj nasumicnih samoglasnika i suglasnika
2. Najduza rec je vec zadata unaprijed od racunara i zapravo se njena slova izbacuju (sto bi znacilo da "nasumicno" biranje slova i nije nasumicno) i onda se doda ostatak slova ako izabrana rec se sastoji manje od 12 slova.

Ima li neko mozda informaciju da li je nesto tacno odo ovo dvoje navedenih gore, ili mozda ima nekakvu ideju?
OgnjenM je offline   Odgovor sa citatom ove poruke
Stara 18.7.2015, 9:24   #2
mciggzy
Starosedelac
 
Član od: 13.3.2006.
Lokacija: 11160 Myryewo Reputacija: ■■■■■■■■□
Poruke: 1.515
Zahvalnice: 605
Zahvaljeno 2.479 puta na 595 poruka
Određen forumom Re: Slagalica Kviz

Meni se ne svidja ideja da se uzme unapred dugacka rec. nekad je to ocigledno I bas trazis tu rec. Bolje da uzmes raspodelu prema ucestalosti slova u srpskom jeziku. Nemam je, ali postoji srpski scrabble pa kontam da je isti odnos slova ;D
mciggzy je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku mciggzy na korisnoj poruci:
OgnjenM (27.7.2015)
Stara 18.7.2015, 21:55   #3
Teva
Starosedelac
 
Član od: 23.2.2006.
Lokacija: Tamo gde su kuće od čokolade i prozori od marmelade....
Poruke: 1.579
Zahvalnice: 195
Zahvaljeno 301 puta na 171 poruka
Određen forumom Re: Slagalica Kviz

Ja bih analizirao taj skup od 50k reči i uzeo sve reči dužine 8+ i izračunao verovatnoću pojavljivanja svakog slova u tim rečima i onda koristio te verovatnoće u favorizovanju određenih slova u "slučajnom" izboru.

I onda na osnovu izračunatih verovatnoća izračunaš neki trešhold i biraš 8,9 slova sa verovatnoćom koja je ista ili veća od tog trešholda, i ostala 3,4 nasumice... Zbog prirode našeg jezika će samoglasnici imati veću verovatnoći od suglasnika, pa će ti trebati i neka provera da bude određen procenat samoglasnika u odnosu na suglasnike.

Cenim da će dosta da ti popravi prosečan slučaj da bude veći broj reči u opticaju favorizovanjem slova kao što su t,n,s,a,i,o,m,r umesto f, dž, š, i sl

Mislim da i prava slagalica ima sličan sistem, stim što verovatno imaju neke malo ozbiljnije pretpostavke o jeziku, tipa 4 prednjenepčana, 4 usna, 4 strujna slova i sl

Poslednja ispravka: Teva (20.7.2015 u 13:54)
Teva je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Teva na korisnoj poruci:
OgnjenM (27.7.2015)
Stara 27.7.2015, 12:37   #4
OgnjenM
Član
 
Član od: 16.1.2010.
Lokacija: https://www.ognjenmarceta.com/
Poruke: 271
Zahvalnice: 77
Zahvaljeno 51 puta na 32 poruka
Određen forumom Re: Slagalica Kviz

Hvala na odgovorima, pomoglo je dosta. Zadovoljan rezultatom. Sada provjeravam ucestalost slova u rijecima i na osnovu toga izbacuje nasumicna slova prateci pravilo da bude balans izmedju samoglasnika i suglasnika.
OgnjenM je offline   Odgovor sa citatom ove poruke
Stara 9.11.2015, 13:37   #5
OgnjenM
Član
 
Član od: 16.1.2010.
Lokacija: https://www.ognjenmarceta.com/
Poruke: 271
Zahvalnice: 77
Zahvaljeno 51 puta na 32 poruka
Određen forumom Re: Slagalica Kviz

Probao sam da prebacim trenutni kod C# na server (PHP). Ovakav isti kod (C#) na uredjajima radi uncinkovito i veoma brzo. Dok PHP je dosta sporiji otprilike mu treba 15-20 sekundi da pronadje najduzu rijec. Ucitavanje rijecnika je 2 sekunde ostalo je utroseno na pronalazenje. Da li neko mozda ima ideju kako bih mogao ubrzati taj proces?


parse_dictionary.php

Kod:
<?php

$ouput = array();
$mysqli = new mysqli('localhost','root','','multiquiz_db');
$mysqli->set_charset('utf8'); 
if ($result = $mysqli->query("SELECT word FROM words_live")) {
    while($row = $result->fetch_array(MYSQL_ASSOC)) {
        //echo(mb_convert_encoding($row['word'], 'HTML-ENTITIES', 'utf-8'));
        array_push($ouput, $row['word']);
    }

    //echo utf8_decode(json_encode($ouput));
}

$result->close();
$mysqli->close();

?>

Trie.php
Kod:
  <?php

class Trie
{
    public $children = array();
    public $value = null;
    public $word = null;

    public function __construct($value = null)
    {
        $this->value = $value;
    }

    public function adda($array)
    {
        $this->addb($array, 0);
    }

    public function addb($array, $offset)
    {
        foreach ($this->children as $child)
        {
            if($child->value == $array[$offset])
            {
                $child->addb($array, $offset + 1);
                return;
            }
        }

        $trieNode = new Trie($array[$offset]);
        array_push($this->children, $trieNode);

        if($offset < count($array) - 1)
        {
            $trieNode->addb($array, $offset+1);
        }
        else
        {
            $trieNode->word = implode(" ", $array);
        }
    }
}
?>
Index.php
Kod:
<?php
include 'Trie.php';
include 'parse_dictionary.php';
ini_set('memory_limit', '1024M'); // or you could use 1G
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding("UTF-8"); 
class LongestWord
{
    public $root = null;

    public function __construct($ouput)
    {
        $this->root = new Trie();
        foreach ($ouput as $word)
        {
            //echo($word);
            //echo(str_split_unicode($word)[0]);
            $this->root->adda(str_split_unicode($word));
        }
    }

public function search($cs)
{
    return $this->visit($this->root, $cs);
}

function visit($n, $allowedCharacters)
{
    $bestMatch = null;
    if(count($n->children) == 0)
    {
        $bestMatch = $n->word;
    }

    foreach($n->children as $child)
    {
        if($this->contains($allowedCharacters, $child->value))
        {
            $result = $this->visit($child, $this->remove($allowedCharacters, $child->value));

            if($bestMatch == null || $result != null && strlen($bestMatch) < strlen($result))
            {
                $bestMatch = $result;
            }
        }
    }
    return $bestMatch;
}

function remove($allowedCharacters, $value)
{
    $newDict = $allowedCharacters;
    if(($key = array_search($value, $newDict)))
    {
        unset($newDict[$key]);
    }

    return $newDict;
}

function contains($allowedCharacters, $value)
{
    foreach($allowedCharacters as $x)
    {
        if($value == $x)
        {
                //  echo $value . "=====". $x. "|||||||";
            return true;
        }
        else
        {
            //echo $value . "!!===". $x. "|||||||";
        }
    }
    return false;
}
}

function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}


$chars = 'IIOIOFNČGDĆJ';
$testCharacters = str_split_unicode($chars);
$lw = new LongestWord($ouput);
echo($lw->search($testCharacters));

?>
OgnjenM je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku OgnjenM na korisnoj poruci:
borisbex (12.2.2024), mario slagalicar (12.11.2018)
Stara 12.2.2024, 11:20   #6
borisbex
Novi član
 
Član od: 11.2.2016.
Poruke: 2
Zahvalnice: 1
Zahvaljeno 0 puta na 0 poruka
Određen forumom Re: Slagalica Kviz

Jeste da je tema mnogo stara, ali slučajno sam naišao na ove linkove za igre iz popularne slagalice (meni i dalje najomiljeniji kviz), Najduža reč i Moj broj, meni lepo rade:

Najduža reč:

https://latinicnocirilicnikonvertor....81a-re268.html

Moj broj:

https://latinicnocirilicnikonvertor..../moj-broj.html
borisbex je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Filmski kviz caine Kvizovi 7480 26.8.2012 19:28
Kviz blamovi zidan grobar Kvizovi 22 28.7.2009 15:31
Spisak pogođenih pitanja - Harry Potter kviz iMa_NeKo_PljUgU Kvizovi 7 6.7.2008 11:16
Uvrnuti kviz culer Male igre 16 14.3.2008 21:26
kviz "SE" ElastoManiac Male igre 25 24.12.2005 20:45


Sva vremena su po Griniču +2 h. Sada je 0:33.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com