[php] Browsergame in sviluppo

Stato
Discussione chiusa ad ulteriori risposte.

TheTrigger

Utente Silver
12 Luglio 2007
87
12
7
78
E salve ragazzi, negli ultimi mesi mi sono fissato di voler programmare un browser game con delle palle talmente gradi da sfondare la sedia..!

Dopo alcuni mesi di lavori estenuanti, il 99.9999% del lavoro tutto da solo, mi sono accorto di aver perso ormai anche i denti! E' diventato troppo grande come progetto da portare avanti da solo... quindi... mi stavo chiedendo.. se qualcuno è disposto a portate avanti questo progetto con me.. Ci sono alcuni punti da sottolineare..

1) Il progetto è serio, e gratuito, ma punto cmq a guadagnarci (pubblicità e account premium)

2) Il compare che mi aiuterà, non lavora per beneficenza, ma riceverà una retribuzione in Ca$h in base al lavoro svolto (dai ricavi utili)..

Che titolo ha? Di che parla?
Titolo? non ne ha...
E' un RPG Fantasy (credo :asd: ) in pratica hai il tuo pg e puoi scorrazzare tra vari luoghi, uccidere creature, guadagnare, fare carriera, puzzare, mangiare, uccidere amici... e ogni tanto cè anche qualche chat pulciosa (in ajax èèè xD)..

Evitiamo di confonderci, non è un RPG basato sulla Chat di gruppo (mi fanno deprimere :S)..

*La programmazione utilizzata non è ad oggetti..
:lurkmg: èh non l'ho ancora imparata..

che altro dire... per ora ho bisogno di aiuto sia pratico che teorico sulle battaglie, devono essere capaci di supportare scontri sia contro creature sia in PvP, in più il player ha la possibilità di utilizzare Spell e Oggetti..
Quelle che ho scriptato io non sono la fine del mondo.. ho speso la metà del tempo solo su di esse, mi fanno solo bestemmiare..
A chi interessa mostro altri dettagli..
Questa è una prova del BG [ non sono spam! ] non è l'ultima versione.. (alcune immagini credo non si visualizzino, scusate errori ortografici e magari di codifica)...!
*Non fate commenti sulla grafica*

Un saluto dal pazzo trigge.
 
Azz.. forse ho fatto casino con le versioni dei database.. Ora non ho tempo ma domani sistemo!

Allego le screen che ho fatto ora (dato che penso non vi importi degli affaracci miei non ho nemmeno oscurato cartelle o task xD), ricordo che mancano diverse immagini. (non fate caso alle mie HP :p)
 
imho (detto che uno in grafica e' assolutamente incapace) la grafica non e' convincente.. forse sono i colori.. boh :omfg:
 
Grazie Roberto!
Ora sistemo la registrazione e fixo

Chi è interessato me lo faccia sapere, mi servirebbe un programmatore e qualcuno abbastanza capace in grafica (in questo caso basta fare la index tutte le pagine sono incluse, il gioco NON usa alcun tipo di iframe)
 
Mr Trigger ha detto:
Grazie Roberto!
Ora sistemo la registrazione e fixo

Chi è interessato me lo faccia sapere, mi servirebbe un programmatore e qualcuno abbastanza capace in grafica (in questo caso basta fare la index tutte le pagine sono incluse, il gioco NON usa alcun tipo di iframe)

Un programmatore che programmi cosa ?
 
V1R5 ha detto:
Mr Trigger ha detto:
Grazie Roberto!
Ora sistemo la registrazione e fixo

Chi è interessato me lo faccia sapere, mi servirebbe un programmatore e qualcuno abbastanza capace in grafica (in questo caso basta fare la index tutte le pagine sono incluse, il gioco NON usa alcun tipo di iframe)

Un programmatore che programmi cosa ?

Come dicevo prima, che mi aiuti con il sistema di battaglia, poi se vuole anche altro... :)

__
<registrazione Ok>
 
Mr Trigger ha detto:
V1R5 ha detto:
Mr Trigger ha detto:
Grazie Roberto!
Ora sistemo la registrazione e fixo

Chi è interessato me lo faccia sapere, mi servirebbe un programmatore e qualcuno abbastanza capace in grafica (in questo caso basta fare la index tutte le pagine sono incluse, il gioco NON usa alcun tipo di iframe)

Un programmatore che programmi cosa ?

Come dicevo prima, che mi aiuti con il sistema di battaglia, poi se vuole anche altro... :)

__
<registrazione Ok>

In cosa consiste il sistema di battaglia ?
Che qualità deve avere il programmatore ?
 
Trigger, se vuoi posso darti una mano sia con la progettazione che con l'implementazione di parti del back and, _probabilmente_, dato che non ho idea di come il tutto funziona dietro (deduco che i source non li vuoi rilasciare). Quindi prima di tutto se ne dovrebbe parlare non credi?

Oltre a non sapere come funziona dietro, non so neanche che idee hai per come deve funzionare "davanti", dato che non riesco ad andare oltre la decisione di razza e classe.
 
Per i source posso anche condividerli ma in privato..
Cmq ora vi racconto un pò come funziona il tutto...
Chiaramente di contenuti non ce ne sono ancora tanti visto che stò ancora scrivendo la base..
Se avete notato, la pagina rimane sempre a quel indirizzo, non cè uso di iframe e non funziona in ajax (eccetto la chat)...
La pagina index.php include la 'zona' (tipo foresta, villaggio o quel che sia) in cui si trova il personaggio (le informazioni le legge dal database), se è in battaglia non includerà la relativa pagina...
Quando si clicka in un link, si richiama una pagina la quale elabora i dati e con un header ti rispedisce alla index.
In alcuni casi, come la battaglia, quando 'attacchi' (mi sono accorto ora che non funziano >: S mo correggo) la pagina richiamata è la index (?act=1round), in questo caso il server fa un pò di lavoro in più dato che deve rileggere anche dati che non gli servono, però così facendo risparmio tempo e spazio (altrimenti dovrei creare una nuova pagina, ristabilire una connessione, e selezionare tutti i parametri da leggere.. un centinaio di righe..)

La index lavora in questo modo:

Includo il file di config
Includo il file delle funzioni
leggo se cè la sessione aperta (e se sono loggato)
if true {
includo la pagina e il relativo menu che mi legge il database
oppure la battaglia e la visualizzazione di essa
}else mostro il login o home o registrazione quel che sia

Ogni zona è un file separato con inizialmente le informazioni da cui posso raggiungerla, il suo relativo menu e la pagina.
Oltre che alla '$location' ho aggiunto una sub_location che permette di muoversi dentro una zona.. in questo modo potrei anche creare dei dungeon..

La battaglia (versione 3, non online)

PHP:
<?php

require_once("./battle/lib.battle.php");

# Quando entro in battaglia viene salvato un ID incrementale nel player.. esempio: 123 < numero del match


// Nota Bene, questa pagina viene inclusa nella index.php
if ($battle_status==1){ // Mi assicuro di essere in battaglia
    
    # Guardo le azioni che vuole fare il player
   // $azioni=$_GET['act']; # già letto dalla index
    if ($azioni=="1round")$azioni=1;
    //if ($azioni=="5round")$azioni=5;
    if ($azioni=="fuga") casefuga_battle();
   // if ($azioni=="spell") xxxxxxxxxx();
    
    # ### ### ### BATTLE v3 ### ### ###
    # matchid    id univoco
    # turno        turno del match
    # player     String=playername INT=creatura
    # buff        x.y-x.y
    #            x=id spell y=turni rimanenti
    #            . - separatori
    # ### ### ### END     ### ### ### ###
    
    
    // leggo l'ID del match
    $matchid = matchid($name);
    // Leggo ID della creatura sfidante
    $creaturasfidante = leggi_creatura_attaccante($name,$matchid);


    if ($creaturasfidante) { # Questo NON è un pvp...
        //Informazioni sulla creatura sfidante!
        info_creatura_attaccante($creaturasfidante); // questo modifica $guys sul vettore della creatura. (è sempre un INTERO)
        $creep = $creaturasfidante;
    }
    $i=0;

    while ($i < $azioni)
    {        
    
        ##### Seleziono la riga più alta della creatura
        #
        $result = mysql_query("SELECT MAX(turno) FROM ".tabella_battle." WHERE (matchid='".$matchid."' AND player_npc = '".$creaturasfidante."')");
        #
        $ultimo_turno = mysql_result($result,0);    
        # Leggo le stats della creatura
        # con i dati dell'ultimo scontro..
        $result = mysql_query("SELECT * FROM ".tabella_battle." WHERE (matchid='".$matchid."' AND turno = '".$ultimo_turno."' AND player_npc = '".$creaturasfidante."')");
        #
        $guys[$creaturasfidante]['hp'] = mysql_result($result,0,"hp");
        $guys[$creaturasfidante]['mana'] = mysql_result($result,0,"mana");
        $guys[$creaturasfidante]['buff'] = mysql_result($result,0,"buff");
        #####
        
        # IF NO PVP
        $players=2;
        $ultimo_turno++;
        for ($k=1;$k<=$players;$k++){
            # caso di chi attacca.<br>
            # leggi ultimo attaccante per percentuali
            switch($k)
            {
                case 1:
                    $guy=$name;
                    $target=$creaturasfidante;
                    break;
                
                case 2:
                    $guy=$creaturasfidante;
                    $target=$name;
                    break;
            }
            
            
            if (($guys[$name]['hp'] > 0) && ($guys[$creep]['hp'] > 0)){
                
                unset($total_damage);
                
                // Modifico il danno (attacco + cazzi vari tipo aure items..)
                $total_damage += $guys[$guy]['attack'];
                # ...
                #        ...
                
                $guys[$target]['hp'] -= $total_damage;
                
                mysql_query("INSERT INTO ".tabella_battle." 
                (matchid,turno, subturno, player_npc, hp, mana, dannoinferto, buff) VALUES
                ('".$matchid."','".$ultimo_turno."', '$k', '".$guy."', '".$guys[$guy]['hp']."','".$guys[$guy]['mana']."','".$total_damage."','".$guys[$guy]['buff']."')");
            
                if ($target==$name){
                    mysql_query("UPDATE ".tabella_player." SET hp = ".$guys[$target]['hp']." WHERE ". tabella_account ." = '$name'");
                    mysql_query("UPDATE ".tabella_player." SET mana = ".$guys[$target]['mana']." WHERE ". tabella_account ." = '$name'");
                    # Elabora i buffs con relativa longevità
                    mysql_query("UPDATE ".tabella_player." SET buff = ".$guys[$target]['buff']." WHERE ". tabella_account ." = '$name'");
                }
            }
            
            

        }
        $i++;
    } // Fine while

    check_creatura_die();
    
    

}


?>


Codice:
-- ----------------------------
-- Table structure for `battle3`
-- ----------------------------
DROP TABLE IF EXISTS `battle3`;
CREATE TABLE `battle3` (
  `matchid` bigint(11) default NULL,
  `turno` int(11) default NULL,
  `subturno` int(2) default NULL,
  `player_npc` text,
  `hp` double default NULL,
  `mana` double default '0',
  `dannoinferto` double default NULL,
  `buff` text
)


Sò che non è bellissimo e non è nemmeno finito... ma +o- funziona così! Questa dovrebbe essere la base, ma il problema non è tanto scriptare la battle, ma bensì fare in modo che si visualizzino tutti i turni!
Il mio problema, forse, è come strutturare la tabella della battaglia....

@@ Per quanto riguarda razza e classe, è solo una bozza, dovrà essere esteso


@Che qualità deve avere il programmatore??
Io non sono granché.. ho cominciato a scrivere in php 'seriamente' poco prima di questo progetto (per dire.. non occorre essere geni :p)

Questo è il codice di una zona
PHP:
<?php // LE ZONE DA CUI POSSO ARRIVARE
$come_from[-1][1]=true; // Cimitero risorto
$come_from[1][0]=true;

$come_from[3][0]=true;
$come_from[3][1]=true;
$come_from[3][2]=true;
$come_from[3][3]=true;
$come_from[3][4]=true;

$come_from[4]["all"]=true;
$come_from[6]["all"]=true;
$come_from[7][0]=true;
$come_from[9]["all"]=true;
//$come_from[x]=true;

$can_go=0;

if ($display_page==true):
?>
Benvenuto nel villaggio <strong><?php echo $name; ?></strong>!<br>
il tuo ping: <?php ping(server_url, 80, 10); ?>
<p>
<br />

<?php
include "./chat/chat.php";
?> 
  
  
<p>In questo momento sono connessi:
<?php
$result=mysql_query("SELECT * FROM ". tabella_account ." WHERE logged='1'");// Cerco se esiste già l'ID dell'account
$num=mysql_numrows($result); // numero dei risultati    
for ($i=0;$i<$num;$i++){
    $player_name=mysql_result($result,$i,"name");
    echo "<br>• $player_name";
}if (!$i) echo "Nessun player connesso.. Nemmeno tu! Qualcosa non quadra non credi?";

?>
</p>
<?php endif; 
if ($display_menu==true){

$goto_for = array (
$location_name[1]."|La Foresta",
$location_name[7]."|Campo d'allenamento",
$location_name[3]."|La Taverna di Boe",
"bagni|I Bagni Pubblici",
$location_name[6]."|La vecchia Banca",
$location_name[4]."|Help ID",
$location_name[9]."|Pannello Admin"

);

}


?>

[size=large]Ma porca vacca........... Hai ragione non prosegue nella registrazione =.= ora cerco di correggere[/size]
errori dovuti alla diversità della versione del database... compatibile con la versione offline....
Edit: Ok ora [size=large]la creazione del personaggio funziona![/size].. finalmente.. La battaglia ha smesso di andare.. 'da sola' .. non perdo tempo a guardarci tanto è la versione vecchia se volete vedere un esempio è nella screen...

Domande?:D
 
hum? Bè l'ho scritto un pò come un cms, infatti ogni pagina che viene inclusa sfrutta le funzioni del sistema.. Funziona abbastanza dinamicamente..
Cosa altro dovevo fare? Cmq sia l'ho voluto tirare su da 0, l'ho presa come una sfida ;)
 
il consiglio di Bronsa era per ottimizzare.. altrimenti a lungo andare in progetti cosi' grandi senza una solida base si finisce per perdersi
 
Illuminare un pò la mia ignoranza, cosa potrei fare con ciò? (non ne sono ben informato) Se volessi programmare una cosa del genere su cosa dovrei puntare? che strade dovrei seguire?
 
La cosa potrebbe interessare anche me :D!

Non mi sono mai messo seriamente a studiare il PHP, ma avendo una solida base di C, quando l'ho preso in mano qualche tempo fa mi sono "trovato abbastanza" (almeno nella sintassi).

Parto venerdì per una vacanza intensa...se quando torno (il 12) c'è ancora bisogno di una mano io ci sono!

Andy
 
Stato
Discussione chiusa ad ulteriori risposte.