2008-10-14 5 views
6

Ho pensato di iniziare un progetto parallelo a casa per esercitare un po 'il mio cervello. Reversi sembra un semplice gioco, in cui la mobilità ha un profondo effetto sul gioco. È almeno un passo avanti rispetto al tic tac toe. Questo sarebbe un giocatore singolo contro un'IA di qualche tipo.Come procederesti nell'implementazione del gioco reversi? (othello)

Sto pensando di provare questo in C++ su un PC.

Quali problemi sono probabile incontrare?

Quale libreria grafica consiglieresti?

Quali domande non sono abbastanza intelligente da chiedermi?

+1

Stai parlando di implementare una strategia per i reversi o semplicemente lasciare giocare due giocatori sul computer? – Barth

+0

una strategia. buona domanda. – EvilTeach

risposta

2

In generale, i problemi a cui finirai per correre dipenderanno da te e dai tuoi approcci. L'amico tende a dire che il complesso è semplice da una prospettiva diversa.

La scelta della libreria grafica dipende dal tipo di gioco che si intende scrivere? OpenGL è una scelta comune in questo tipo di progetti, ma potresti anche usare qualche libreria della GUI o semplicemente usare solo le librerie di Windows o di xorg. Se hai intenzione di fare fantasia, basta usare OpenGL.

domande si dovrebbe chiedersi:

è C++ scelta sensata per questo progetto? Considera anche C e/o python.La mia risposta a questo sarebbe che se vuoi solo scrivere reversi, vai python. Ma se vuoi imparare un linguaggio di basso livello, prima fai C. Il C++ è un'estensione da a C, quindi c'è altro da imparare lì che non c'è in C. E per il mio giudice, più che devi imparare su C++ non vale la pena.

Come si utilizza la libreria grafica? Se hai intenzione di fare effetti fantasiosi, vai al grafico della scena. Invece puoi semplicemente rendere la griglia di reversi con i pulsanti su di essa.

Come si dovrebbe implementare l'interfaccia utente, si dovrebbero utilizzare i concetti dell'interfaccia utente comuni? I concetti usuali dell'interfaccia utente (finestre, cornici, pulsanti, barre dei menu, finestre di dialogo) non sono così buoni come le persone pensano di essere, c'è molto lavoro per implementarli correttamente. Applica il grafico della scena per interpretare l'input e provare diversi modi intelligenti per controllare il gioco. Evita i menu introduttivi (sono lavori stupidi e inutili), usa gli argomenti della riga di comando per la maggior parte della configurazione.

ho ancora darvi alcune idee per iniziare:

tavolo Othello è 8x8, 64 celle in generale. È possibile assegnare un byte per ogni cella, che lo rende 64 byte per ogni stato della scheda. Sono 8 lunghe intere, non proprio per niente! È possibile memorizzare l'intero avanzamento del gioco e il giocatore non può nemmeno notarlo. Pertanto si consiglia di implementare la scheda othello come una struttura immutabile che si copia sempre quando si modifica uno stato. Ti aiuterà anche in seguito con la tua intelligenza artificiale e implementando una funzionalità di 'annullamento'.

Poiché un byte può memorizzare più informazioni di appena tre stati (VUOTO, NERO, BIANCO), suggerisco che fornirai anche due stati aggiuntivi (BLACK_ALLOWED, WHITE_ALLOWED, BOTH_ALLOWED). È possibile calcolare questi valori mentre si copia il nuovo stato.

Algoritmo per verificare dove è possibile inserire un blocco, potrebbe passare la scheda uno alla volta, quindi tracciare da celle vuote in ogni direzione per i regex-pattern: B + W => W ^, W + B => B^In questo modo puoi incapsulare le regole del gioco all'interno di una semplice interfaccia che si prende cura di tutto.

+1

Cattivo consiglio. Il C++ non è solo un'estensione, è un approccio diverso. L'unica cosa che condividono veramente è una certa sintassi, non più delle condivisioni C++ con javascript. C + + ti darebbe un sacco di vantaggi, come una migliore gestione della memoria (anche con boost), modelli, oggetti e così via che ti aiuteranno. È più difficile tenere traccia dello stato di un programma senza un aiuto, perché non puoi avere dati indipendenti, è globale o in pila in C. –

3

Problemi ...

Beh, tanto per essere sicuro quando si scrive la parte strategica del gioco, non fare semplicemente la mossa che ti dà il maggior numero di pezzi. Devi anche dare peso alla posizione della tavola. Ad esempio, data l'opportunità di piazzare un pezzo in un angolo del tavolo, dovrebbe avere la priorità su qualsiasi altra mossa (oltre a vincere il gioco) in quanto quel pezzo non può mai essere ribaltato. E posizionare un pezzo adiacente ad un angolo è solo la mossa peggiore che si possa mai fare (se lo spazio angolare è aperto).

Spero che questo aiuti!

2

Mentre i ragazzi stavano suggerendo la mia idea di dirvi per pensare prima per gli algoritmi e la logica di gioco. la prossima risposta per me è stata la libreria grafica, dipende dalla piattaforma di destinazione, dal linguaggio di programmazione, dal framework ecc. Ma come suggerisco è usare C# con la libreria grafica 2D Cairo che puoi ottenere usando questo framework Mono (che poi puoi scegliere come target tutti e tre principali sistemi operativi per il tuo gioco per funzionare) -> www.mono-project.org. Nel frattempo ho trovato questo penso che e questo tipo di risorsa ti aiuterà: http://home.datacomm.ch/t_wolf/tw/misc/reversi/html/index.html. Ma se lo finisci, puoi provare a implementare il Sudoku.

2

Si vorrà esaminare in minimax con potatura alfa-beta se si scrive un'AI contro cui giocare. Il tuo motore di ricerca preferito avrà molto da dire sull'argomento.

2

Dopo esserti preso gioco della logica di gioco, leggi il capitolo 18 del libro eccezionale di Peter Norvig Paradigms of AI Programming. (Codice sorgente here.) Ha un programma piuttosto breve ed estremamente leggibile che può calciare praticamente qualsiasi calcio umano; dovresti imparare molto confrontando la tua soluzione con essa.

0

Reversi dovrebbe essere un gioco molto semplice da implementare. È perfetto per imparare alcuni algoritmi di base della teoria dei giochi (in particolare min-max) durante l'implementazione dell'IA.

Una cosa da notare sull'IA è che è perfettamente possibile creare un'IA perfetta per Reversi (una che vince sempre indipendentemente dalle mosse dell'avversario). Quindi, dal lato della strategia, se la tua IA perde, hai ancora del lavoro da fare :)

+0

Non sono sicuro che sia completamente vero se l'avversario è anche un'IA . Wikipedia dice che il gioco perfetto con questo gioco si crede che finisca per pareggiare. – Cheery

+0

Non ricordo esattamente, ma mi sembra che con due giocatori di IA, uno dei colori vince sempre (non so se è bianco o nero), esattamente di un punto. –

+0

Non è vero. Reversi è irrisolto. –

0

Ho scritto un gioco di reversi molti anni fa, quando ero ancora a scuola. La sua strategia era molto semplice, si limitava al numero massimo di pezzi, ma era ponderata, quindi preferiva i bordi e in particolare gli angoli e non amava i quadrati che rischiavano di dare via gli angoli.

Questo ha funzionato abbastanza bene contro le persone che non avevano ancora lavorato a quello che stava facendo, ma una volta avuta era molto facile usare la sua strategia contro di essa. Non sono orgoglioso di dire, tuttavia, che mi ha battuto le prime volte anche se l'avevo scritto!

Un'IA corretta con alcune mosse di lookahead è molto più complicata. Dovrebbe essere un problema interessante, ma al tempo ero più interessato all'interfaccia utente.

+0

La massimizzazione porta direttamente a una perdita anticipata. – EvilTeach

1

Ci sono tonnellate di librerie là fuori, ma per quanto posso pensare che il tuo gioco abbia bisogno di librerie di eventi e di grafica ... e una libreria di suoni per più divertimento! Allegro 5 è la scelta migliore ... È una libreria Tutto in uno. http://liballeg.org/ sebbene sia scritto in linguaggio C è possibile creare programmi orientati agli oggetti.

e un tutorial per questo ...

http://fixbyproximity.com/2d-game-development-course/

oppure è possibile utilizzare le API di basso livello come .. OpenGL per la grafica. OpenAL per il suono. glfw per eventi.

ma OpenGL è un grosso problema perché devi creare il tuo gestore di fogli sprite e tutta quella roba 2d.

Vai con allegro ... Completa il gioco e poi vai per OpenGL!