Avatar billede losdivinos Nybegynder
12. december 2011 - 17:01 Der er 27 kommentarer og
1 løsning

Harry Potter Valuta

Hey! :)

Jeg er igang med et Harry Potter browserspil.

Når man køber noget bliver galleoner, sølvsegl og knut lagt sammen
og bliver lavet til knut. Derefter ryger det i databasens kolonne med navnet knut.

1 galleon = 17 sølvsegl
1 sølvsegl = 29 knut

Når man åbner scriptet skal den omregne alle knut til så mange
galleoner som muligt og tage det overskydende og regne til så mange
sølvsegl som muligt. Det til rest forbliver knut.

På forhånd 1 million gange tak! :)
Avatar billede erikjacobsen Ekspert
12. december 2011 - 17:13 #1
Ja, livet ville være nemmere med den omregning. Prøv

  $knut=23234;

  $segl = floor($knut / 29); $knut-=$segl*29;
  $gall = floor($segl / 17); $segl-=$gall*17;


  print "$gall galleoner, $segl soelvsegl, $knut knut  = ".($gall*17*29+$segl*29+$knut)."<br>";

og 1 million svarer i øvrigt til 2028 galleoner, 6 soelvsegl, 22 knut
Avatar billede olebole Juniormester
12. december 2011 - 17:32 #2
<ole>

Sjovt, som tiderne ændrer sig. I min skoletid så vi det som et helvede at skulle lave beregninger på brittisk valuta (1 pund = 20 shilling og 1 shilling = 12 pence) - og de stakkels brillebærere blev mobbet på grund af grimme sygekassebriller.

I dag bliver den slags rubriceret som 'forlystelser'  :D

/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 18:31 #3
jeg tror jeg ville lave det via en function, og anvende modulus og division
<?php
function Knut2Array($knut){   
    $ar = array();       
    $ar['galleon'] =  (int) ($knut/(17*29));
    $ar['sølvsegl'] = (int) (($knut/17)%29);
    $ar['knut'] = (int) ($knut%17);
    return $ar;       
}
$knut=18;
print_r(Knut2Array($knut));       
?>

output
Array ( [galleon] => 0 [sølvsegl] => 1 [knut] => 1 )

eriks udregning påstår godt nok det skulle værer
0 galleoner, 0 soelvsegl, 18 knut = 18
der er vist en fejl

@losdivinos kig lige på http://www.eksperten.dk/list/aabnespoergsmaal/losdivinos
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 18:36 #4
ups, jeg tager lige udregnings fejlen i mig igen, jeg skal vist lige bytte om på 17 og 29 :)
<?php
    function Knut2Array($knut){   
        $ar = array();       
        $ar['galleon'] =  (int) ($knut/(17*29));
        $ar['sølvsegl'] = (int) (($knut/29)%17);
        $ar['knut'] = (int) ($knut%29);
        return $ar;       
    }
?>

undskyld erik
Avatar billede losdivinos Nybegynder
12. december 2011 - 18:57 #5
Undskyld, men jeg er 100% forfærdelig til arrays og function... To ting jeg egentlig har sprunget over.

Den skal få brugerens info fra $userstats['valutaher'] og kunne godt bruge et eksempel på, hvordan man skulle indsætte det i MySQL igen, når det kommer fra et array. :)

Men tak for svarende indtil nu! :D
Avatar billede olebole Juniormester
12. december 2011 - 19:02 #6
"Undskyld, men jeg er 100% forfærdelig til arrays og function... To ting jeg egentlig har sprunget over." >> Jamen, så har du jo stadig til gode at få begyndt! Uden funktioner og arrays er det komplet umuligt at lave noget brugbart i PHP
Avatar billede losdivinos Nybegynder
12. december 2011 - 19:10 #7
Ja, korrekt.

De fleste ting kan godt laves uden.

Men ja, hvis jeg fik en eksempelkode på det jeg ønskede, ville jeg 100% hurtigt kunne se hvordan, at det fungerede. :)

Skam ikke for at virke skummel eller ond på nogen som helst måde.

Det er bare ikke lige DET, jeg mangler hjælp til her. :)
Avatar billede olebole Juniormester
12. december 2011 - 19:17 #8
"De fleste ting kan godt laves uden." >> Nej, næsten intet kan laves uden!

Det svarer til at ville køre Formel 1 uden brændstof og dæk. Man nok skubbe øsen rundt på banen, men det har intet med race at gøre. Måske opdager man det ikke, hvis man aldrig har kørt race - men efter bare én tur rundt på banen med brændstof og dæk, ser man helt anderledes på tingene  *o)
Avatar billede olebole Juniormester
12. december 2011 - 19:20 #9
- og jeg prøver ikke på nogen måde at få dig til at være 'skummel eller ond', men blot hjælpe dig til at forstå, hvad PHP er - og hvad det kræver  =)
Avatar billede losdivinos Nybegynder
12. december 2011 - 19:22 #10
Dette er mit første problem jeg er stødt på, hvor det åbenbart er nødvendigt med function og array.

Har haft gang i PHP i godt et år og lavet flere projekter. :)

Men tak, jeg vil helt sikkert lære Arrays og functions! Har du blot 1 minut til at rette den korte kode til, så den vil passe til mine behov? :) Det ville rede min dag.
Avatar billede olebole Juniormester
12. december 2011 - 19:36 #11
Jeg vil ikke nøjes med at redde en enkelt sølle dag ... jeg vil redde dit liv! Derfor ønsker jeg ikke at lave et eksempel uden funktioner eller arrays. Hvis du har rodet med PHP i et år, er du godt 11 måneder for sent på den med de værktøjer. Det er på høje tid, du kommer i gang med PHP  *o)
Avatar billede losdivinos Nybegynder
12. december 2011 - 19:54 #12
Dejlige ole ! :-*
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 20:02 #13
<?php
function Knut2Array($knut){   
    $ar = array();       
    $ar['galleon'] =  (int) (($knut/493)); //(29*17=493)
    $ar['sølvsegl'] = (int) (($knut/29)%17);
    $ar['knut'] = (int) ($knut%29);
    return $ar;       
}
// $valuta = Knut2Array($userstats['valutaher']);
// $sql = "insert into mintabel (Galleon, Silversegl, Knut) VALUES ($valuta['galleon'], $valuta['sølvsegl'], $valuta['knut'])";
$valuta = Knut2Array(100000);
echo "gallon=".$valuta['galleon']." sølvsegl=".$valuta['sølvsegl']." knut=".$valuta['knut'];
?>


Dette er mit første problem jeg er stødt på, hvor det åbenbart er nødvendigt med function og array.
det er ikke tvingende nødvendigt med en function og et array, men det gør det ufattelig nemt og lige til at genbruge, eriks forslag virker også,
men ved brug af functioner kan du gører din code nemmere at læse, og i nogle tilfælde mindre, samt nemmere at vedligeholde
functioner er noget af det første du skal lære, som ole skriver i #11, >er du godt 11 måneder for sent på den med de værktøjer<

når du har lært at lave og bruge functioner vil du hurtigt lave et functions bibliotek, som du bare genbruger i diverse projecter, ved bare at includere filen
nb: $ar['sølvsegl'] burde nok omdøbes så det ikke indeholer ø :).
Avatar billede losdivinos Nybegynder
12. december 2011 - 20:07 #14
Mange tak. Spillet er på engelsk, så det hedder egentlig også bare sickles. ;)

Opretter du lige et svar?
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 20:28 #15
nope springer over, erik var først med løsningen, så skulle der uddeles point skulle det værer til ham, selv om han ikke samler.

men løsningen med en function er den rigtige efter min mening, men jeg har vist også en "svaghed" for functioner :)

læg selv et svar og accepter dette
Avatar billede losdivinos Nybegynder
12. december 2011 - 20:33 #16
Nu har jeg så desværre et problem! :/

Har du eventuelt skype, så vi eventuelt kan komme på teamviewer, hvor jeg kan vise dig 100% hvad jeg mener? Er sikker på det ikke tager ret lang tid. :)
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 20:45 #17
afh videns deling forgår alt support herinde, og ikke ved bruge af skype, teamwiever eller ligende, du må prøve at forklare problemet, det kunne være ole eller erik har løsningen før mig, de er 2 meget fagligt dygtige personer, eller der kunne være andre der læste med
Avatar billede losdivinos Nybegynder
12. december 2011 - 20:56 #18
All right then :)

Sådan ser filen ud nu


<?
// Converts Valuta into max possible galleons, then sickles and at last knuts

$knuts = $userstats['knuts'];

function Knut2Array($knuts){   
    $ar = array();       
    $ar['galleons'] =  (int) (($knuts/493)); //(29*17=493)
    $ar['sickles'] = (int) (($knuts/29)%17);
    $ar['knuts'] = (int) ($knuts%29);
    return $ar;       
}
$valuta = Knut2Array($userstats['id']);
mysql_query("UPDATE users SET galleons = '$valuta[galleons]' And sickles = '$valuta[sickles]' AND knuts = '$valuta[knuts]' WHERE id = '$userstats[id]'");
$valuta = Knut2Array(100000);
echo "gallon=".$valuta['galleons']." sølvsegl=".$valuta['sickles']." knut=".$valuta['knuts'];


?>


Den echo'er

gallon=202 sølvsegl=14 knut=8

I mysql har jeg galleons = 0 sickles = 17 knuts = 234

?

Desuden opdaterer den INTET i MySQL. :(
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 21:26 #19
jeg har flyttet dine ' så '$valuta[galleons]' bliver til $valuta['galleons'] osv, skal værdierne ind som stringe skal de escapes '$valuta[\'galleons\']' samt fjernet dine and og lavet dem om til komma
(utested)
[div
]mysql_query("UPDATE users SET galleons = $valuta['galleons'], sickles = $valuta['sickles'], knuts = $valuta['knuts'] WHERE id = $userstats['id']");
[/div]
Avatar billede olsensweb.dk Ekspert
12. december 2011 - 21:28 #20
prøver lige at sætte ]rigtigt :)
mysql_query("UPDATE users SET galleons = $valuta['galleons'], sickles = $valuta['sickles'], knuts = $valuta['knuts'] WHERE id = $userstats['id']");
Avatar billede losdivinos Nybegynder
12. december 2011 - 22:13 #21
Nope dude! :/
Det giver T_STRING error :)
Avatar billede olebole Juniormester
12. december 2011 - 22:19 #22
"Det giver T_STRING error" >> Hvor? Hvad siger fejlen, præcist?
Avatar billede losdivinos Nybegynder
12. december 2011 - 22:23 #23
Det er fordi at query'en er skrevet forkert.

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

Men det den udregner er heller ikke korrekt jo. :(
Avatar billede olebole Juniormester
12. december 2011 - 22:33 #24
Hvad der udregnes kan være ligemeget, sålænge der er fejl i koden. Først skal dfejlene rettes - så kan du bekymre dig om resultatet  =)

Fejlen skyldes, der escapes i en i forvejen escaped streng. Du kan skrive sådan:


mysql_query("UPDATE users SET galleons = $valuta[galleons], sickles = $valuta[sickles], knuts = $valuta[knuts] WHERE id = $userstats[id]");

// - eller sådan:
mysql_query("UPDATE users SET galleons = ".$valuta['galleons'].", sickles = ".$valuta['sickles'].", knuts = ".$valuta['knuts']." WHERE id = ".$userstats['id']);

// - og allerhelst sådan:
mysql_query('UPDATE users SET galleons = '.$valuta['galleons'].', sickles = '.$valuta['sickles'].', knuts = '.$valuta['knuts'].' WHERE id = '.$userstats['id']);

Avatar billede losdivinos Nybegynder
12. december 2011 - 22:42 #25
Works like a charm! :)

Den updater også MySQL nu.

Resultaterne er dog stadig helt i vejret. :)
Det samme med MySQL-results.
Avatar billede erikjacobsen Ekspert
12. december 2011 - 23:39 #26
I linien

    $valuta = Knut2Array($userstats['id']);

skal der nok ikke kaldes med et id, men med et antal knut.
Avatar billede losdivinos Nybegynder
13. december 2011 - 08:39 #27
Uff! Got it working 100% now!

Tusind tak drenge!

Opret gerne et svar, en eller anden.
Avatar billede losdivinos Nybegynder
11. august 2012 - 18:51 #28
asda
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester