Goedenavond,

Ik ben momenteel bezig met het maken van een eigen browserspel (nee je kan je niet registreren enzo), het aanvallen en dergelijke doet het al. Echter zit ik met één probleem: dat ik geen idee heb hoe ik het voor elkaar krijg om de grondstoffen eerlijk verdeelt te stelen, er zijn in het spel drie soorten grondstoffen (ijzer, silicium en uranium), stel dat mijn leger een draagcapaciteit van 900 heeft, dan zouden ze dus als er van elke grondstof 300 aanwezig is in de basis die wordt geplundert van elk 300 naar huis moeten dragen, maar als er nou eens maar 200 van silicium aanwezig is dan zouden ze dus 350 ijzer, 200 silicium en 350 uranium moeten plunderen. Iemand enig idee hoe ik dit goed verdeelt ga krijgen? Bij voorbaat dank.

- Jeroenganges
Lees je eigen bericht nog eens en vraag je dan af of dit verhaal duidelijk is voor iemand die niet weet waar je mee bezig bent. Ik denk het niet, voor mij niet in ieder geval...
Ik heb de begin post aangepast, snap je het nu beter? :)
Controleer eerst of er van elke grondstof voldoende aanwezig is. Zo ja, neem dan van elke 1/3 van de draagcapaciteit mee. Zo niet, bekijk dan van welke grondstof er hoeveel te weinig is en verdeel dat over de andere twee grondstoffen. Controleer vervolgens of er wel voldoende van die grondstoffen aanwezig is en zo niet, verdeel de mee te nemen hoeveelheid dan weer opnieuw.

Dit is een kwestie van een reeks if-else statements op een slimme manier opstellen. Ik heb een opzetje gegeven, hoe je dat in PHP programmeert lijkt me een mooi klusje om zelf uit te zoeken...
Inputs voor dit script:
$draagcapaciteit
$ijzer_aanwezig
$uranium_aanwezig
$sicilium_aanwezig

Outputs van dit script:
$ijzer_stelen
$uranium_stelen
$sicilium_stelen

<?php
$ijzer_stelen = $draagcapaciteit / 3 - 1;
$uranium_stelen = $draagcapaciteit / 3 - 1;
$sicilium_stelen = $draagcapaciteit / 3 - 1;
$extra_verdelen = 3;
while ($extra_verdelen>0)
{
  $extra_verdelen = 0;
  if ($ijzer_stelen>$ijzer_aanwezig)
  {
    $extra_verdelen += ($ijzer_stelen-$ijzer_aanwezig);
    $ijzer_stelen -= ($ijzer_stelen-$ijzer_aanwezig);
  }
  if ($uranium_stelen>$uranium_aanwezig)
  {
    $extra_verdelen += ($uranium_stelen-$uranium_aanwezig);
    $uranium_stelen -= ($uranium_stelen-$uranium_aanwezig);
  }
  if ($sicilium_stelen>$sicilium_aanwezig)
  {
    $extra_verdelen += ($sicilium_stelen-$sicilium_aanwezig);
    $sicilium_stelen -= ($sicilium_stelen-$sicilium_aanwezig);
  }
  if ($sicilium_stelen<$sicilium_aanwezig) $sicilium_stelen +=($extra_verdelen/3);
  if ($ijzer_stelen<$ijzer_aanwezig) $ijzer_stelen +=($extra_verdelen/3);
  if ($uranium_stelen<$uranium_aanwezig) $uranium_stelen +=($extra_verdelen/3);
  $totaal_aanwezig = $uranium_aanwezig + $ijzer_aanwezig +  $sicilium_aanwezig;
  if ($totaal_aanwezig<$draagcapaciteit)
  {
    $uranium_stelen -= ($draagcapaciteit-$totaal_aanwezig)/3
    $ijzer_stelen -= ($draagcapaciteit-$totaal_aanwezig)/3
    $sicilium_stelen -= ($draagcapaciteit-$totaal_aanwezig)/3
  }
}
?>


Zoiets?
Met dat script zit je nog wel met het probleem dat je bij het /3 een float krijgt, en dan heb je weer kans op een oneindige loop, maar zo heb je een begin.
Bedankt voor de support,

echter is het nog steeds spaghetti in mijn hoofd over hoe ik het nou kan oplossen en de functie van Computer geeft geen goede getallen (probeer hem zelf maar) en ik ben ook niet in staat daar van goede getallen te maken. :')

- Jeroenganges
Tja, je zult toch zelf op een rijtje moeten krijgen hoe je dit probleem moet aanpakken. Dat vereist een bepaalde denkwijze en als je er nu niet direct uit komt is het wellicht verstandig om met wat eenvoudigere dingen te beginnen?
Het hele spel is qua codering al af behalve dit. :')

Maar ik kijk er morgen wel weer naar, heb er gewoon te lang aan gewerkt vandaag.

- Jeroenganges

Reageren