Log in

View Full Version : Hardcore Programming



bondehagen
09-03-2012, 14:27
Her er en liten teaser for Hardcore Programming, så kan dere jo diskutere hva dere tror det blir :)

"Bumper cars in space"

EDIT:
The compo case (http://www.gathering.org/tg12/en/creative/competitions/hardcore-programming-competition/hardcore-programming-compo-case/) is released. This thread will now continue as support thread for the assignment.

etse
09-03-2012, 14:57
Ser for meg at man blir gitt et brett (i 2D) hvor 2 eller flere spillere spiller mot hverandre. Hvor hver person har et eget romskip.
Målet i spillet er å overleve lengst mulig, samtidig som man prøver å "drepe motstanderene".
Å drepe mostanderene i dette spillet betyr å dytte dem utenfor brettet. (eller et markerts område).

grimjoey
09-03-2012, 15:07
Det kan hende at "...in space" betyr at det vil finnes planeter/sorte hull som man må unngå/dytte motstanderen mot.

Fiol
12-03-2012, 14:44
Jeg tenker på spillet "Cows in Space" til iPhone med en gang. Her er det "magnetiske" felter som operer litt på linje med sorte hull etc.
Utover det virker et som et spennende tema til compoen!

oklien
12-03-2012, 22:46
Når blir spillet/mer informasjon sluppet? Er det programmert i noe annet enn c# i år (java, c)? :) Vil gjerne få kjørt det under linux, da man ikke eier en window lisens. :)

Duckers
13-03-2012, 01:53
Når blir spillet/mer informasjon sluppet? Er det programmert i noe annet enn c# i år (java, c)? :) Vil gjerne få kjørt det under linux, da man ikke eier en window lisens. :)

Vi har ikke satt noen eksakt dato enda (da slikt ofte blir famous last words), men det vil skje i løpet av 1-2 uker.

Simulatoren vi lager blir skrevet i C#, men om man er litt hardcore klarer man å få den til å kjøre i Mono eller lager sin egen simulator basert på oppgavespeccen :)

petterroea
13-03-2012, 08:24
Vi har ikke satt noen eksakt dato enda (da slikt ofte blir famous last words), men det vil skje i løpet av 1-2 uker.

Simulatoren vi lager blir skrevet i C#, men om man er litt hardcore klarer man å få den til å kjøre i Mono eller lager sin egen simulator basert på oppgavespeccen :)

Vil det være starterkitter for å komme seg i gang så fort som mulig, sånn som tidligere år? Kommer det til å være en for Java?

oklien
13-03-2012, 22:53
Simulatoren vi lager blir skrevet i C#, men om man er litt hardcore klarer man å få den til å kjøre i Mono eller lager sin egen simulator basert på oppgavespeccen :)

Jeg måtte lage min egen simulator i fjor, da den ikke kjørte i mono. Tester dere årets i mono? Hvis ikke, er det mulighet til å få tilgang til oppgavespecen før slipp, slik man kan starte å utvikle spillet?

Duckers
14-03-2012, 01:31
Jeg måtte lage min egen simulator i fjor, da den ikke kjørte i mono. Tester dere årets i mono? Hvis ikke, er det mulighet til å få tilgang til oppgavespecen før slipp, slik man kan starte å utvikle spillet?

Beklager, vi kommer nok ikke til å teste i mono og det er ikke mulig å få speccen før slipp (da de utvikles veldig parallelt).

Kan røpe at i år kommer visualiseringen til å gjøres med Windows Forms i stedet for WPF, noe som øker sjansen for at det kjører i mono (og kanskje Wine?) uten problemer.

petterroea
15-03-2012, 09:03
Jeg tror at i års bumpercars blir spennende. Men hvis det er om å gjøre å bumpe mest mulig ganger, blir det litt stress. Må lage en algoritme som liker å stalke fienden. Woo~~

grimjoey
15-03-2012, 10:01
Jeg tror at i års bumpercars blir spennende. Men hvis det er om å gjøre å bumpe mest mulig ganger, blir det litt stress. Må lage en algoritme som liker å stalke fienden. Woo~~

Da lurer jeg i så fall på hvordan spillmotoren avgjør hvem som bumper hvem i et sammenstøt. Rent teknisk kunne det være den med størst hastighetsvektor komponent i retning treffpunkt som bumpet, men konseptuelt virker det som det gir lite mening. Mulig det kan være noe "destruction derby" aktig ved at man har svake og sterke punkter på romskipet. For eksempel er fronten beskyttet så man kan bumpe andre med fronten uten å ta skade, men det er om å gjøre å treffe motstanderen i siden eller bak for å gjøre mest mulig skade. Noe sier meg likevel at det kommer til å være enklere.

Jeg holder en knapp på at det er snakk om å bruke bumping til å manipulere motstanderen(e)s posisjon/retning i forhold til omgivelsene. Omgivelsene vil da bestå av trygge og utrygge områder og muligens punkter som påfører krefter for å manipulere posisjon/retning til ting i nærheten. Det kan også tenkes at det vil være ressurshåndtering som fuel, power ups og liknende.

Eller kanskje det rett og slett er et racing spill :)

petterroea
15-03-2012, 11:01
Da lurer jeg i så fall på hvordan spillmotoren avgjør hvem som bumper hvem i et sammenstøt. Rent teknisk kunne det være den med størst hastighetsvektor komponent i retning treffpunkt som bumpet, men konseptuelt virker det som det gir lite mening. Mulig det kan være noe "destruction derby" aktig ved at man har svake og sterke punkter på romskipet. For eksempel er fronten beskyttet så man kan bumpe andre med fronten uten å ta skade, men det er om å gjøre å treffe motstanderen i siden eller bak for å gjøre mest mulig skade. Noe sier meg likevel at det kommer til å være enklere.

Jeg holder en knapp på at det er snakk om å bruke bumping til å manipulere motstanderen(e)s posisjon/retning i forhold til omgivelsene. Omgivelsene vil da bestå av trygge og utrygge områder og muligens punkter som påfører krefter for å manipulere posisjon/retning til ting i nærheten. Det kan også tenkes at det vil være ressurshåndtering som fuel, power ups og liknende.

Eller kanskje det rett og slett er et racing spill :)

Litt mer laymans terms, hvis to kollisjonsbokser kolliderer/er inni hverandre :P
Bruker det på spill, funker alltid

grimjoey
16-03-2012, 01:09
Litt mer laymans terms, hvis to kollisjonsbokser kolliderer/er inni hverandre :P
Bruker det på spill, funker alltid

Jeg regner med at det blir testing av nærliggende/overlappende kollisjonsgeometri. Det jeg sikter til er hvilken av de to romskipene som kolliderer får poeng? En mulig løsning i layman terms er at den som har størst fart inn i kollisjonen får poeng. Men det er ingen god løsning, og jeg kommer ikke på noen bedre. Derfor tror jeg det er lite sannsynlig at det er om å gjøre å bumpe flest ganger.

Skulle jeg laget et spill med tittelen "Bumpercars in Space" ville det dreie seg om romskip som farter rundt og har evnen til å dytte på hverandre. I spillområdet ville det vært sorte hull som tiltrekker seg ting og ødelegger ting som kommer for nær senter. For å gi romskipene en grunn til å bevege seg rundt ville jeg for eksempel spawnet drivstoff power-ups tilfeldig på brettet. Drivstoffet ville ikke være nødvendig for å bevege seg men gi en hastighetsboost, enten i løpet av en gitt tid, eller som en aktiverbar evne som brukes opp over tid.

Så får vi se hvor feil jeg tar da de bestemmer seg for å frigi spesifikasjonene :)

petterroea
16-03-2012, 16:00
Mens jeg er ved det: Er det lov å dele sin kjørbare fil med andre hardcore-programming folk så man har noe å jobbe med for å optimalisere AI'en?

Duckers
16-03-2012, 16:23
Mens jeg er ved det: Er det lov å dele sin kjørbare fil med andre hardcore-programming folk så man har noe å jobbe med for å optimalisere AI'en?

Ja, det går fint.

Noe som derimot ikke er lov er å dele implementasjon og levere "samme" bidrag, dvs veldig lik kode eller algoritme som bare er lettere modifiesert i to versjoner. Dette dekkes av reglene originalitet i de generelle konkurransereglene. Det blir på samme måte som at man ikke kan levere et bilde som bare er lettere retusjert to ganger i freestyle graphics. Dette er for at man ikke skal kunne ta alle tre premiene ved å lage tre versjoner av det beste bidraget.

Kort fortalt: om du kommer opp med en god ide, god algoritme eller annet triks, hold det for deg selv og sørg for at DU vinner :)

hakon
25-03-2012, 00:31
Nå vil jeg ikke mase, og det er sikkert nok av folk som har spurt om dette før, men det hadde ikke vært mulig og fått et grovt estimat på når casen slippes? Har veldig lyst til å sende inn noe i år, men mtp på nok av skolearbeid til uka, at jeg forsvinner på fjellet første halvdel av påsken samt at jeg ikke vet når casen slippes blir det litt vansklig å planlegge når ting skal gjøres.

Blir uansett morsomt å jobbe når resten av casen slippes, regner vell med at jeg bare må ta tålmodigheten til hjelp inntil videre :)

Edit: Skrivefeil

bondehagen
25-03-2012, 01:26
Det blir gøy å se hva dere får til :) Noen av dere var ganske "spot on", så håper dere utnyttet muligheten og har fått forberedt dere litt.

grimjoey
25-03-2012, 05:40
Jeg tror at i års bumpercars blir spennende. Men hvis det er om å gjøre å bumpe mest mulig ganger, blir det litt stress. Må lage en algoritme som liker å stalke fienden. Woo~~

Ser ut som du traff spikeren på hodet her, og jeg tok skammelig feil. Morro blir det uansett.

etse
25-03-2012, 05:57
Vil rapportere noe som ser ut som en bug. Om du bremser mens du står stille vil bilen snu seg 180 grader. Er dette intentional? virker som en merkelig feature i så fall

bondehagen
25-03-2012, 12:59
Vil rapportere noe som ser ut som en bug. Om du bremser mens du står stille vil bilen snu seg 180 grader. Er dette intentional? virker som en merkelig feature i så fall
Hva du ønsker å sende inn til accelerate for å bremse etc. er fritt frem såfremt vi ikke kommer med noen kontra beskjed.
Men jeg antar du kanskje tenker på den spilleren du styrer med tastaturet, den har ikke noe med konkurransen å gjøre annet enn at du får en motstander til AI'en din. Du kan fikse styringen sånn som du vil ha det når jeg legger ut kildekoden.

zyp
25-03-2012, 13:37
Jeg finner ikke noe i reglene om timingen mellom update(), GET_STATE og ACCELERATION. Jeg regner med at siden det bare kjøres 1000 iterasjoner at man vil få muligheten til å gjøre nye beregninger for hver iterasjon? Hvor lenge varer hver iterasjon? Er spillet deterministisk med tanke på hvilken iterasjon ACCELERATION treffer?

Jeg vil helst unngå å gjøre samme tabbe som i fjor, da AI-en min først rensket hele brettet for så å begå selvmord. Det var en følge av at den gjorde trekket sitt en tidligere iterasjon enn den hadde beregnet å gjøre.

bondehagen
25-03-2012, 15:41
Jeg finner ikke noe i reglene om timingen mellom update(), GET_STATE og ACCELERATION. Jeg regner med at siden det bare kjøres 1000 iterasjoner at man vil få muligheten til å gjøre nye beregninger for hver iterasjon? Hvor lenge varer hver iterasjon? Er spillet deterministisk med tanke på hvilken iterasjon ACCELERATION treffer?

Jeg vil helst unngå å gjøre samme tabbe som i fjor, da AI-en min først rensket hele brettet for så å begå selvmord. Det var en følge av at den gjorde trekket sitt en tidligere iterasjon enn den hadde beregnet å gjøre.
Bra observert. Slik det er nå er game loop låst til ca. 30 iterasjoner i sekundet (så sant maskinen klarer det, det burde de fleste gjøre). ACCELERATION kommandoer som blir sendt i mellom iterasjonene vil bli queuet opp.
Det vil komme en oppdatering med oppklaringer rundt dette. Takk!

zyp
25-03-2012, 16:01
Så man vil altså kunne lage en løkke som sender GET_STATE, venter på svaret som kommer når neste iterasjon starter, står og beregner i opptil 33ms eller så, før den så svarer med ACCELERATION og går tilbake til å sende GET_STATE før iterasjonen er over, og dermed får med seg samtlige iterasjoner?

bondehagen
25-03-2012, 16:16
Så man vil altså kunne lage en løkke som sender GET_STATE, venter på svaret som kommer når neste iterasjon starter, står og beregner i opptil 33ms eller så, før den så svarer med ACCELERATION og går tilbake til å sende GET_STATE før iterasjonen er over, og dermed får med seg samtlige iterasjoner?

Svaret på GET_STATE kommer ikke når neste iterasjon starter, men umiddelbart. Jeg har valgt å gjøre SocketHandleren asynkron. Det er derfor BEGIN_STATE sender med iteration slik at du vet om du har fått en "ny" state eller ikke. Altså om iteration har økt med 1 siden forrige gang du spurte.

zyp
25-03-2012, 16:21
Hvor ofte har jeg lov til å polle GET_STATE når jeg venter på en ny iterasjon?

petterroea
25-03-2012, 16:34
Ser ut som du traff spikeren på hodet her, og jeg tok skammelig feil. Morro blir det uansett.

Woo!

Ja, det blir gøy. Jobber på et java-framework nå, så sender jeg pull-request. Fordi jeg skal lage mitt bidrag i java :P

bondehagen
25-03-2012, 16:35
Hvor ofte har jeg lov til å polle GET_STATE når jeg venter på en ny iterasjon?

Vi har ikke sagt noe om dette, men jeg tror vi kommer til å legge en restriksjon på det. Det vil være en del av oppdateringen vi kommer med. Det vil f.eks. bli noe sånt som 10 ganger pr. iterasjon eller noe i såfall. Bare for at det ikke skal bli noe spamming som går ut over CPU bruk etc.

petterroea
25-03-2012, 17:41
Går det an å få en bedre forklaring på hvordan koordinatsystemet fungerer?

bondehagen
25-03-2012, 18:28
Går det an å få en bedre forklaring på hvordan koordinatsystemet fungerer?

Fra oppgaven:

Game is played in a grid of W x H cells in a co-ordinate system spanning X=0..W-1 and Y=0..H-1.
Each cell has dimensions 1.0 units x 1.0 units.
Cell [X, Y] has its upper-left corner in (X, Y) and its lower-right corner in (X+1, Y+1).
Jeg vet ikke helt hvordan jeg skal være mer presis enn det, kom gjerne med forslag.

Altså når kartet blir lest inn finner vi ut hva W og H blir (og dette blir returnert fra GET_STATE). Kartet som følger med er på noe sånt som 33 x 18 eller noe i den duren. Alle "tiles" er på 1 x 1 unit så det gjør det ganske enkelt å regne ut ting. Altså en stjerne som ligger på kolonne 5 og rad 3, har da sin sentrumsposisjon:
unitsize = 1
row = 3
col = 5
x = col + (unitsize / 2) // = 5.5
y = row + (unitsize /2) // = 3.5

Funkysocks
25-03-2012, 18:49
Noe tidspunkt på java framework kommende?
Har en del skolearbeid så har egentlig ikke tid til å skrive min egen java framework. Men hvis det er en ute kan jeg begynne på problemløsning med en gang

petterroea
25-03-2012, 18:53
Noe tidspunkt på java framework kommende?
Har en del skolearbeid så har egentlig ikke tid til å skrive min egen java framework. Men hvis det er en ute kan jeg begynne på problemløsning med en gang

Jobber selv på en nå, følg mitt git-repo, så får du vite når den er ferdig. Er det om 1-2 timer.

https://github.com/petterroea/SpaceBumper-Java-framework

bondehagen
25-03-2012, 19:13
Noe tidspunkt på java framework kommende?
Har en del skolearbeid så har egentlig ikke tid til å skrive min egen java framework. Men hvis det er en ute kan jeg begynne på problemløsning med en gang
Kan lage det etter jeg har spist, så i løpet av kvelden :)

Edit: Java framework er nå lagt ut

petterroea
25-03-2012, 21:03
Hey, lagde et Java framework som er ferdig, men aner ikke hvordan jeg sender pull requests.

Så her er en "manuell" pull request: https://github.com/petterroea/SpaceBumper-Java-framework

Kan du forklare hvordan move() fungerer mens vi er igang? HVa er x og y? farten(i x og y aksen)?

hakon
25-03-2012, 22:13
Er det noen her som planlegger å slippe et framework i C++ i løpet av kort tid, eller skal jeg starte selv? Hadde spart meg mye tid, nok av skole og annet (Er vell kanskje ikke den eneste..) :)

asbjorn
26-03-2012, 10:56
Er det noen som har klart å kjøre simulatoren under GNU/Linux enda? Jeg lurer fordi jeg har veldig lyst til å være med i konkurransen, men jeg har ikke Windows.

hakon
26-03-2012, 11:15
Jeg vil tro at du kan klare å kjøre den med mono, men jeg har ikke prøvd selv. Wine vil du nok ha problemer med, da .net framework 4 i kke kjører under Wine, i allefall ut i fra hva jeg har erfart. Skulle gjerne programmert i Linux selv, men fant ut av det enkelste var å boote Windows -.-

grimjoey
26-03-2012, 16:46
Kan du forklare hvordan move() fungerer mens vi er igang? HVa er x og y? farten(i x og y aksen)?

x og y ser ut til å være desimaltall slik at:

sqrt(x^2 + y^2) <= 1.0

Med andre ord; lengden til hypotenusen til trekanten med lengde/grunnlinje x og høyde y er lavere eller lik 1.0.

Gir du tall som resulterer i en større lengde blir dette "normalisert", altså x og y beholder sine proporsjoner (vektoren xy beholder sin retning), men reduseres slik at overnevnte betingelse stemmer.

I tillegg kan jeg nevne at state.Me.Position returnerer x og y verdier i form av desimaltall som relaterer til det oppgitte koordinatsystemet. Spawn for Ai på brett nr 2 er for eksempel koordinatene [14.5, 15.5] (ellernoe) som betyr midt på ruten som starter ved [14.0,15.0] og slutter ved [15.0,16.0].

Jeg tipper også at lengden på akselerasjonsvektoren (0.0 - 1.0) relaterer til dette koordinatsystemet, men den er skalert av en statisk variabel (factor1 = 0.05). Hastigheten skaleres av (factor2 = 0.1).


Alternative move metoder:


public bool moveByRadians(float directionRadians, float strength)
{
if (strength > 0.0) {
if (strength > 1.0) strength = 1.0;
float x = strength * Math.Cos(directionRadians);
float y = strength * Math.Sin(directionRadians);

return move(x, y);
}
return false;
}

public bool moveByDegree(float directionDegree, float strength)
{
return moveByRadians((directionDegree / 360) * 2 * Math.PI, strength);
}

asbjorn
26-03-2012, 19:10
Jeg vil tro at du kan klare å kjøre den med mono, men jeg har ikke prøvd selv. Wine vil du nok ha problemer med, da .net framework 4 i kke kjører under Wine, i allefall ut i fra hva jeg har erfart. Skulle gjerne programmert i Linux selv, men fant ut av det enkelste var å boote Windows -.-
Ja, Wine fikk trøbbel. Vi får prøve med Mono når kildekoden slippes.

petterroea
26-03-2012, 19:35
x og y ser ut til å være desimaltall slik at:

sqrt(x^2 + y^2) <= 1.0

Med andre ord; lengden til hypotenusen til trekanten med lengde/grunnlinje x og høyde y er lavere eller lik 1.0.

Gir du tall som resulterer i en større lengde blir dette "normalisert", altså x og y beholder sine proporsjoner (vektoren xy beholder sin retning), men reduseres slik at overnevnte betingelse stemmer.

I tillegg kan jeg nevne at state.Me.Position returnerer x og y verdier i form av desimaltall som relaterer til det oppgitte koordinatsystemet. Spawn for Ai på brett nr 2 er for eksempel koordinatene [14.5, 15.5] (ellernoe) som betyr midt på ruten som starter ved [14.0,15.0] og slutter ved [15.0,16.0].

Jeg tipper også at lengden på akselerasjonsvektoren (0.0 - 1.0) relaterer til dette koordinatsystemet, men den er skalert av en statisk variabel (factor1 = 0.05). Hastigheten skaleres av (factor2 = 0.1).


Alternative move metoder:


public bool moveByRadians(float directionRadians, float strength)
{
if (strength > 0.0) {
if (strength > 1.0) strength = 1.0;
float x = strength * Math.Cos(directionRadians);
float y = strength * Math.Sin(directionRadians);

return move(x, y);
}
return false;
}

public bool moveByDegree(float directionDegree, float strength)
{
return moveByRadians((directionDegree / 360) * 2 * Math.PI, strength);
}


Laymans, takk?

Eizon
26-03-2012, 19:44
Som hobby programmerer, er dette første gang og helt nytt område for meg. I utgangspunktet syntes jeg det var merkelig å betegne konkurransen som "hardcore", da 4k demo sannsynligvis ligger et hakk ovenfor.

Etter å ha lest igjennom spec i går kveld, lastet jeg ned serveren og knottet av gårde. Etter omhyggelig testing til frem til morgenkvisten, hadde jeg funnet flere fundamentale og alvorlige designfeil på serveren.

I frykt for å gi slipp på konkurransemessig fortrinn eller å bruke unyttig mye tid på dette, vil jeg foreløpig ikke utgi detaljene. Jeg har derimot et enkelt spørsmål til crewet. Er serveren skrevet slik med intensjon for å gjøre konkurransen mer "hardcore"?

hakon
26-03-2012, 19:48
Ja, Wine fikk trøbbel. Vi får prøve med Mono når kildekoden slippes.
Du kan ikke si i fra her om det går? Hvilket språk planlegger du å bruke? Skriver selv C++, så jeg er jo avhengig av en del plattformspesifikke funksjoner. Tror derfor ikke jeg vil bruke så mye tid på det, men det hadde jo vært morsomt og prøvd allikevell.

Fortsatt hyggelig om noen har et framework i C++ liggende. Jobber selv med ett nå, men her litt for begrenset tid. Må innrømme at jeg tror jeg har litt for dårlig tid i forhold til hva dette kan kreve.

@Elszon, jeg har vell ikke inntrykk av at dette rent programmeringsmessig er veldig hardcore i forhold til hva man kan støte på, men det jeg tror er at det kan kreve en god del tankegang for å komme frem til en god, rask og unik måte å løse oppgaven på, som ved første øyekast kan virke ganske enkel. Slik sett kan man jo betegne det som hardcore, selv om man kanskje finner mye av det samme i 4k. Morsomt er det uansett, og det er vell poenget :)

etse
26-03-2012, 19:59
Laymans, takk?
spørs hvor mye matte du har hatt opp i gjennom, hvordan man kan forklare dette. Men regner med du har vært borti minst enkel vektorregning.

X, Y i move, er lengden i X og Y retning på denne vektoren. Den totalt lengden på vektoren kan aldri være større enn 1. (og lengden er regnet ut ved sqrt(x^2 + y^2). Prøver du å sende inn en større vektor enn dette, vil den normaliseres. Dette betyr at det lages en ny vektor som peker i samme retning - men med en lengde på 1.0. F.eks. hvis du sender inn Move(2, 3): x=2, y=3 | Lengde = sqrt(2*2 + 3*3) = sqrt(12) = 3.46. Denne lengden er større enn 1, og vil derfor normaliseres.
x = 2 / 3.46 = 0.578 | y = 3 / 3.46 = 0.867 Denne vektoren vil da brukes i stede.

Move tar ikke inn fart direkte. Den sier ikke hvordan den beveger deg videre. Slik jeg forstår oppgaven er dette en akkselerasjonsvektor. Det vil si at om du beveger deg i en retning A med hastighet B. og sender inn Move(0, 0) så vil du ikke bremse eller stå stille. Men i stede betyr det at du ikke påvirker bumpercaren med noe kraft, og den vil derfor fortsette med samme fart og retning som den hadde før.

grimjoey
26-03-2012, 20:18
Laymans, takk?

Tenk deg et todimensjonalt koordinatsystem hvor bilen/skipet er i origo [0,0]. ACCELERATION x y vil gi deg økt hastighet i en retning du definerer ved å oppgi et punkt i nevnte koordinatsystem (redusert hastighet dersom du allerede beveger deg i motsatt retning).

ACCELERATION 0 -1: akselerer maksimalt mot nord.
ACCELERATION 0 1 : ... mot sør.
ACCELERATION -1 0 : ... mot vest.
ACCELERATION 1 0 : ... mot øst.
ACCELERATION 0.7 0.7 : ... mot sørøst. (0.7 er lengden på x og y komponentene av en 45 graders vektor med lengde 1, sånn circa)

Retningen til- og mengden av akselerasjon bestemmes av en tenkt linje fra bilen/skipet [0,0] til punktet du har definert [x,y]. Lengden på linjen bestemmer mengde akselerasjon og avgrenses til 1.0 slik at dette blir et forholdstall 0.0 (ingen akselerasjon) til 1.0 (maksimal akselerasjon). Lengden kan regnes ut med sqrt(x^2 + y^2) (pythagoras).

I tidligere post la jeg også til et par metoder for å benytte polarkoordinater til å angi akselerasjon. Metodene vil regne ut x og y verdi basert på retning i grader eller radianer og oppgitt styrke. Dersom styrken er lavere enn 0.0 blir den ignorert, og dersom den er større enn 1.0 blir den satt til 1.0.

Litt tilleggsinfo angående endring av retning:

Bilen/skipet har en hastighetsvektor (x og y verdi relativt til skipet) som bestemmer den gjeldende retning og hastighet. Akselerasjon blir (antagelig) lagt til med vektoraddisjon. Kort fortalt blir x og y komponentene i begge vektorene lagt sammen.

velocity += acceleration;

er det samme som:

velocity.x += acceleration.x;
velocity.y += acceleration.y;

Dette fører til at når du påfører en akselerasjon i en annen retning en nåværende hastighet vil noe av mengden akselerasjon gå med til å endre retning. Jo høyere hastighet du har, jo mindre vil retningen endre seg av en gitt akselerasjon i en gitt retning.

Duckers
26-03-2012, 20:28
Som hobby programmerer, er dette første gang og helt nytt område for meg. I utgangspunktet syntes jeg det var merkelig å betegne konkurransen som "hardcore", da 4k demo sannsynligvis ligger et hakk ovenfor.

Etter å ha lest igjennom spec i går kveld, lastet jeg ned serveren og knottet av gårde. Etter omhyggelig testing til frem til morgenkvisten, hadde jeg funnet flere fundamentale og alvorlige designfeil på serveren.

I frykt for å gi slipp på konkurransemessig fortrinn eller å bruke unyttig mye tid på dette, vil jeg foreløpig ikke utgi detaljene. Jeg har derimot et enkelt spørsmål til crewet. Er serveren skrevet slik med intensjon for å gjøre konkurransen mer "hardcore"?

Hei Eizon,

Simulatoren (Serveren) er i beta-versjon frem til konkurransen starter. Denne tråden er til for å nettopp avdekke feil i serveren forhold til spekken, og også eventuelle flaws i spekken som gjør at spillet blir ubalansert eller "hackbart".

Du kan ta opp feil/svakheter i denne tråden, eller hvis du har spørsmål som du mener ikke bør stilles i offentlighet kan du sende dem til demo@gathering.org.

bondehagen
26-03-2012, 22:50
Er det noen her som planlegger å slippe et framework i C++ i løpet av kort tid, eller skal jeg starte selv? Hadde spart meg mye tid, nok av skole og annet (Er vell kanskje ikke den eneste..) :)

Du kan modde rammeverket som soba lagde i fjor. Burde ikke være store endringene hvis du sammenligner med c# varianten: https://github.com/bondehagen/CloudWars/tree/master/AI%20Clients/C++.


Er det noen som har klart å kjøre simulatoren under GNU/Linux enda? Jeg lurer fordi jeg har veldig lyst til å være med i konkurransen, men jeg har ikke Windows.

Den kjører ikke ut av boksen på mono grunnet noen p/invoke kall, men disse kan lett erstattes med noe annet. Jeg har også lagt alt som har med gamelogikk i et eget assembly slik at dere lett kan bytte ut grafikkmotoren (winforms) til opengl etc.
Jeg legger ut kildekoden etterpå eller senest i morgen. Edit: Kildekoden er nå ute https://github.com/bondehagen/SpaceBumper

Husk å følge med frem mot TG, da det vil komme en liten oppdatering basert på tilbakemeldingene deres.

shad
26-03-2012, 23:27
hi

because this is the official hardcore programming support thread and i don't understand anything i have some questions
1) i see some talks about mono&wine, i guess it doesn't work? :(
2) i was watching at state.Stars and there is so much in it, i guess everthing and not only stars? bug or feature? since this was a nice way in CloudWars
3) i have some strange movment of my "car" even if i only move(1,1), its kind of moving forward and a little back, i have this issue on 3 WinXP systems... anyone else has this problem?

bondehagen
27-03-2012, 00:55
1) i see some talks about mono&wine, i guess it doesn't work? :(
No, but the sourcecode (https://github.com/bondehagen/SpaceBumper)is available.


2) i was watching at state.Stars and there is so much in it, i guess everthing and not only stars? bug or feature? since this was a nice way in CloudWars
That was a bug! Thanks for reporting, a new version is released :)


3) i have some strange movment of my "car" even if i only move(1,1), its kind of moving forward and a little back, i have this issue on 3 WinXP systems... anyone else has this problem?
I have not tested XP, but it sounds like an issue with interpolation or something, strange.

Eizon
27-03-2012, 03:11
Takk for svaret. Ettersom feilene angår alle, tar jeg min analyse i engelsk. Det faller mer naturlig for meg innenfor dette emnet. Først vil jeg bare si at selv om jeg føler en viss stolthet når jeg finner bugs, ønsker jeg ikke å være uhøflig eller spydig.

I just read though the source code to confirm my suspicions. While the original intention for this competition is to create an intelligent AI to most strategically navigate the map, a series of design flaws completely breaks the game. I will now attempt to explain why both the spec and implementation are flawed.

The spec has no explicit psudocode that makes the game deterministic. Although that should implicitly be obvious, the implementation does not have that code either. This means that two identical matches between AI's will produce different results. While there are really only one solution to this, there currently exists at least three problems in regards to this.

The server runs at 30 ticks/s. 1/30 grants 33 milliseconds per frame, for which each client has to respond within. Any late response will be taken into consideration a frame too late, when it is outdated and may cause the wrong effect. You could say that this is a feature, setting a time limit on the clients.

However, communication between server and client is for some reason extremely slow. This also applies to the number of clients. With two or more clients, 33 milliseconds are easily eaten up by the server and frames lost.

I'm unsure about this paragraph, but here are some additional suspicions. The server also handles Render() which may affect the frame time. There is also a frame drop system in place, which I suspect can negatively affect the game.

Because these small details that add up, the server will almost exclusively, but randomly delay frames from clients. Which is also affected by the speed of the hosting computer. Obviously you lose control when frames are delayed or dropped, but there is another huge issue with this. For every frame that does not contain movement commands for the bumperships, the velocity is reduced by the factor of 0,97. Because math easily add up, 6 lost frames will reduce the velocity by ~50% with no chance to change course mid way.

This can also be exploited the other way around, and this is why I'm now basically giving away my first place. In the case you optimize the client code to run in 16 milliseconds or less, you are awarded by processing movement twice for each tick. I'm used to writing entire game engines that in less than 1 milliseconds. Thus I was able to archive acceleration way above what was originally intended for this game.

By combining insane acceleration and de-acceleration values I'm effectively able to archive teleportation. What is great about this technique is also that no collision detection are calculated in travel. The engine does not compute any interpolation, enabling me to teleport to any location regardless of obstructions.

Finally, because of some unknown reason to me, excessive exploitation of this technique results in the server crashing, enabling me to crash the server at any time at will.

Honestly speaking, this game engine is unusable in it's current condition. While it would've given me an unfair advantage, with the indeterministic nature of the game and random lag, I'm unable to precisely calculate movement. And let's face it, I would probably be disqualified.

petterroea
27-03-2012, 07:15
Takk for svaret. Ettersom feilene angår alle, tar jeg min analyse i engelsk. Det faller mer naturlig for meg innenfor dette emnet. Først vil jeg bare si at selv om jeg føler en viss stolthet når jeg finner bugs, ønsker jeg ikke å være uhøflig eller spydig.

I just read though the source code to confirm my suspicions. While the original intention for this competition is to create an intelligent AI to most strategically navigate the map, a series of design flaws completely breaks the game. I will now attempt to explain why both the spec and implementation are flawed.

The spec has no explicit psudocode that makes the game deterministic. Although that should implicitly be obvious, the implementation does not have that code either. This means that two identical matches between AI's will produce different results. While there are really only one solution to this, there currently exists at least three problems in regards to this.

The server runs at 30 ticks/s. 1/30 grants 33 milliseconds per frame, for which each client has to respond within. Any late response will be taken into consideration a frame too late, when it is outdated and may cause the wrong effect. You could say that this is a feature, setting a time limit on the clients.

However, communication between server and client is for some reason extremely slow. This also applies to the number of clients. With two or more clients, 33 milliseconds are easily eaten up by the server and frames lost.

I'm unsure about this paragraph, but here are some additional suspicions. The server also handles Render() which may affect the frame time. There is also a frame drop system in place, which I suspect can negatively affect the game.

Because these small details that add up, the server will almost exclusively, but randomly delay frames from clients. Which is also affected by the speed of the hosting computer. Obviously you lose control when frames are delayed or dropped, but there is another huge issue with this. For every frame that does not contain movement commands for the bumperships, the velocity is reduced by the factor of 0,97. Because math easily add up, 6 lost frames will reduce the velocity by ~50% with no chance to change course mid way.

This can also be exploited the other way around, and this is why I'm now basically giving away my first place. In the case you optimize the client code to run in 16 milliseconds or less, you are awarded by processing movement twice for each tick. I'm used to writing entire game engines that in less than 1 milliseconds. Thus I was able to archive acceleration way above what was originally intended for this game.

By combining insane acceleration and de-acceleration values I'm effectively able to archive teleportation. What is great about this technique is also that no collision detection are calculated in travel. The engine does not compute any interpolation, enabling me to teleport to any location regardless of obstructions.

Finally, because of some unknown reason to me, excessive exploitation of this technique results in the server crashing, enabling me to crash the server at any time at will.

Honestly speaking, this game engine is unusable in it's current condition. While it would've given me an unfair advantage, with the indeterministic nature of the game and random lag, I'm unable to precisely calculate movement. And let's face it, I would probably be disqualified.

Oj. Spillet er i beta, da, så vi får håpe det blir fikset

Duckers
27-03-2012, 10:58
Takk for svaret. Ettersom feilene angår alle, tar jeg min analyse i engelsk. Det faller mer naturlig for meg innenfor dette emnet. Først vil jeg bare si at selv om jeg føler en viss stolthet når jeg finner bugs, ønsker jeg ikke å være uhøflig eller spydig.

Vi setter pris på kritisk tilbakemelding så vi kan få en så interessant og rettferdig konkurranse som mulig. Både spill og simulator er i beta, så vi kan fortsatt gjøre endringer.


The spec has no explicit psudocode that makes the game deterministic. Although that should implicitly be obvious, the implementation does not have that code either. This means that two identical matches between AI's will produce different results. While there are really only one solution to this, there currently exists at least three problems in regards to this.

First of all, the game spec has pseudo code as found in the compo case.

Secondly, the game is not meant to be deterministic. The AI must face the same challenges as a human player, with uncertainty in input response deylay times. This means you cannot use an AI with discrete states and calculate your way to certain victory, there is some degree of randomness involved.

Yes - two identical matchups between the same AI's might produce different results, just like with human players. This is intentional.

However, we assume that a matchup between a strong AI and a weak AI should give a majority of victories to the strong AI over time (by definition!).


The server runs at 30 ticks/s. 1/30 grants 33 milliseconds per frame, for which each client has to respond within. Any late response will be taken into consideration a frame too late, when it is outdated and may cause the wrong effect. You could say that this is a feature, setting a time limit on the clients.

This is intentional. The client needs to take timing into account if it wants to be as much in sync with the game as possible.


However, communication between server and client is for some reason extremely slow. This also applies to the number of clients. With two or more clients, 33 milliseconds are easily eaten up by the server and frames lost.

This being slow is a bug. This should be fast so a fast AI should not have big problems keeping up with most iterations of the game.
This will be investigated - any help you can give us to help reproduce the problems you are experiencing will be appreciated.


I'm unsure about this paragraph, but here are some additional suspicions. The server also handles Render() which may affect the frame time. There is also a frame drop system in place, which I suspect can negatively affect the game.

If rendering is truly a big performance problem we will consider replacing it by a faster version or a dummy client connecting and rendering the game separately.


Because these small details that add up, the server will almost exclusively, but randomly delay frames from clients. Which is also affected by the speed of the hosting computer. Obviously you lose control when frames are delayed or dropped, but there is another huge issue with this. For every frame that does not contain movement commands for the bumperships, the velocity is reduced by the factor of 0,97. Because math easily add up, 6 lost frames will reduce the velocity by ~50% with no chance to change course mid way.

If the server is *that* slow, the consequences you are listing are correct. Then again, the server is not meant to be that slow.


This can also be exploited the other way around, and this is why I'm now basically giving away my first place. In the case you optimize the client code to run in 16 milliseconds or less, you are awarded by processing movement twice for each tick. I'm used to writing entire game engines that in less than 1 milliseconds. Thus I was able to archive acceleration way above what was originally intended for this game.

This shouldn't happen. According to the pseudo code spec, how many times you issue MOVE commands to the server should not affect the number of times your velocity and position gets updated. By issuing commands, you can only *set* the desired acceleration you want to apply in the next Update() iteration. Updating of velocity and position happens per Update() iteration.

If the server code is inconsistent with this, it is a bug in the server that will be fixed.

If you have an example AI that is able to showcase these bugs, we would appreciate if you could send this to us (demo@gathering.org).

Edit: We've found a bug in the server implementation that deviates from the spec - a new version will be released tonight that fixes this. Velocity += acceleration*factor1; happened in the command processing and not in Update(). We will move this to Update() and tweak the factor.


By combining insane acceleration and de-acceleration values I'm effectively able to archive teleportation. What is great about this technique is also that no collision detection are calculated in travel. The engine does not compute any interpolation, enabling me to teleport to any location regardless of obstructions.

You should not be able to combine "insane" accelleration values, as your acceleration vector should be normalized by the server, according to the spec.



if length(a.acceleration) > 1.0
a.acceleration = normalize(a.acceleration)


The collision system is meant to be very simple. It does not check for swept intersections, this is correct. This is to keep the pseudo logic simple enough so people can reproduce it in their AI.

If you are able to exploit this to get an advantage in the game after our fixes, that would just be cool.


Finally, because of some unknown reason to me, excessive exploitation of this technique results in the server crashing, enabling me to crash the server at any time at will.

This is likely, as the server code was highly untested before we released it and hence the "beta" state.
Please send an AI that can crash the server so we can fix these bugs.


Honestly speaking, this game engine is unusable in it's current condition. While it would've given me an unfair advantage, with the indeterministic nature of the game and random lag, I'm unable to precisely calculate movement. And let's face it, I would probably be disqualified.

You will not be disqualified - and we are actually very happy to see more coders showing off skill in the TG Creative community :)

Eizon
27-03-2012, 12:55
Thanks a lot. It seems that you've found the mismatch between the spec and implementation. I would prefer that you don't dismiss my other claims simply because it's not supposed to be that way. It would've been another case if you could compile the spec. My main issue right now, is that it is disadvantageous both if the client is slow, and if it's too fast.

Either way, I've sent you my client which showcases the issues I've found. And as I wrote in the email, I'm looking forward to a fair and interesting competition.

grimjoey
27-03-2012, 13:38
You should not be able to combine "insane" accelleration values, as your acceleration vector should be normalized by the server, according to the spec.

As i understand the acceleration is capped at 1.0. But you could send "insane values" by sending 1.0 a lot of times per iteration as the velocity update happens/happened in the command processing.

And thanks to Eizon for not keeping this a secret!

Duckers
27-03-2012, 16:23
As i understand the acceleration is capped at 1.0. But you could send "insane values" by sending 1.0 a lot of times per iteration as the velocity update happens/happened in the command processing.

And thanks to Eizon for not keeping this a secret!

Note that as mentioned above this is a bug, and will be fixed in the next release.

Whenever the spec and the simulator is differing, the spec takes precedence (unless the spec is obviously flawed).

grimjoey
28-03-2012, 00:29
fra BumperShip.cs:

public void Move(Vector acceleration)
{
// The strength is calculated as sqrt(x*x+y*y)
double strength = acceleration.Length;

if (strength == 0)
return;

if (strength > 1.0)
acceleration.Normalize();

this.acceleration = acceleration;
}

Er det meningen at det ikke skal gå an å bremse ved å sende "ACCELERATION 0 0"?

bondehagen
28-03-2012, 01:27
Er det meningen at det ikke skal gå an å bremse ved å sende "ACCELERATION 0 0"?
Nope, det er ikke meningen. Noe som burde vært slettet, takk! v1.3 ligger ute.

nilsnh
28-03-2012, 02:02
(Er norsk men eg skriver for engelsk for at det skal vere lettare for engelskspråklege.)

I'm super stoked about the challenge, and since the gameserver is based on accepting TCP/IP connections I hope to create a solution using node.js (http://nodejs.org/) and coffeescript (http://coffeescript.org/). Let's see how far that takes me. ^^;; At the very least, a python solution would be quite exciting to try and make.

Question. I'll be bringing a laptop with linux on it, quite free of Windows.

Is anyone working on a linux version of the gameserver to play around with? I'm not sure how I would go about making it run on linux. :|

grimjoey
28-03-2012, 12:26
(Er norsk men eg skriver for engelsk for at det skal vere lettare for engelskspråklege.)

I'm super stoked about the challenge, and since the gameserver is based on accepting TCP/IP connections I hope to create a solution using node.js (http://nodejs.org/) and coffeescript (http://coffeescript.org/). Let's see how far that takes me. ^^;; At the very least, a python solution would be quite exciting to try and make.

Question. I'll be bringing a laptop with linux on it, quite free of Windows.

Is anyone working on a linux version of the gameserver to play around with? I'm not sure how I would go about making it run on linux. :|

I don't think node.js and coffescript will be supported, even though it would be very cool if it was. Python will probably be your best bet unless they change the rules to include support for the technologies mentioned.
I love python syntax and of course coffescript as it is quite similar. Why do other programming languages insist on using curly braces? They're so cumbersome to type. -.-



>>> from __future__ import braces
SyntaxError: not a chance (<pyshell#0>, line 1)
>>>

nilsnh
28-03-2012, 13:16
I don't think node.js and coffescript will be supported, even though it would be very cool if it was. Python will probably be your best bet unless they change the rules to include support for the technologies mentioned.
I love python syntax and of course coffescript as it is quite similar. Why do other programming languages insist on using curly braces? They're so cumbersome to type. -.-



>>> from __future__ import braces
SyntaxError: not a chance (<pyshell#0>, line 1)
>>>


Curly braces are just so unergonomic. ^^

Regarding the choice of technology, I can't see that there's anything in the rules that prevents me from using these technologies. And there seems to be possible to add plenty of support in node.js (https://github.com/joyent/node/wiki/modules#wiki-tcp) for speaking to a tcp/ip game server. Was it so that only standard libraries could be used? If so, then I would argue that node.js is only a barebones engine that I would use to fire up javascript which would speak tcp/ip with the game server.

Don't know if such a rickety contraption would work, but it would be cool to try.

bondehagen
28-03-2012, 14:09
Curly braces are just so unergonomic. ^^

Regarding the choice of technology, I can't see that there's anything in the rules that prevents me from using these technologies. And there seems to be possible to add plenty of support in node.js (https://github.com/joyent/node/wiki/modules#wiki-tcp) for speaking to a tcp/ip game server. Was it so that only standard libraries could be used? If so, then I would argue that node.js is only a barebones engine that I would use to fire up javascript which would speak tcp/ip with the game server.

Don't know if such a rickety contraption would work, but it would be cool to try.

NodeJs is perfectly valid and I didn't understand why anyone had used it so far, so yesterday I wrote a NodeJs framework for my own testing. I can upload it later today.

grimjoey
28-03-2012, 14:10
Programming Languages

All languages are allowed as long as they don't need any other VM than those provided below.

Native windows binaries
.NET 3.5/4.0
Java (JRE version 6 Update 31)
Python 2.6/3.1


Nodejs is well suited for building a tcp client, and possibly AI, but I think nodejs would be considered a "vm", in the same sense as Python, rather than a part of your entry. And as such it is not allowed as it is not part of the list of available technologies for the competition.

Edit: Late and wrong. Disregard!

bondehagen
28-03-2012, 14:30
Nodejs is well suited for building a tcp client, and possibly AI, but I think nodejs would be considered a "vm", in the same sense as Python, rather than a part of your entry. And as such it is not allowed as it is not part of the list of available technologies for the competition.


As I have not checked whether we are allowed to distribute the binary, I am going to change the rules to include the latest version of Node. Remember that the entries will run on windows based computer. So test your AIs before delivery if you are a Linux user. I am shure there will be a ton of windows computers you can borrow in the creative lounge.

nilsnh
28-03-2012, 22:21
As I have not checked whether we are allowed to distribute the binary, I am going to change the rules to include the latest version of Node. Remember that the entries will run on windows based computer. So test your AIs before delivery if you are a Linux user. I am shure there will be a ton of windows computers you can borrow in the creative lounge.

Yay! Looking forward to this challenge. :)

etse
29-03-2012, 02:55
Have anyone started on a Python framework? Or should I aim to have that as my weekend-project? :)

Eizon
29-03-2012, 04:40
System.InvalidOperationException was unhandled
Message=Collection was modified after the enumerator was instantiated.
StackTrace:
at System.ThrowHelper.ThrowInvalidOperationException( ExceptionResource resource)
at System.Collections.Generic.Queue`1.Enumerator.Move Next()
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at SpaceBumper.SocketHandler.Update(Int32 iteration, World world, Bumpership bumpership) in file:\\SpaceBump.Core\Input\SocketHandler.cs:line 51
at SpaceBumper.Bumpership.Update(Int32 iterations) in file:\\SpaceBump.Core\Bumpership.cs:line 66
at SpaceBumper.World.Update(Int32 iterations) in file:\\SpaceBump.Core\World.cs:line 28
at SpaceBumper.GameManager.Update() in file:\\SpaceBump.Core\GameManager.cs:line 77
at SpaceBumper.GameLoop.Start() in file:\\SpaceBump.Core\Helpers\GameLoop.cs:line 47
at SpaceBumper.GameManager.Start() in file:\\SpaceBump.Core\GameManager.cs:line 71
at SpaceBumper.Game..ctor() in file:\\SpaceBump\Game.cs:line 41
at SpaceBumper.Game.Main() in file:\\SpaceBump\Game.cs:line 103
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()


Could you take a look at this piece of code? It crashes quite frequently.

grimjoey
29-03-2012, 06:13
Could you take a look at this piece of code? It crashes quite frequently.

I got that too during testing. Seems to be a problem with commandQueue, if the AI send to many messages too fast. The async network handler will try to update commandQueue whenever a new message is waiting. If this happens while Update tries to dequeue messages there might be a problem. I don't know how this works in C#, but that is my guess. I would try changing the code in Update such that it copies and flushes the commandQueue then looping through the copy.

bondehagen
29-03-2012, 13:55
System.InvalidOperationException was unhandled
Message=Collection was modified after the enumerator was instantiated.
StackTrace:
at System.ThrowHelper.ThrowInvalidOperationException( ExceptionResource resource)
at System.Collections.Generic.Queue`1.Enumerator.Move Next()
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at SpaceBumper.SocketHandler.Update(Int32 iteration, World world, Bumpership bumpership) in file:\\SpaceBump.Core\Input\SocketHandler.cs:line 51
at SpaceBumper.Bumpership.Update(Int32 iterations) in file:\\SpaceBump.Core\Bumpership.cs:line 66
at SpaceBumper.World.Update(Int32 iterations) in file:\\SpaceBump.Core\World.cs:line 28
at SpaceBumper.GameManager.Update() in file:\\SpaceBump.Core\GameManager.cs:line 77
at SpaceBumper.GameLoop.Start() in file:\\SpaceBump.Core\Helpers\GameLoop.cs:line 47
at SpaceBumper.GameManager.Start() in file:\\SpaceBump.Core\GameManager.cs:line 71
at SpaceBumper.Game..ctor() in file:\\SpaceBump\Game.cs:line 41
at SpaceBumper.Game.Main() in file:\\SpaceBump\Game.cs:line 103
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()


Could you take a look at this piece of code? It crashes quite frequently.

Yes, I got that too yesterday. I have a fix almost done. Just need some more testing.

offwhite
30-03-2012, 23:31
fra BumperShip.cs:

public void Move(Vector acceleration)
{
// The strength is calculated as sqrt(x*x+y*y)
double strength = acceleration.Length;

if (strength == 0)
return;

if (strength > 1.0)
acceleration.Normalize();

this.acceleration = acceleration;
}

Er det meningen at det ikke skal gå an å bremse ved å sende "ACCELERATION 0 0"?


Nope, det er ikke meningen. Noe som burde vært slettet, takk! v1.3 ligger ute.

Er litt forvirra her. Hva sikter dere til når dere prater om å bremse? Man skal ikke kunne bremse, i den forstand at man deakselererer, ved å sette akselerasjonen til null. Null akselerasjon betyr at farten forblir konstant. Minus en liten brøkdel som "blir borte" for å simulere luftmotstand, friksjon ol. Hvis man skal bremse, med den "vanlige" tolkningen av orden, så må man akselerere i motsatt retning.

hakon
31-03-2012, 00:18
Yes, I got that too yesterday. I have a fix almost done. Just need some more testing.

I have noticed that the simulator is a bit unstable to. When running it from the terminal I don't get anymore than:


hakon@hakon-laptop ~/Desktop/Simulator
$ SpaceBumper.exe
Signal 67


I tried to do a quick google on "Signal 67", but I didn't really find anything useful. Is is related, or is it something else? It happened with the previous release, and disappeared for some time when I downloaded the newest release, but not it has come back. Will try download again now.

Running in 64-bit Win8, consumer preview. .net and all that stuff should be up to date, but I'll check that again and try do do some more debugging tomorrow.

grimjoey
31-03-2012, 00:42
Er litt forvirra her. Hva sikter dere til når dere prater om å bremse? Man skal ikke kunne bremse, i den forstand at man deakselererer, ved å sette akselerasjonen til null. Null akselerasjon betyr at farten forblir konstant. Minus en liten brøkdel som "blir borte" for å simulere luftmotstand, friksjon ol. Hvis man skal bremse, med den "vanlige" tolkningen av orden, så må man akselerere i motsatt retning.

Dette er en non-issue i den nyeste versjonen da det er blitt fikset, men for å forklare:

if (strength == 0) return;

Denne koden, sammen med det faktum at spillet "husker" den siste akselerasjonen, gjør at "ACCELERATION 0 0" blir ignorert, og den tidligere oppgitte akselerasjonen blir gjeldende. Dvs at sender du:

ACCELERATION 1 0
ACCELERATION 0 0

...vil bilen fortsette med acceleration = Vector(1,0) for hver iterasjon inntil du sender en ny melding med ACCELERATE x y hvor sqrt(x*x+y*y) > 0.

Det gikk med andre ord ikke å stoppe bilen helt (uten å alternere ACCELERATION 0.001 0.001 og ACCELERATION -0.001 -0.001).



I have noticed that the simulator is a bit unstable to. When running it from the terminal I don't get anymore than:


hakon@hakon-laptop ~/Desktop/Simulator
$ SpaceBumper.exe
Signal 67


I tried to do a quick google on "Signal 67", but I didn't really find anything useful. Is is related, or is it something else? It happened with the previous release, and disappeared for some time when I downloaded the newest release, but not it has come back. Will try download again now.

Running in 64-bit Win8, consumer preview. .net and all that stuff should be up to date, but I'll check that again and try do do some more debugging tomorrow.

Run beta software on beta os and thats what you get i guess ;)

Eizon
31-03-2012, 22:35
hakon@hakon-laptop ~/Desktop/Simulator
$ SpaceBumper.exe
Signal 67

The server won't run if your current directory differs from the executable directory, because of relative paths. Might be related.

On another note. The "human AI" does not obey the set rules of the game. It directly alters the velocity of the object, which makes it impossible to replicate using the framework. It can turn 180° on the spot without affecting the velocity.


double currentSpeed = bumpership.Velocity.Length;
double currentAngle = bumpership.Angle;
...
currentSpeed += increaseSpeedBy;
currentAngle += rotateAngleBy;
...
double radians = currentAngle * Math.PI / 180;
Vector rotation = new Vector(Math.Cos(radians), Math.Sin(radians));
bumpership.Velocity = rotation * currentSpeed;

bondehagen
01-04-2012, 00:36
On another note. The "human AI" does not obey the set rules of the game. It directly alters the velocity of the object, which makes it impossible to replicate using the framework. It can turn 180° on the spot without affecting the velocity.
The human player is not part of the assignment. If you would like it to behave more like your AI you need to download the source and change it.

bondehagen
01-04-2012, 01:24
System.InvalidOperationException was unhandled
Message=Collection was modified after the enumerator was instantiated.
StackTrace:
at System.ThrowHelper.ThrowInvalidOperationException( ExceptionResource resource)
at System.Collections.Generic.Queue`1.Enumerator.Move Next()
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at SpaceBumper.SocketHandler.Update(Int32 iteration, World world, Bumpership bumpership) in file:\\SpaceBump.Core\Input\SocketHandler.cs:line 51
at SpaceBumper.Bumpership.Update(Int32 iterations) in file:\\SpaceBump.Core\Bumpership.cs:line 66
at SpaceBumper.World.Update(Int32 iterations) in file:\\SpaceBump.Core\World.cs:line 28
at SpaceBumper.GameManager.Update() in file:\\SpaceBump.Core\GameManager.cs:line 77
at SpaceBumper.GameLoop.Start() in file:\\SpaceBump.Core\Helpers\GameLoop.cs:line 47
at SpaceBumper.GameManager.Start() in file:\\SpaceBump.Core\GameManager.cs:line 71
at SpaceBumper.Game..ctor() in file:\\SpaceBump\Game.cs:line 41
at SpaceBumper.Game.Main() in file:\\SpaceBump\Game.cs:line 103
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()


Could you take a look at this piece of code? It crashes quite frequently.

This should be fixed in 1.4.
NB: The rules now states that you are not allowed to send more than 4 commands per iteration.

etse
01-04-2012, 22:10
Lagde et kort framework til pyhon 2.7:

Selve klassen:
http://pastesite.com/33825

Vektor-klassen:
http://pastesite.com/33798

Bare å ta i bruk, om andre skal jobbe med oppgaven i Python. Forbehold om små bugs.

For å bruke koden, bare arver man fra klassen "Client" og kaller runAi().
Skriv implementasjonen av din algoritme i "runAi" ved å override denne metoden.

Eksempel:

from framework import *
import time

class AI(Client):
def runAi(self):
self.setName("PythonAI")

map = self.waitForMap()

print "Map"
for line in map:
print "".join(line)

while(True):
self.move(1, 1)
gs = self.getState()
if gs == None:
break
time.sleep(300)

if __name__ == '__main__':
ai = AI()
ai.runAi()

Edit: Fant noen bugs i koden som nå er fikset.

etse
02-04-2012, 00:03
Forresten, så på reglene og den sier ingenting om størrelsen på kartet. Med tanke på søke-algoritmer har det veldig mye å si når man skal prioritere hvor mye søketid og ressurser de bruker forhold til hvor gode stier de finner.
Blir brettene noe vesentlig større enn de er i simulatoren?

Duckers
02-04-2012, 00:37
Forresten, så på reglene og den sier ingenting om størrelsen på kartet. Med tanke på søke-algoritmer har det veldig mye å si når man skal prioritere hvor mye søketid og ressurser de bruker forhold til hvor gode stier de finner.
Blir brettene noe vesentlig større enn de er i simulatoren?

Brettene som følger med er størrelsesordenmessig representative for det som vil brukes i konkurransen.

Nøyaktig størrelse kan dog variere.

Eizon
02-04-2012, 12:36
Takk for oppdateringene. Det ser ut til å fungere mye bedre nå.

Angående kart. Kan du si noe om hvorvidt den blir 2- eller 4-veis symmetrisk, ettersom startposisjoner er mer rettferdig dersom man starter i hvert sitt hjørne?

Jeg har kikket igjennom tidligere års konkurranser på jakt etter et C++ framework, der jeg kom over et vinnerbidrag uten kildekode. Har det ikke vært påkrevd tidligere år?

bondehagen
02-04-2012, 18:21
Angående kart. Kan du si noe om hvorvidt den blir 2- eller 4-veis symmetrisk, ettersom startposisjoner er mer rettferdig dersom man starter i hvert sitt hjørne?
Det blir symmetrisk start, ja, men ikke nødvendigvis hele kartet. Vent å se.


Jeg har kikket igjennom tidligere års konkurranser på jakt etter et C++ framework, der jeg kom over et vinnerbidrag uten kildekode. Har det ikke vært påkrevd tidligere år?
Vi har kildekoden på alle bidrag, men kan ha glemt å legge det ut. Vi kjører gjennom alle og går nøye gjennom kode på de beste bidragene + stikkprøver på andre.

C++ framework fra i fjor (som er det som ligner mest på hvordan årets oppgave er) finner du her: https://github.com/bondehagen/CloudWars/tree/master/AI%20Clients/C++

Zerd
02-04-2012, 19:45
Jeg antar det er denne entrien Eizon snakker om: ftp://ftp.gathering.org/TG/2011/CreativeCompos/HardcoreProgramming/entries/012/EnrahimCloud/
Det virker som at zipen er korrupt. Det gikk an å reparere zipen med Diskinternals Zip repair (http://www.diskinternals.com/zip-repair/). Legger den reparerte zipen med.

789

Marza
04-04-2012, 12:42
Hei! Har akkurat fått satt meg ned i vikingskipet og ser litt på konkurransen nu.. Har vi fått noen frist for når ting må leveres inn enda/hvordan de skal leveres?

Lurer også på om det er lov å bruke libraries, mer eksakt SDL_net for C++ (http://www.libsdl.org/projects/SDL_net/) for å ta seg av kommunikasjonsdelen av programmet? Kikker på frameworken fra i fjor ovenfor nå, men har litt erfaring med SDL_net fra før, så hadde vært greit å kunne bruke dette :)

etse
04-04-2012, 17:46
Ser ut som det er en bug i koden. Om noen står på spawnen din når du kjører utenfor banen blir du ikke flyttet til spawn. I stede får du lov til å fortsette å kjøre og komme deg tilbake inn på kartet. Tror ikke dette er helt itnentional.

bondehagen
05-04-2012, 00:45
Ser ut som det er en bug i koden. Om noen står på spawnen din når du kjører utenfor banen blir du ikke flyttet til spawn. I stede får du lov til å fortsette å kjøre og komme deg tilbake inn på kartet. Tror ikke dette er helt itnentional.
A feature, not a bug :p Hvis du ser på oppgaven så er koden faktisk slik det står spesifisert. Vi kom riktignok på at dette ville være en konsekvens etter oppgaven var publisert, men har valgt å ikke gjøre noe med det. Hvis du klarer å utnytte dette, så har du faktisk lov til det.

Medrakil
06-04-2012, 17:24
Er det tillatt å bruke flere tråder?

tsjiller
07-04-2012, 16:21
Her er resultatet fra playoffen for de som ikke var der: http://bilder.driftfun.no/d/178679-4/114137.jpg

Sock
08-04-2012, 02:30
gg Anders og Anders for en god og utfordrende oppgave!
Håper på en like bra konkuranse til neste år!

Og credz til Shad!

tsjiller
08-04-2012, 18:37
Fant ut hvorfor resultatene blei så rare på finalemappet 4. Det mangler en stjerne i ene 'løypa':
ftp://ftp.gathering.org/TG/2012/CreativeCompos/HardcoreProgramming/simulator/Maps/Finale4.txt

Kj3k53
09-04-2012, 21:55
Creds til Shad!
Lasta nettopp ned AI-en hans, og fyrte opp 4 stk av den. utrolig hvor målrettet den var

shad
11-04-2012, 20:16
thx
and thx for this unique competition
sorry 4 my bad english on stage ;)