Oppure

Loading
20/04/09 18:06
eddiewrc
Postato originariamente da gio97:

ti risponderei che sei un genio se lo facessi con il supporto a più linguaggi


esatto. se lo fai cosìci giocherei anche io
aaa
20/04/09 18:47
Il Totem
Beh, quando dico che il programma è scritto in vb.net, significa che il supporto è per vb.net, c# e j#. Per java, c, c++ e pascal c'è già...
aaa
20/04/09 18:55
se si usano più linguaggi in un gioco è possibile confrontarli assieme, le loro potenzialità, per vedere come il robot venga meglio in un linguaggio rispetto ad un altro
21/04/09 6:47
the_angel
Grande Totem...

Non vedo l'ora di giocarci!
aaa
21/04/09 19:04
Il Totem
Io ve lo posto anche, tanto è un esperimento scritto in qualche oretta di tempo libero qualche giorno fa (dato che ora studio forse troppo XD). Il Game Engine è a posto, ma senza commenti. La classe Game è invece piena di esperimenti di codice e spazzatura varia XD, compresi alcuni samples di ai (movimento casuale, fuga, attacco). C'è anche l'esempio del codice di un robot "impacchettato" in una dll ed estratto dal programma. Nessuno sfondo, e le immagini... va beh, lasciamo stare... erano alcune icone che avevo sul computer.
aaa
02/05/09 14:07
Il Totem
Ho rifinito un po' l'Engine anche se rimane in uno stato in cui potrebbe essere migliorato molto. Ecco una breve descrizione:

La classe principale è Robot. Essa espone un bel po' di proprietà dal nome molto intuitivo (e che quindi non sto qui a spiegare). Le più importanti sono:
- Health : determina l'energia del robot; può variare da 0 a 100. Se il robot viene colpito da un proiettile o da una bomba, la sua energia diminuisce;
- Fuel : determina il carburante del robot; può variare da 0 a 100. Un robot usa carburante per muoversi e per attivare lo scudo difensivo;
- Weight : determina il peso del robot; può variare da 1 a 10. Un robot molto pesante subisce meno danni, ma è meno veloce. Uno molto leggero subisce più danni ma è più veloce;
- CanFire : è True se si può sparare;
- CanPlaceBomb : è True se si può piazzare una bomba;
- IsMoving : è True se ci si sta movendo;
- IsShielded : è True se lo scudo è attivato;
- BulletCount : numero delle munizioni residue per i proiettili;
- BombCount : munizioni disponibili per le bombe.
Gli eventi importanti sono Death, Hit e Updating. Del primo potete anche dimenticarvi, tanto se il robot "muore" non potete fare molto XD Hit viene generato quando il robot viene colpito da un proiettile o da una bomba: il primo parametro rappresenta il campo da gioco, da cui potete accedere alla informazioni sugli altri robot; il secondo parametro è un riferimento diretto al robot che vi ha colpito; il terzo parametro vale "bullet" se il robot è stato colpito da un proiettile, o "bomb" se da una bomba. L'evento Updating ha un solo parametro che rappresenta il campo di battaglia.

Nello scrivere il vostro bot, dovete creare una classe che erediti da Robot e implementare un codice per l'evento Updating, che in sostanza costituisce tutta l'intelligenza (o la stupidità;) artificiale del robot. Questa classe deve essere salvata in un progetto a parte, e compilata come libreria di classi, producendo in output dalla compilazione una dll. I metodi che un robot ha a disposizione sono:
- Move(Position, Speed) : si muove verso la posizione Position a velocità Speed. Un valore normale per Speed è 1, e non ci sono limitazioni numeriche (tuttavia consiglio di non andare oltre 20). Il robot non parte subito a velocità massima, ma accelera gradualmente. L'accelerazione è influenzata dal peso (proprietà Weight) del robot. Il peso è il secondo parametro del costruttore e non può andare oltre 10: non ho messo dei controlli, ma un valore troppo elevato produce errori nelle altre formule;
- StopMoving() : si ferma, se è in movimento. La fermata è istantea (chissà perchè...);
- Fire(Position) : spara un proiettile verso Position. I proiettili si muovono sempre alla stessa velocità (3), e ogni robot dispone di un massimo di 50 munizioni. Si può sparare solo a intervalli di 1 secondo (CanFire = True quando si può sparare). Quando un robot viene colpito da un proiettile, devia leggermente la sua traiettoria;
- Fire(Angle) : come sopra, ma l'argomento da specificare è l'inclinazione del tiro, in radianti (0 equivale a destra).
- PlaceBomb() : piazza una bomba nella posizione in cui si trova il robot. La bomba esplode se viene toccata da un robot avversario e produce il 240% dei danni di un proiettile. Se un robot tocca la bomba, viene scaraventato nella direzione opposta, con forza inversamente proporzionale alla distanza dalla bomba. Il numero massimo di munizioni bomba è 3, e se ne può piazzare una ogni 10 secondi;
- Shield(Time) : attiva uno scudo protettivo per Time secondi. Lo scudo spreca carburante, e ne spreca di più se Time assume un valore più alto. Un robot protetto da scudo è colorizzato in blu e non riceve danni da proiettili, mentre riceve comunque i danni da bomba. Tutto il carburante richiesto per lo scudo viene immediatamente smaltito all'attivazione;
- LoadSprite(File) : carica l'immagine del bot da un file. Potete richiamare questo metodo solo nel costruttore;
- SetName(Name) : imposta il nome del bot.

Esempio di bot:
Imports Microsoft.Xna.Framework
Imports Microsoft.Xna.Framework.Graphics
Imports dotNet_Robots.GameEngine

Public Class Runner
    Inherits Robot

    Private Sub UpdateRobot(ByVal Field As ReadOnlyBattleField) Handles MyBase.Updating
        For Each Rob As Robot In Field.Robots
            If Rob Is Me Then
                Continue For
            End If
            For Each B As Bullet In Rob.FiredBullets
                If Vector2.Distance(Me.Position, B.Position) <= 15 Then
                    Me.Shield(3)
                End If
            Next
        Next
        If Me.IsMoving = False Then
            Dim NewPoint As Vector2
            Dim Rnd As New Random()
            NewPoint = New Vector2(Rnd.Next(Me.Device.Viewport.Width), Rnd.Next(Me.Device.Viewport.Height))
            Me.Move(NewPoint, 1)
        End If
    End Sub

    Public Sub New(ByVal Device As GraphicsDevice)
        MyBase.New(Device, 1)
        Me.LoadSprite(My.Application.Info.DirectoryPath & "\evolution.png")
        Me.SetName("Runner")
    End Sub
End Class

Una volta compilato come *.dll, salvatelo nella cartella dell'eseguibile di dotNet Robots e il programma lo caricherà in automatico. Non più di 4 robots possono trovarsi contemporaneamente sul ring. Un robot che genera eccezioni nell'evento Updating viene squalificato. Un robot che esaurisce la propria energia (barra arancio) viene dichiarato sconfitto. Un robot che esce dai confini della finestra viene comunque dichiarato sconfitto. Vince il bot che rimane per ultimo sullo schermo.
aaa
03/05/09 10:39
Anonymous
l'ho scaricato ma premetto che non ho il compilatore per poter compilare i sorgenti, ho provato a lanciare direttamente gli eseguibili (li ho provati tutti quanti) ma mi compare ogni volta la finestra di errore per la segnalazione a microsoft, e questo accade spesso (se non sempre) sui programmi fatti in vb.net.... come mai??? :-|
Ultima modifica effettuata da Anonymous 03/05/09 10:41
aaa
03/05/09 10:42
lorenzo
se ho visto bene il gioco necessita di xna per funzionare, se non lo hai installato non ti parte
aaa