2009-02-24 17 views
5

Stavo leggendo that question e ricordo dello Wikipedia list of algorithms. So che Wikipedia ha anche una lista di giochi Open Source, ma quello che voglio è un link per semplici algoritmi di gioco, anche se scritto in pseudocodice.Link per semplici algoritmi di gioco

come "semplici" giochi, voglio dire giochi come Sudoku, Bejeweled, Solitaire, Minesweeper, Labyrinth, serpenti, Gorilla, Scacchi, Tetris, ecc

Bonus per # codice sorgente C :)

+0

Stai parlando di algoritmi di intelligenza artificiale per giocare a questi giochi? –

+0

Questo è molto ampio. Prendi in considerazione la possibilità di concentrarti sugli algoritmi per un gioco per domanda. –

risposta

7

La maggior parte degli algoritmi di gioco sono semplicemente algoritmi di ricerca. Infatti, si potrebbe dire che AI ​​è la ricerca.

Per Sudoku, dancing links è un buon algoritmo. In alternativa, è risolto very concisely in Prolog.

Per gli scacchi, iniziare con Minimax, quindi provare Minimax with alpha-beta pruning.

Minesweeper is NP-complete. Non sono noti algoritmi veloci e affidabili.

+2

Il dragamine generalizzato può essere NP-completo, ma lo è anche il Sudoku [Yato e Seta, 2002] e gli scacchi sono molto più complessi (EXPTIME-complete). In pratica, la completezza di NP di Sudoku non significa che non ci siano algoritmi affidabili e veloci per i problemi che le persone in realtà vogliono risolvere. –

+0

"In effetti, si potrebbe dire che l'intelligenza artificiale è la ricerca" Non so cosa si suppone significhi. Penso che la dichiarazione sia sbagliata. – Niyaz

+0

@Gareth: buoni punti. A differenza di Sudoku e Chess, non ho provato a scrivere un programma per giocare a Minesweeper. –

0

Event pensavo che i giochi che hai menzionato sopra siano semplici, non penso che l'algoritmo per quei giochi non lo sia. (Davvero senza offesa :))

1

Non è possibile ottenere molto più semplice di Conway's Game of Life. Ci sono solo quattro regole:

  1. Qualsiasi cellula viva con meno di due vicini di casa muore, come se fosse necessario a causa della sottopopolazione.
  2. Qualsiasi cella attiva con più di tre vicini di casa muore, come per sovraffollamento.
  3. Qualsiasi cellula viva con due o tre vite vive vicine, invariate, alla generazione successiva.
  4. Qualsiasi cella morta con esattamente tre vicini di casa diventa una cella attiva.

Può essere facilmente implementato in qualsiasi lingua, richiede zero players e produce alcuni modelli interessanti.

+0

Davvero interessante! Grazie! –

0

Ecco l'algoritmo per la maggior parte dei giochi:

volta che il gioco viene inizializzato ...

  1. accettare l'input dell'utente
  2. Aggiornamento stato del gioco in base all'input dell'utente
  3. fornire un feedback visivo (aggiornare lo schermo)
  4. Verificare le modifiche del punteggio e aggiornare se necessario
  5. Controllare per "gioco o ver "e vai al passaggio 1 se il gioco non è ancora finito
  6. Um ... Questo è tutto.

Spero che questo aiuti.

2

Come gli altri hanno più o meno accennato, l'idea di un "algoritmo" per un gioco non si adatta perfettamente, tranne che per qualcosa di banale e non particolarmente simile al gioco come Life.Un algoritmo è un modo per elaborare un insieme di dati in un modo noto per produrre un output specifico di tali dati, in genere entro un certo limite di tempo/complessità. I giochi non si adattano a questi semplici criteri: sono più simili alle simulazioni in cui cambiano ripetutamente lo stato degli oggetti in base all'input fino a quando non vengono raggiunte le condizioni specifiche del gioco. Come tali, quasi tutti seguono l'input-> update-> display loop con la logica di gioco su misura nella fase di aggiornamento. Le singole parti del gioco saranno indubbiamente implementate in termini di algoritmi semplici e ben noti, ma il programma di gioco stesso è in realtà solo il ciclo di simulazione e la logica al suo interno.

1

Che dire degli algoritmi, non per giocare ai giochi, ma per compiti relativamente complessi al loro interno. Ad esempio, in Bejeweled hai una griglia 8x8 piena di gioielli in uno dei 7 colori. In qualsiasi momento, ci sono circa 8 gioielli di ogni colore. Dopo che un utente sposta un gioiello per creare una partita, almeno tre gioielli (tutti dello stesso colore) scompariranno dallo schermo e tre nuovi cadranno sullo schermo. Come fai ad assicurarti che ci sia sempre almeno una partita disponibile sullo schermo? Come ti assicuri che le partite possano apparire sullo schermo, e non solo in alto?

+0

Ho risolto questo problema per lo sviluppo del mio gioco –