Dit is de laatste opdracht:
deze is ingestuurd door dUSTY en hij zal dan ook alle vragen beantwoorden
Deze opgave loopt tot 12 januari.
oplossingen naar gotcoders@gdries.com
<hr>
Opdracht 4: -Het AI Spel-
Dit spel heeft geen aansprekende naam, echter wel een aantal regels
.
Er wordt gespeeld met een speelvak onderverdeeld in vakken. ( bijvoorbeeld 10x10 )
Er zijn een x aantal spelers ( 2 tot 9 spelers ).
Elke speler heeft zijn eigen "kleur" die hier wordt voorgesteld door een getal ( 1 t/m 9)
Bij de eerste ronde mag elke speler 1 zet doen. Hierbij geven ze aan welke vak ze willen hebben.
Voor het kiezen van een vak, geld dat deze altijd leeg moet zijn of al de kleur hebben van de speler.
Betekent ook dat je vakken kunt kiezen die compleet uit elkaar liggen, je vakken hoeven namelijk niet tegen elkaar aan te liggen.
Als een vak leeg is is het aantal punten van de vak 0.
Als de speler een vak kiest (die uiteraard geldig is) krijgt die vak de kleur van de speler.
Ook geldt dat de waarde van die vak met 1 punt wordt verhoogd. Dus als er 2 punten op staan en men kiest dat vak wordt het aantal punten 2+1=3 punten.
Uiteraard om het moeilijker te maken geldt dat als het vak het aantal punten ( of meer ) van het aantal aanliggende beschikbare vakken heeft dat deze wordt verminderd met het aantal aanliggende vlakken, de aanliggende vlakken krijgen de kleur van de speler en bij al die vakken wordt dus 1 punt opgeteld.
Als een vlak 0 punten heeft is het vak weer vrij en kan het bezet worden door elke speler (dus kleur van het vak wordt gewist).
Beschikbare vakken zijn de vakken die een speler aan het begin van het spel zou kunnen kiezen (dus waar geen muren staan).
Muren zijn vakken die compleet bezet zijn en nooit gekozen kunnen worden door de speler, het gehele vak van 10x10 is dus omgeven met een muur.
Er kunnen ook muren in het speelveld zelf staan (waardoor het aantal beschikbare vakken in het veld dus minder wordt).
Wat dus leuk wordt is dat als het vak die een waarde erbij heeft gekregen door die "explosie" ook het aantal (of meer) van zijn aanliggende vakken heeft dat deze zich ook weer gaat opdelen.
Wat voorbeeldjes (dat zal wel nodig zijn inmiddels
):
We gaan naar de hoek kijken.
We hebben even elk vak een nummer gegeven.
De muren zijn X.
als je naar vak 1 kijkt zie je dat er maar 2 aanliggende vakken zijn.
We zetten er 1 punt op.
Als we er nu nog een punt op zetten zou je krijgen
Echter is dit het aantal van aanliggende vakken. dus wordt deze opgedeeld daarover.
Ander voorbeeldje:
We zetten nu 1 punt erbij op vak 2.
3 is toevallig het aantal aanliggende vakken. dus verdelen we deze daaronder.
Je ziet nu ook dat het aantal in vak 1 het aantal heeft van zijn aanliggende vakken dus gaan we die ook weer opdelen.
Zo zie je dus dat er een kettingreactie kan ontstaan.
Na de eerste ronde heeft een speler (a) ALTIJD minimaal EEN vak nodig om verder te kunnen spelen, betekent dus als deze speler (a) zijn vakken verliest doordat een tegenstander alle resterende vakken van deze speler veroverd dat speler (a) is uitgespeeld en heeft verloren.
De winnaar van het spel is dus de kleur die als laatste overblijft.
De rondes gaan altijd in dezelfde volgorde.
Invoer:
De invoer is opgebouwd als volgt:
Eerste regel heeft slechts EEN nummer dit nummer is het nummer van de speler.
Eerst komt het speelveld met de eigenaren. een spatie betekent dat het veld onbezet is.
Een X betekent dat er een muur staat.
Hierna komt een witregel (een lege regel) Daarna komt hetzelfde veld overnieuw maar dan met het aantal punten dat op elk veld staat.
Dit is alle invoer die je elke keer krijgt.
let op
Je programma mag per zet maximaal maar 1 of 2 minuten lopen.
Er is ALTIJD een aanliggend vak, er zijn geen afzonderlijke gedeelten.
(dus het hele speelveld is compleet met elkaar verboden)
Dus niet zoiets als:
Alles heeft EEN doorgang.
De uitvoer moet slechts bestaan uit 2 regels. Deze 2 regels moet eerst de X coordinaat zijn.
De volgende regel zal de Y coordinaat zijn waar je een punt wilt neerzetten.
In dit voorbeeld is de linksbovenste BESCHIKBARE veld (die dus door speler 1 is bezet) de coordinaat 1,1 .
Indien de coordinaat teruggegeven een illegale zet is ( veld is bezet door een andere speler, of er staat een muur, of het is buiten het speelveld ) wordt de zet als illegaal gekenmerkt.
En de beurt van de speler is voorbij (dus een soort pass).
Als men express een pass wilt doen *MOET* men een (0,0) teruggeven en dat wordt dan aangemerkt als een "pass".
tot slot:
Als men hun eigen logaritme goed documenteerd zal dusty alle uiteindelijke logaritmen vertalen naar delphi (indien men er niets tegen heeft) en het verwerken in het spel zelf en men kan dat spel dan gratis (uiteraard) downloaden, en spelen ( als mens tegen computer of tegen meerdere computers).
deze is ingestuurd door dUSTY en hij zal dan ook alle vragen beantwoorden
Deze opgave loopt tot 12 januari.
oplossingen naar gotcoders@gdries.com
<hr>
Opdracht 4: -Het AI Spel-
Dit spel heeft geen aansprekende naam, echter wel een aantal regels
Er wordt gespeeld met een speelvak onderverdeeld in vakken. ( bijvoorbeeld 10x10 )
Er zijn een x aantal spelers ( 2 tot 9 spelers ).
Elke speler heeft zijn eigen "kleur" die hier wordt voorgesteld door een getal ( 1 t/m 9)
Bij de eerste ronde mag elke speler 1 zet doen. Hierbij geven ze aan welke vak ze willen hebben.
Voor het kiezen van een vak, geld dat deze altijd leeg moet zijn of al de kleur hebben van de speler.
Betekent ook dat je vakken kunt kiezen die compleet uit elkaar liggen, je vakken hoeven namelijk niet tegen elkaar aan te liggen.
Als een vak leeg is is het aantal punten van de vak 0.
Als de speler een vak kiest (die uiteraard geldig is) krijgt die vak de kleur van de speler.
Ook geldt dat de waarde van die vak met 1 punt wordt verhoogd. Dus als er 2 punten op staan en men kiest dat vak wordt het aantal punten 2+1=3 punten.
Uiteraard om het moeilijker te maken geldt dat als het vak het aantal punten ( of meer ) van het aantal aanliggende beschikbare vakken heeft dat deze wordt verminderd met het aantal aanliggende vlakken, de aanliggende vlakken krijgen de kleur van de speler en bij al die vakken wordt dus 1 punt opgeteld.
Als een vlak 0 punten heeft is het vak weer vrij en kan het bezet worden door elke speler (dus kleur van het vak wordt gewist).
Beschikbare vakken zijn de vakken die een speler aan het begin van het spel zou kunnen kiezen (dus waar geen muren staan).
Muren zijn vakken die compleet bezet zijn en nooit gekozen kunnen worden door de speler, het gehele vak van 10x10 is dus omgeven met een muur.
Er kunnen ook muren in het speelveld zelf staan (waardoor het aantal beschikbare vakken in het veld dus minder wordt).
Wat dus leuk wordt is dat als het vak die een waarde erbij heeft gekregen door die "explosie" ook het aantal (of meer) van zijn aanliggende vakken heeft dat deze zich ook weer gaat opdelen.
Wat voorbeeldjes (dat zal wel nodig zijn inmiddels
We gaan naar de hoek kijken.
code:
1
2
3
4
5
| XXXXX X123X X456X X789X XXXXX |
We hebben even elk vak een nummer gegeven.
De muren zijn X.
als je naar vak 1 kijkt zie je dat er maar 2 aanliggende vakken zijn.
We zetten er 1 punt op.
code:
1
2
3
4
5
| XXXXX X1 X X X X X XXXXX |
Als we er nu nog een punt op zetten zou je krijgen
code:
1
2
3
4
5
| XXXXX X2 X X X X X XXXXX |
Echter is dit het aantal van aanliggende vakken. dus wordt deze opgedeeld daarover.
code:
1
2
3
4
5
| XXXXX X 1 X X1 X X X XXXXX |
Ander voorbeeldje:
code:
1
2
3
4
5
| XXXXX X12 X X X X X XXXXX |
We zetten nu 1 punt erbij op vak 2.
code:
1
2
3
4
5
| XXXXX X13 X X X X X XXXXX |
3 is toevallig het aantal aanliggende vakken. dus verdelen we deze daaronder.
code:
1
2
3
4
5
| XXXXX X2 1X X 1 X X X XXXXX |
Je ziet nu ook dat het aantal in vak 1 het aantal heeft van zijn aanliggende vakken dus gaan we die ook weer opdelen.
code:
1
2
3
4
5
| XXXXX X 11X X11 X X X XXXXX |
Zo zie je dus dat er een kettingreactie kan ontstaan.
Na de eerste ronde heeft een speler (a) ALTIJD minimaal EEN vak nodig om verder te kunnen spelen, betekent dus als deze speler (a) zijn vakken verliest doordat een tegenstander alle resterende vakken van deze speler veroverd dat speler (a) is uitgespeeld en heeft verloren.
De winnaar van het spel is dus de kleur die als laatste overblijft.
De rondes gaan altijd in dezelfde volgorde.
Invoer:
De invoer is opgebouwd als volgt:
Eerste regel heeft slechts EEN nummer dit nummer is het nummer van de speler.
Eerst komt het speelveld met de eigenaren. een spatie betekent dat het veld onbezet is.
Een X betekent dat er een muur staat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| 1 XXXXXXXXXXXX X1 2 X X 4 X X 2 1 X X 3 X X 1 X X X X 3 X X 2 4 X X 3 X X 4 X XXXXXXXXXXXX |
Hierna komt een witregel (een lege regel) Daarna komt hetzelfde veld overnieuw maar dan met het aantal punten dat op elk veld staat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
| XXXXXXXXXXXX X1000100000X X0000000010X X0010010000X X0000000100X X0010000000X X0000000000X X0000001000X X0100000010X X0001000000X X0000001000X XXXXXXXXXXXX |
Dit is alle invoer die je elke keer krijgt.
let op
Je programma mag per zet maximaal maar 1 of 2 minuten lopen.
Er is ALTIJD een aanliggend vak, er zijn geen afzonderlijke gedeelten.
(dus het hele speelveld is compleet met elkaar verboden)
Dus niet zoiets als:
code:
1
2
3
4
| XXXXXXX X X X X X X XXXXXXX |
Alles heeft EEN doorgang.
De uitvoer moet slechts bestaan uit 2 regels. Deze 2 regels moet eerst de X coordinaat zijn.
De volgende regel zal de Y coordinaat zijn waar je een punt wilt neerzetten.
In dit voorbeeld is de linksbovenste BESCHIKBARE veld (die dus door speler 1 is bezet) de coordinaat 1,1 .
Indien de coordinaat teruggegeven een illegale zet is ( veld is bezet door een andere speler, of er staat een muur, of het is buiten het speelveld ) wordt de zet als illegaal gekenmerkt.
En de beurt van de speler is voorbij (dus een soort pass).
Als men express een pass wilt doen *MOET* men een (0,0) teruggeven en dat wordt dan aangemerkt als een "pass".
tot slot:
Als men hun eigen logaritme goed documenteerd zal dusty alle uiteindelijke logaritmen vertalen naar delphi (indien men er niets tegen heeft) en het verwerken in het spel zelf en men kan dat spel dan gratis (uiteraard) downloaden, en spelen ( als mens tegen computer of tegen meerdere computers).