Pagina 2 di 2 PrimoPrimo 12
Visualizzazione risultati 31 fino 54 di 54

Discussione: Progettazione scacchi

  1. #31
    Guest

    Predefinito

    Provo anche io, anche se le precedenti soluzioni non sono male.

    Innanzitutto va creata la scacchiera, ad ogni quadrato verrà assegnato un id (per javascript).

    Poi verranno posizionati i pezzi nella scacchiera, ogni volta che se ne selezionerà uno s'illumineranno i quadrati dove è possibile posizionare tale pezzo.
    Quando il pezzo si sposta ci saranno diversi casi: poter mangiare, non poter mangiare, incorrere in uno scacco matto ecc..

    Tutto questo va tradotto in codice, sicuramente l'interazione client-server andrà fatta come si deve.

    Quindi per prima cosa, dichiarare l'array della scacchiera e identificare in modo univoco ogni quadrato (con id e coordinate).
    Inoltre avere la possibilità di gestire l'array della scacchiera tramite id e coordinate.

    Dobbiamo sapere giustamente, su ogni quadrato qual'è lo stato (se ci sono già scacchi ecc..).
    Inoltre ogni pezzo della scacchiera quando chiamato (tramite l'evento onclick) comunicherà la sua posizione e di conseguenza riceverà le coordinate ed id dei quadrati dove può posizionarsi.

    Durante il posizionamento incorrerà nei casi, di poter mangiare, non poter mangiare, scacco matto ecc..

    L'array della scacchiera sarà composto da ogni singolo quadrato che a sua volta avrà coordinate ed id, e che a sua volta conterrà lo stato (con pezzo o senza pezzo).
    Per pezzo s'intende un singolo scacco.
    Ogni singolo pezzo sarà in grado di muoversi secondo le regole degli scacchi.
    Se io chiamo l'alfiere la funzione dovrà calcolarmi i quadrati dove può spostarsi.
    Poi i casi in cui s'incorre sono robe semplici.

    Adesso fatti il codice :D

  2. #32
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Citazione Originalmente inviato da svacant Visualizza messaggio
    Quando il pezzo si sposta ci saranno diversi casi: poter mangiare, non poter mangiare, incorrere in uno scacco matto ecc..
    Secondo me è più semplice se si pensa a modellare il gioco considerando i pezzi come oggetti passivi

    Un pezzo deve mangiare se si sposta in una casella occupata
    Cose come lo scacco matto, sotto scacco e le mosse possibili sono cose che possono essere calcolate in qualsiasi momento per ogni singolo stato della scacchiera

    Mi spiego meglio: non serve ricordare le mosse precedenti (tranne che per decidere se è possibile fare la rara mossa "en passant") ma si può ragionare da zero dopo ogni nuova mossa

  3. #33
    Guest

    Predefinito

    Citazione Originalmente inviato da AlexKidd Visualizza messaggio
    Secondo me è più semplice se si pensa a modellare il gioco considerando i pezzi come oggetti passivi

    Un pezzo deve mangiare se si sposta in una casella occupata
    Cose come lo scacco matto, sotto scacco e le mosse possibili sono cose che possono essere calcolate in qualsiasi momento per ogni singolo stato della scacchiera

    Mi spiego meglio: non serve ricordare le mosse precedenti (tranne che per decidere se è possibile fare la rara mossa "en passant") ma si può ragionare da zero dopo ogni nuova mossa
    Io penso che sia meglio selezionare il pezzo (con evento js), ricevere (in return) le caselle dove è possibile spostarsi (interessante anche per un highlight dei quadrati con js) ed una volta scelta la casella ricadere sui casi (sono svariati).

    L'array della scacchiera verrà alterato ad ogni nuova mossa, il precedente stato sarà salvato (magari per rivedere le mosse).

    Il gioco scacchi non sono semplici mosse, ci sono diversi casi che secondo me sarebbe meglio trattare di "petto".
    La roccata ad esempio, la escludi? :D

    Per capire meglio un po' tutti, cosa cambierebbe se trattassimo i pezzi passivamente?

  4. #34
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    La differenza non è visiva ma a livello di programmazione

    Si tratta di decidere a chi dare la possibilità di generare eventi, ma forse ieri notte avevo inteso male il tuo discorso e credevo che, nella tua idea, ogni pezzo fosse in grado di eseguire delle operazioni autonomamente quando viene selezionato o mosso. Secondo me certe porzioni di codice andrebbero spostate su un oggetto più globale

    Tutto qui

  5. #35
    Guest

    Predefinito

    Ogni tipologia di scacco avrà un nome in codice ad es. p (pedone).
    Quando l'utente genera l'evento viene chiamata la funzione per il calcolo dei quadrati disponibili.
    Quindi attenderò che l'utente posizioni lo scacco dove desidera per poi ricadere nei casi semplici o particolari.
    Una volta concluso il tutto il mio array sarà modificato.

    Esempio, sulle coordinate a 2 ho un pedone.

    [a_2] => 'p'

    Il software tramite formula matematica calcolerà quando selezionato i quadrati dove può spostarsi.

    L'utente seleziona il pedone in a 2:

    Quindi sappiamo che il pedone può spostarsi in avanti (se non vi è nessuno scacco) quindi in a 1 e se in b 1 ho qualcosa può mangiare.

    L'utente muove su a 1 visto che è disponibile:

    Potrebbe accadere qualche caso particolare, ma concludendo il mio array viene modificato e si prosegue con l'altro utente.

    Serve un matematico che ti dia le formule per far muovere il cavallo ad L o l'alfiere in obliquo.

    Poi all'ultimo arriva il programmatore.

  6. #36
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito

    Il matematico sono io
    Il programmatore, per cause di forza maggiore, pure.

  7. #37
    Guest

    Predefinito

    Citazione Originalmente inviato da tryhere Visualizza messaggio
    Il matematico sono io
    Il programmatore, per cause di forza maggiore, pure.
    Bravo, se ho l'alfiere in c 6, mi dai la formula che calcola i quadrati dove può muoversi?

  8. #38
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    State confondendo la grafica con la logica.
    La grafica si fa in un secondo momento.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  9. #39
    Guest

    Predefinito

    Citazione Originalmente inviato da svacant Visualizza messaggio
    Bravo, se ho l'alfiere in c 6, mi dai la formula che calcola i quadrati dove può muoversi?
    Ma a cosa serve una formula? Tu sposti l'alfiere e il programma controlla se è possibile quella mossa. Non è difficile.
    Codice PHP:
    //alfiere
    function move($x, $y) {
    if(
    abs($this->x - $x) == abs($this->y - $y)) //ok (aggiorni le posizioni)
    return true;
    else
    return
    false;
    }
    Questo perchè l'alfiere si muove in obbliquo, quindi qualsiasi sia la mossa che fa da lo stesso incremento (in valore assoluto) su x e y.

    La torre può avere un incremento illimitato su x o y, a patto che una delle due coordinate sia ferma. Il cavallo può spostarsi ad L, di conseguenza la sua mossa, può avere un incremento due su x e uno su y oppure due su y e uno su x (sempre in valore assoluto, prendendo come riferimento la posizione di partenza).

    Il re può spostarsi dappertutto, a patto che faccia una sola mossa. Quindi la differenza tra la posizione attuale e quella nella quale spostarsi deve dare 1 in valore assoluto (o la x o la y o entrambe).

    La regina è l'unione della torre + l'alfiere. Può spostarsi dappertutto. Il pedone può andare solo in avanti o in obbliquo per mangiare. La prima mossa può essere di due posizioni in avanti, le altre solo di una (incremento 2 su y e 0 su x la prima volta, e 1 su y e 0 su x le altre. Per mangiare incremento 1 sia su x che y).

    Se la mossa è possibile aggiorni le posizioni e ricarichi la scacchiera, altrimenti no.

  10. #40
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Devi anche controllare che sulla strada non ci sia nessuno, solo il cavallo può saltare.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  11. #41
    Guest

    Predefinito

    Ovviamente prima la scacchiera controlla se la posizione di arrivo non sia già occupata.

    Per quello che dici tu, basta un for per ogni pezzo con incremento unitario di una o entrambe le coordinate (a seconda se si tratta della torre o dell'alfiere, il cavallo salta, il pedone si muove di uno, il re pure, la regiona è torre + alfiere). Quindi basta poco per fare quel controllo. Per il pedone devi farlo solo se si tratta della prima mossa, visto che può spostarsi di due. Quindi se l'incremento iniziale è due controlli se la cella precedente è occupata, se lo è lo lasci lì. altrimenti lo sposti.

  12. #42
    Guest

    Predefinito

    Citazione Originalmente inviato da binarysun Visualizza messaggio
    State confondendo la grafica con la logica.
    La grafica si fa in un secondo momento.
    Se ti riferisci a me non parlo di grafica, cerco di accompagnare la logica per renderla più leggibile a tutti.

    Io direi invece che si sta confondendo la progettazione con il resto.
    Io ho spiegato il mio progetto in modo più semplice possibile.

    Il resto tocca ad altre figure, ma qui la richiesta mi sembra chiara "progettazione".

    Lo so siamo abituati a fare tutto noi, però il progettista si ferma al progetto (scusate il gioco di parole).

    @Stoner: La matematica c'entra sempre, solo che il programmatore usa funzioni che fanno calcoli matematici tramite formule.

    Secondo me è inutile incollare pezzi di codice, bisogna mettere su una base che sia in conformità col progetto scelto.

  13. #43
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Mi riferivo ai primi post in cui parlavi della grafica.
    Cmq vi state incaponendo su un problema di basso livello che per ora non dovreste porvi, dato che le problematiche sono ancora strutturali.
    Ovviamente ci sono molte strade percorribili ed ognuno sceglie la sua.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  14. #44
    Guest

    Predefinito

    Citazione Originalmente inviato da binarysun Visualizza messaggio
    Mi riferivo ai primi post in cui parlavi della grafica.
    Cmq vi state incaponendo su un problema di basso livello che per ora non dovreste porvi, dato che le problematiche sono ancora strutturali.
    Ovviamente ci sono molte strade percorribili ed ognuno sceglie la sua.
    Va be non proprio grafica, tanto per capire meglio un po' tutti.
    Se proprio ci si tiene tanto, bisogna realizzare il tutto e poi man mano vedere i problemi.
    Così su due piedi puoi stilare un progetto non dettagliato.

  15. #45
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito

    Svacant, non avevo chiesto il codice, avevo chiesto come si poteva impostare. Quando mi è stato detto ho cominciato a lavorarci.
    Comunque le caselle su cui si può muovere l'alfiere che si trova in (x0,y0) sono quelle tali che abs(x0-x1)==abs(y0-y1)&&(x0!=x1)

    EDIT: ovviamente quello che ho scritto sopra è l'algoritmo per trovare le potenziali mosse, poi bisogna verificare che tutte le caselle su cui il pezzo passa devono essere libere...
    Ultima modifica di tryhere : 19-08-2009 alle ore 14.14.29

  16. #46
    Guest

    Predefinito

    comuque dai un occhiata a QUESTO e fatto in javascript non ti so dire se è più facile...

  17. #47
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Oggi e ieri avendo un po di tempo mi sono messo a fare lo script

    http://binarysun.net/projects/scacchi/view.php

    Non guardate la grafica, l'ho fatta velocemente, niente ajax.
    E' abbastanza lento dato che non ha mai fatto un sistema per salvare i dati quindi serializzo ogni volta la classe al posto di salvare le informazioni, ma era la cosa più veloce.

    Fate qualche prova e ditemi se vi da errori strani(indicandomi anche la partita).

    Il codice lo mostrerò se altri faranno un programma di gioco scacchi mostrando il codice, altrimenti nessuno si sbatte più.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  18. #48
    Guest

    Predefinito

    la grafica è buona!...l'unica cosa che non mi piace e il fatto che si deve scrivere...prova a usare un po di javascript, drag e drop...

  19. #49
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Ma a me non interessa la grafica, mi interess solo che funzioni correttamente il gioco.
    la grafica la puoi modificare come vuoi.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  20. #50
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito

    Ciao!
    Intanto complimenti per il lavoro, hai fatto in due giorni molto più di quello che io ho fatto in due settimane.
    Comunque da quanto mi risulta non hai gestito arrocco ed enPassant.
    Come hai gestito lo scacco matto?
    Complimenti ancora!

  21. #51
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Arrocco no(mi sono dimenticato), ma enpassant dovrebbe essere gestito(mai provato effettivamente).
    Per le regole mi sono basato su quelle di wikipedia.

    Lo scacco l'ho gestito in questo modo.
    Semplicemente dopo ogni mossa ricalcolo per tutti i pezzi dell'altro colore se possono mangiare il mio re, se si, faccio l'undo della mia mossa e sparo fuori un bel "sei sotto scacco".
    Lo scacco matto lo potrei gestire, ricalcolando se in scacco le mosse possibili del re, ma non l'ho fatto, lo lascio all'utente.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  22. #52
    Guest

    Predefinito

    il progetto è veramente interessante.
    Ma si può giocare solo da soli o in due sullo stesso pc?

  23. #53
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Di Inteligenza artificale non so nulla, nemmeno da dove cominciare purtroppo quindi solo partite a due.

    Cmq si può giocare in due anche via email, basta salvare l'url e inviarla all'amico.
    Ma non c'è nessun blocco dell'utenza o roba del genere, come scrito sopra mi interessava solo il "motore".
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  24. #54
    Guest

    Predefinito

    Sarebbe bello ora metterlo in un sito dedicato e mettere le liste delle partite in corse e la possibilità di entrarci...

Pagina 2 di 2 PrimoPrimo 12

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •