Forside Fora Spil Udvikling Vil prøve at lave et kortspil – Krig

Tagget: ,

Currently, there are 0 users and 1 guest visiting this topic.
  • Oprettet af
    Emne
  • #0
    WeezY
    Rusher
    Offline

    Hej alle

    jeg har startet op med at prøve at lave kortspillet krig. Er helt ny til kodning.
    jeg har fået det til at virke i Python, men det er jo kun tekst, så vil prøve at få det over i Godot Engine:
    med rigtige kort billeder, så det får et interface.
    1: træk et kort fra bunken
    2: smid det kort ud til modstander.
    repeat

    Hvordan gør man det, så det bliver mere grafisk og ikke bare tekst.
    kan regne ud man skal have en bunke/deck i midten – linke 01 – 13 til en billede fil .png eller .jpg – så der 52 kort
    en firkant ved siden af, hvor man kan ligge ens kort og modstanders bagefter. så noget Drag and drop. se hvem der vinder.

    import random
    
    #suit, hvis jeg tilføjer den., kommer tie ikke til at virke.
    suits = ("Hearts", "Diamonds", "Clubs", "Spades")
    
    ranks = [
        '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12',
        '13'
    ]
    
    #tilføj Suits [(rank, suit)
    deck = [(rank) for suit in suits for rank in ranks]
    
    random.shuffle(deck)
    
    #Virker ikke
    face_cards = {1: 'Ace', 11: 'Jack', 12: 'Queen', 13: 'King'}
    
    def draw_card(player):
      card = deck[0]
      deck.remove(deck[0])
      print(player + " drew the " + str(card))
      return card, player
    
    drawn_card1, player1 = draw_card("Player one")
    drawn_card2, player2 = draw_card("Player two")
    
    if drawn_card1 > drawn_card2:
      print("Player one wins!")
    elif drawn_card1 < drawn_card2:
      print("Player two wins!")
    else:
      print("It's a tie!")
    
    #hvor mange kort man har tilbage ud af de 52 kort
    #En score, så man kan se hvem der vinder
    #reset knap - New game
    • Dette emne blev ændret 8 måneder siden af WeezY.
Viser 30 svar - 1 til 30 (af 46 i alt)
  • Forfatter
    Svar
  • #1
    Bams
    Rusher
    • 357 Indlæg
    Offline

    Det er ikke fordi jeg ikke vil hjælpe, men hvis jeg skulle starte med at lære programmering i dag, så tror jeg sjældent jeg ville forlade min foretrukne LLM.

    Her indsat dit oplæg herfra denne post:

    https://chat.openai.com/share/1f550ba7-17f1-4db3-8890-5c70ff7ed95d

    #2
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #0 Det er en KÆMPE opgave du har givet dig selv der.

    Hvordan spiser man en elefant? Ved at tage en lille bid af gangen.

    Bryd din opgave op i mindre projekter og når du har løst dem enkeltvis, så byg derefter et samlet projekt med alle delene sat sammen. Det blir helt umuligt for dig hvis du vil løse alle problemer i det første projekt du bygger.

    Hvis du bryder det op i små bider, vil det være meget nemmere for andre at komme med gode bud på din problemstilling. Det er lidt svært hurtigt at svare på hvordan man laver et helt spil Krig uden at lave det hele for dig.

    Så prøv dig frem med små bider og del elementer. Og det kan du så stille spørgsmål til og sandsynligheden for at få hjælp vil være meget større.

    Det er ikke nemt at lave spil, men det er rigtig sjovt når det lykkedes.

    Brackeys, en dansker der har kørt en større Unity Kanal på Youtube (også en game engine), har lige annonceret at han i næste uge, efter 3 års pause, starter ud med at lave tutorials til Godot. Det tror jeg helt klart du skal følge med i.

    https://www.youtube.com/@Brackeys

    • Dette svar blev ændret 7 måneder, 4 uger siden af Festival_H.
    #3
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    #1 ja, AI er den lette vej, den er bare ikke den bedste til (Godot)GDscript endnu.
    det ligner som om det er meget rigtig det den skriver, må lige prøve.

    #2 Jeps, ved det… laver 2D/3D til daglig, men har aldrig rigtig godt i gang med kodning før nu… Har arbejdet i UE2, UDK, UE4 og UE5(Unreal engine) så ja, lave et spil er svært…

    så også derfor jeg “kun” vil prøve at se om jeg kan lave det her:
    1: træk et kort fra bunken
    2: smide det kort ud til modstander.
    repeat

    Selve krig spillet virker. bare i tekst udgave.

    Jeg har gået dem her igennem og det meste giver mening.:
    https://www.w3schools.com/python/exercise.asp?

    man kan kopier koden ind her også spillet:
    https://www.w3schools.com/python/trypython.asp?filename=demo_default

    #4
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Men start med at at sætte dig ind i Godot.

    Hvordan lægger man en asset ind?
    Hvordan vises denne asset?
    Hvordan flytter man rundt på den med user input? Mus eller keyboard.

    Jeg kender hverken python eller Godot, så jeg kan ikke hjælpe med noget specifikt på det plan.

    • Dette svar blev ændret 7 måneder, 4 uger siden af Festival_H.
    #5
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Og når du siger ‘modstanderen’ er du så allerede i multiplayer tanker? Online/local?

    Hvorom alting er, så start med single player mod computeren.

    #6
    VampiricEye
    Rusher
    • 3851 Indlæg
    Offline

    Find et Godot tutorial på YouTube. Eller tag et kig på Udemy, hvis du er mere til den slags.

    Nintendo Influencer

    På dansk: https://www.youtube.com/channel/UC-6I6HgrpYjimEpvayLu3Vg

    På engelsk: https://www.youtube.com/channel/UCNNzj5gu0Iolj4vcNIp1IUA

    #7
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    #4 Godot er ret let, nå man kommer fra Unreal Engine. jeg har set 10 guide på youtube, så den del virker ikke så slem, men nu må vi se. #5 Det er også singleplayer, jeg mente user vs. cpu. det er Kodning der er svært for mig, men jeg må bare læse/se lidt mere.

    #6 jeg vil prøve at se ldit mere, der er bare ikke mange gode kortspil Godot YT tutorials, men som Festival siger kommer Brackeys med Godot tutorials, hvilket er super fedt.

    #8
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #7 Som sagt kender jeg ikke ne skid til python, MEN jeg går ud fra at der findes generelle structure som i andre programmerings sprog.

    Som jeg lige husker krig, så deler man bunken i 2, så hver spiller starter med at lave lige mange kort?

    Du skal bruge en GameManager klasse til at styre dit spil. I den har du alle reglerne for hvordan et spil Krig afvikles.

    Du har en Player klasse som har en Queue af Card klassen. Et Card har en Suit og en Value. Queue er LIFO

    Du skal have en Deck klasse. En Deck klasse kan Shuffle sin Queue af Cards og dele Cards ud.

    Ved spil start laver GameManageren et nyt Deck som blir blandet. GameManageren fordeler nu alle kort ud til hver Player.

    GameManager beder om at få en kort fra hver spiller og vurder nu om der er Krig. Hvis der er Krig, så skal den gøre hvad der skal til for at styre en Krig. Den som taber krigen får lagt alle Cards i sin Queue of Cards i bunden.

    Prøv at lave koden ovenfor uden at tænke på UI. Overhovedet. Få det til at virke i en console. Fordel de forskellige processer ud til de klasser det er mest passende for.

    Små bider. Een ting af gangen. Og debug dit kode, men du skriver det. Console.WriteLine er den perfekte ledsager til at debugge. (Ved ikke hvordan man skriver til konsollen i python, men det kan vel lade sig gøre?)

    • Dette svar blev ændret 7 måneder, 4 uger siden af Festival_H.
    #9
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Og helt ærligt vil jeg anbefale dig at skifte til C#. I mine øjne er C# et langt nemmere sprog at gå til end python for nybegyndere. Jeg læser mig til at Godot understøtter C#, men jeg ingen ide om det er sandt eller om det understøtter lige så godt som python. Jeg har udviklet i C# og .Net de sidste 20-ish år, så det vil jeg meget nemmere kunne hjælpe dig i end python.

    • Dette svar blev ændret 7 måneder, 4 uger siden af Festival_H.
    • Dette svar blev ændret 7 måneder, 4 uger siden af Festival_H.
    #10
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Og når jeg nu alligevel spørger til sprogvalg, så er det vel naturligt også at spørge til Engine valg.

    Hvorfor egentlig Godot? Hvis du kender til Unreal hvorfor så ikke blive i Unreal? Eller vælge Unity hvor script sproget er C#?

    #11
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    The English version af Krig 🙂

    https://bicyclecards.com/how-to-play/war

    #12
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    Hej Festival_H mange tak for alt det info.

    vil prøve at svare på det hele:
    Hvorfor ikke Unreal Engine. UE er ikke det bedste til 2D og så bruger de C++, hvilket jeg tror er lidt for hardcore at starte på. kunne lave det i blueprint, men vil godt lærer at kode rigtigt.

    Hvorfor Python, da jeg kan bruge det til mit arbejde og Blender.

    Godot har C#. Jege tænkte også meget over om jeg skulle bruge det, men endte med Python. ved godt jeg også kan bruge det i Unity. kan godt være jeg skifter, men prøver lige python af først.

    Jeg har lavet et kortspil jeg godt vil lave, men først vil jeg starte med kortspillet krig og se om jeg kan lave det.
    Jeg har en hel plan i Notion, hvor jeg har nedbrudt det til små bider, som du også forslog. skal jeg nok også lige gøre med Krig spillet – man bliver altid overrasket over hvor mange ting, man enlig gør i spillet.

    Du har skrevet en god del af det i #8 🙂

    #13
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #12 Jeg kan i øvrigt se at der ligger en masse forskellige C# eksempler på at lave Krig (Eller War) på nettet, så hvis du skal hente lidt inspiration ind, så kan du søge lidt på det. Og jeg synes helt bestemt du skal begynde at bruge klasser til at definer dine emner. GameManager, Player, Deck, Card og så er du GOLDEN. Det vil lære dig at indkapsle implementations detaljer (Encapsulation).

    #14
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    #13 ja, kan godt være C# er lettere at starte op på. kan se Unity har 1000000vis af tutorials i det. C++ virker bare alt for svært at starte med. Så håbede Python var en ok måde at komme ind på det, men der ikke så meget til spil.

    C# så kan jeg også bruge det i Godot og Unity, virker som en bedre plan. Er mest til open soruce, så holder mig nok stadig til Godot. virker også som om der er godt gang i det community, da Unity lavede nogle vilde pris ænderinger.

    sig til, hvis du finder en god tutorial på kortspillet. 🙂

    #15
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #14 Altså man kan jo også lave klasser i python, så jeg synes da du skal prøve at starte der.

    Jeg kan se at du ikke har brugt classes i dit kode i #0, så det var mest en opfordring til at begynde at tænke over at klassificere dit kode istedet for at have det hele i én stor blob.

    #16
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    I øvrigt vil det være en gode ide hvis du lader dit Ace korts value være 14 istedet for 1. Ace stikker King. Dens value er altid bare 14. Aldrig 1.

    #17
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Start med at lave en Deck klasse. Under oprettelse laver den en liste af 52 kort (Card klassen). Du giver også klassen en Shuffle funktion (der er en lang liste af forskellige shuffle algoritmer du skal forske i her) der blander dine kort. Du skal kunne trække (Draw) top kortet fra denne bunke. Kortet skal tages ud af listen. Måske skal Deck klassen også kunne tage kort tilbage i listen, men det ikke så vigtigt for at kunne løse dit Krig spil, men kunne være en løsning til andre spil du engang skal bruge din Deck klasse i.

    Deck klassen skal intet vide om Krig spillet dog. Dette Deck skal du også kunne bruge i andre spil, så du er her ved at bygge et lille library af genbrugeligt kode.

    Test dit kode. Lav en console app der bygger et nyt deck og laver en Shuffle og trækker så kort fra denne bunke indtil der ikke er flere kort at trække. Skriv kortets DisplayName (FaceValue + ” of ” + Suit) ud til konsollen. ‘King of Diamonds was drawn. There are 34 cards remaining in the deck’ fx.

    Så kan du lave en Player klasse. Player klassen har en Queue af Cards. En Queue fordi den aldrig skal blande sin bunke af kort. Der trækkes fra toppen med Dequeue og der lægges tilbage i bunken med Enqueue. Har kan du introducer en Hand klasse som implementere din Queue af Cards, men da det kan være meget forskelligt hvordan kort håndteres per spil, så kan det være svært at genbruge en Hand klasse. I det tilfælde vil Player klassen have en property ad typen Hand som Player klassen trækker kort fra og lægger kort tilbage i.

    Nu skal du så udvide din console app til at lave en Player og lave Draws på din Deck og lægge kort ind i Player klassens bunke (eller Hand hvis du vælger at have en Hand klasse)

    This is code modeling 🙂

    Giver det mening? Du kan jo lægge dit kode i en GitHub og så kigger jeg gerne dit igennem og kommer med input. Som sagt kender jeg ikke python, men hvis du bygger det, vil jeg sikkert sagtens kunne gennemskue det 🙂

    Nu har jeg jo helt fået lyst til at skrive min version af Krieg i C#!

    #18
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Krieg is done i version 0.1

    Jeg er dog overrasket over at selv med 3 kort ofret på en Krig at så kan spillet tage mange runder for at blive afgjort. Mit sidste spil spillede 349 runder før det blev afgjort. Og jeg stoppet bare spillet når en spiller ikke har flere kort. Så har man tabt når det når dertil.

    #19
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    håber jeg får tid til lidt kodning her i morgen, da jeg ikke har haft tid til det i weekenden.

    Det hele giver mening, jeg skal bare i gang… 🙂
    Tager mig jo nok 1-2 uger at få det til at virke. Håber jeg, er begyndt at forstå det mere og mere. Kan se nogle gange, når en tutorial/guide laver fejl og rettet det bagefter… Så noget må da side fast deroppe. 🙂

    kan se Brackeys lige er kommet med hans første Godot tutorial.

    #20
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #19 Ting tager tid. Jeg kunne heller ikke finde ud af det i starten, men det er blevet lidt nemmere nu 🙂 (blev datamatiker i 2002 og har arbejdet som udvikler lige siden)

    #21
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    jeps det gør de… har lavet min første lille test 🙂
    Et deck – randaom kort – en knap 🙂 se video.

    1. Det næste er hvordan jeg fordeler kortede, så hver person starter med 26 kort.
    2. Tie bliver nok lidt svære at lave, men vil da prøve.
    3. Hvem der vinder

    #22
    Bageren
    Rusher
    • 41 Indlæg
    Offline

    Sjovt projekt! Mht. just python, anvender jeg selv CustomTkinter for GUI til de 2 python project jeg har lavet. Studerer til Dataingenjör i sverige og er på andet år. Jeg har desvärre ikke brugt tid på at läre at lave spil i de diverse game IDEs der findes, men som sagt har jeg lavet små projekter som så anvender Tkinter.

    https://github.com/vikander86/Search_Algorithms_Visualizer

    Det förste program jeg lavede viser hvordan forskellige algoritmer regner ud fx. labyrint(a til b) og en 8-puzzle. Har så leget lidt med animation og timers, men det er stadigväk noget jeg ska bli dygtigere på. Har endnu ikke helt styr på Threads og använding af dem.

    https://github.com/vikander86/HTN_Visualizer

    Det näste er en implementation af PyHOP som er en Hieratherically Task Network planner, som er en ret sjov form for AI der en robot ska beväge sig mellem rum og flytte på en kasse. Jeg har fået mig fortalt at HTN planners användes flittigt for AI i spil for fjender, så de kan tage beslutninger ud fra hvad spilleren gör.

    Desuden er min kod stadigväk ganske mudret og jeg behöver stadigväk lärer mig “clean-code”.

    Mht. din kod, så om jeg forstår dig korrekt, så vil du kunne använde face_cards som en reference til dit deck? Men i och med dine “keys” i dit dictionary er integers og dit ranks array er en array af Strings, så kan du ikke lave en sammenligning. Så du kan eventuellt lave dit dict om til: face_cards = {’01’: ‘Ace’, ’11’: ‘Jack’, ’12’: ‘Queen’, ’13’: ‘King’}

    #21 Fedt!

    #23
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #21 Det er en rigtig fed Godot start 🙂 Congrats #WeezY

    Hvis jeg dog må være en lidt træls lærer, så vil jeg stadig anbefale dig at få styr på klasserne og spillets regler i en konsol udgave først. Det ved jeg ikke om du allerede har fået. Det vil gøre at du har 100% styr på netop hvordan du laver et Deck med 52 kort og hvordan du deler disse kort ud til spillerne og hvordan du trækker et kort fra hver spiller når spillet så går igang og sammenligner dem og afgør hvem der er vinderen af hånden eller om der er krig.

    Jeg kan ikke helt se hvad der er nede under denne Godot debugger session, så det kan også være du allerede har disse ting med, men det er den grafiske visning det kniber med.

    Object Oriented Programming er ret svær at fange i starten, men det er en meget vigtig byggesten i din fremtidige rejse inden for programmering lige meget hvilket sprog du ender med at være proficient i (for husk: man får +2 i bonus på sin ability modifier, hvis man er proficient i sproget)

    • Dette svar blev ændret 7 måneder, 3 uger siden af Festival_H.
    #24
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Nu skal jeg ikke stjæle det for dig, men noget i denne henretning, hvor du gør brug af dine klasser for at løse dine problemer.

    Det er ikke et kode visning, men hvad koden gør. Først kører appen med een runde af gangen, men fordi et et spil kan tage på til 850 runder inden en vinder er fundet, så stopper jeg koden på et tidspunkt og lader den spille et helt spil igennem. Det du ser på skærmen er den sidste runde inden en vinder blev fundet. Du kan også se at appen går i Krig nogle gange og at det kan være årsagen til en spiller løb tør for kort.

    Hvis du har et spørgsmål specifikt til hvordan du løser et problem med dine klasser, så spørger du bare 🙂

    #25
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    Bageren mange tak. jeg har hørt om Tkinter, men prøvede bare med pygame. Da det er lidt lettere at starte på.
    Det ser meget cool ud, det du har lavet. Håber jeg bliver lidt bedre til det.

    Festival_H mange tak.
    ja, ved godt jeg burde lærer klasser.
    Det jeg har lavet det i er Godot egen GDscript(mener om python) kodning.
    lave det i ren konsol, tror det ikke det bliver svære, når man skal tilbage og sætte grafik til den kodning?

    vil se om jeg kan finde ud af:
    hvordan jeg fordeler kortede, så hver person starter med 26 kort og den tæller ned.

    #26
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #25 Hvordan er det nu man spiller en helt elefant? En lille bid af gangen 🙂

    Det er min helt klare opfattelse at det nemmeste er at løse så lille en opgave som muligt af gangen.

    Hvis du både skal lære grafisk manupulation OG klasse design i Python på samme tid at så sætter du dig selv større problemer end du behøver og måske er klar til at håndtere.

    Så ja. Jeg tror du vil få meget ud af at få sat et python udviklingsmuljø med kun med VSCode og Python hvor du kan lave rene Python projekter der skriver status til en console. Lige som mit eksemple i C#.

    Start med Card og Deck klasser. En enum af FaceValue 2 – 14 og en Suit enum af Diaamond, Hearts, Clubs og Spades.

    Når du laver en instans af din Deck klasse looper du igennem FaceValue og Suit enummerne og instansiere Card klasse og lægger instanserne i en liste. Et Deck kan ikke eksistere uden kort. Så det er naturligt at Deck klassen står for at bygge all 52 kort.

    Prøv at starte der. Det er en rigtig godt start og grundstenen i alle digitale kort spil.

    #27
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    Hov… ‘Spiser en hel elefant’. Der er ingen der skal spille en helt elefant, hvad det så end er 🙂

    #28
    WeezY
    Rusher
    #0 Trådstarter
    • 88 Indlæg
    Offline

    #27 Du har helt ret, gik død i det i går.
    Tror jeg laver det i koncole først. små bider uden grafik. ligger det på bagefter.

    fik dog drag and drop til at virke… 🙂

    #29
    Festival_H
    Rusher
    • 904 Indlæg
    Offline

    #28 Så jeg har fået sat et Python miljø op med VSCode og nogle PY filer og prøver med lidt python udvikling af Card, Deck, Suit, FaceValue og en Game klasse.

    Og nu kan det godt være jeg er biased med 20 års .Net udvikling, men for hutlan jeg synes ikke Python er et særligt venligt begynder sprog… jeg skal søge mig frem til selv de simpleste ting og når jeg sidder med en løsning der også virker, så gir det ingen mening…

    Det er MEGET anderledes fra .Net og C# og selv JavaScript. Det kan godt være at det er helt naturligt hvis man starter ud på Python og ikke har tidligere erfaring med anden programmerings sprog at det så virker meget logisk og det gir jo også mening at starte på Python hvis det er det sprog man skal arbejde videre på. I dont like it.

    #30
    Bageren
    Rusher
    • 41 Indlæg
    Offline

    #29

    Mit förste kursus/(fag?) på uni var netop med Python og Matlab hvilket var en fin indgang til programmering for at forstå de mest basale variabler, loops og funktioner. Vi havde så C precis efter hvilket var lidt af et skifte når man skulle begynde og tänke på memory allocation, pointers og referencing 😀 og så det at man skulle afslutte alle linjer kod med et “;” det tog lidt tid inden det blev et muskelminde 😛

    Noget som er ulempen ved Python er også det faktum at selvom din kode virker som om den funker, så kan den väre fyldt med bugs uden at man ved om det iom hvordan den tolker din kod.

    Men alt i alt synes jeg Python er en väldig nice ingangsport til programmering.

Viser 30 svar - 1 til 30 (af 46 i alt)
  • Du skal være logget ind som bruger for at kunne svare...