Gå til innhold

Anbefalte innlegg

Hei!

Jeg har akkurat startet med Python for noen dager siden. Har litt bakgrunn fra PHP og WebDev fra før, men ikke noe i noe stor skala. Så jeg bestemte meg for å gå for ett programmerings-/script språk. Og valget falte på Python av forskjellige grunner.

 

Men jeg har fått satt meg litt i gang i syntax og skrive måte i Python, og laget små scripts hittil, som kalkulerer forskjellige ting, som sjansen for å få Yatzee på ett kast for lekt litt med terninger for å komme i gang.

 

Men nå bestemte jeg meg for å prøve å lage ett "spill", eller hva nå enn jeg skal kalle det;

import time
import random

gold = 0
income = 1
upgrade_cost = 10

while True:
    print("Income: %i gold/sec - Gold: %i gold" % (income, gold), end="\r")
    gold += income
    # Set fast to be able to see how the progress is, as well as the luck
    time.sleep(0.1)
    luck = random.randint(0, 1000)

    if gold >= upgrade_cost:
        gold -= upgrade_cost
        income += 1
        upgrade_cost **= 1.06

    if luck == 123:
        lucky = 27 * income
        gold += lucky
        print('Winner winner chicken dinner! \n+%i gold' % lucky)

Her er det jeg hatt fått kokt sammen i dag, etter dagens skole og jobb. Ikke fått lagt noe sjel og arbeid inn i dette, men er selv småfornøyd med min egen start.

 

Som dere fort kan se, er ikke dette særlig interaktivt. Men som de fleste IDLE spill man finner på nettet for dagen, så sanker man "valuta" og oppgraderer 'ett eller annet'. Her er jo alt på full automatik, og har ett lite flakslodd i seg.

 

Meningen med denne posten, er at jeg vil komme med ut i ett community en eller annen plass å se hva andre gjør, dele mine egne verk, men ikke minst lære!

 

Si gjerne din mening om dette scriptet, ris eller ros. Og hva du ser som potensial!

Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse

Heisann!

Her er en påstand: Dersom to spillere spiller dette spillet; vinner den med raskest PC.

 

For å fikse problemet kan du prøve å skrive om fra en loop som bruker fastsatt søvntid, til en loop som bruker tidsdifferanse mellom nå - og forrige kall.

 

Fra toppen av hodet mitt så ville det kanskje blitt noe slikt:

ticksPerSecond = 30
targetDT = 1 / 30
incomePerSecond = 10
while True:
  dt = getCurrentTime() - lastTime
  lastTime = getCurrentTime()
  
  # use dt as delta time to calculate growth
  gold += (incomePerSecond * dt)
  # do your stuff

  time.sleep(targetDT - dt)

Bruker du tidsdifferanse riktig skal det ikke ha noe å si om loopen kjører 1000 ganger i sekundet, eller om den kjører 0.8 ganger i sekundet.

 

Bra jobba så langt! Lykke til :)

EDIT: kan være smart å ha et gitt antall loddtrekninger per sekund også.

Endret av Enthroner
Lenke til kommentar

Takk for gode tilbakemeldinger!

 

@Enthroner:

Har sett på dette med Delta Tid i forhold til noen guider/tutorials på andre sider. Og kan selve begrepet i fra fysikken/matematikken på skolen.

 

Og hvis jeg forstod deg riktig så kan man bruke ett slikt program for å sammenligne ytelse fra forskjellige PCer for å se hvem som klarer og få x-antall income på kortest mulig tid?!

 

 

Det neste jeg ser for meg å gjør med dette lille prosjektet er å få skrevet koden i OOP for å lære meg det. I tillegg å få inn en 'command-line basert input' for å la bruker få styre selv oppgradering av income og implementere andre små "features".

 

 

 

På forhånd, takk for alle svar, og jeg setter stor pris på tips for veiledning og forbedringer!

Lenke til kommentar

Hei igjen kongebra!

OOP høres ut som en veldig bra oppgave videre! Du finner sikkert noen fine tutorials på å implementere en sånn delta time loop. Sikkert noen der ute som har en fin oppskrift :)

Jeg ville kanskje ikke si at spillet ville vært en god test på ytelse, men med tid vil du se forskjell fordi koden utenfor sleep vil kjører raskere så den totale tidslinjen blir kortere.

 

Ha en kongebra dag videre ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...