Vil prøve at lave et kortspil - Krig

21/04/2024 kl. 20:51 #1
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 svar blev ændret 2 år siden af WeezY.

👍 0❤️ 0😂 0😮 0😢 0😠 0
22/04/2024 kl. 10:13 #2
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
👍 0❤️ 0😂 0😮 0😢 0😠 0
22/04/2024 kl. 15:14 #3
#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 2 år siden af Festival_H.

👍 0❤️ 0😂 0😮 0😢 0😠 0
22/04/2024 kl. 19:21 #4
#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
👍 0❤️ 0😂 0😮 0😢 0😠 0
22/04/2024 kl. 22:51 #5
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 2 år siden af Festival_H.

👍 0❤️ 0😂 0😮 0😢 0😠 0
22/04/2024 kl. 22:52 #6
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.
👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 05:13 #7
Find et Godot tutorial på YouTube. Eller tag et kig på Udemy, hvis du er mere til den slags.
👍 0❤️ 0😂 0😮 0😢 0😠 0
Nintendo Influencer På dansk: https://www.youtube.com/channel/UC-6I6HgrpYjimEpvayLu3Vg På engelsk: https://www.youtube.com/channel/UCNNzj5gu0Iolj4vcNIp1IUA
23/04/2024 kl. 08:30 #8
#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.
👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 09:24 #9
#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 2 år siden af Festival_H.

👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 09:30 #10
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. https://www.youtube.com/watch?v=Ej2p_TPGCDE&list=PLMgDVIa0Pg8XMe1GVc5eg0Rwi-cXqIR6q

Dette svar blev ændret 2 år siden af Festival_H.

👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 09:41 #11
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#?
👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 09:46 #12
The English version af Krig :) https://bicyclecards.com/how-to-play/war
👍 0❤️ 0😂 0😮 0😢 0😠 0
23/04/2024 kl. 19:00 #13
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 :-)
👍 0❤️ 0😂 0😮 0😢 0😠 0
24/04/2024 kl. 11:34 #14
#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).
👍 0❤️ 0😂 0😮 0😢 0😠 0
24/04/2024 kl. 14:21 #15
#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. :-)
👍 0❤️ 0😂 0😮 0😢 0😠 0
25/04/2024 kl. 06:41 #16
#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.
👍 0❤️ 0😂 0😮 0😢 0😠 0
25/04/2024 kl. 06:50 #17
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.
👍 0❤️ 0😂 0😮 0😢 0😠 0
25/04/2024 kl. 07:30 #18
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#!
👍 0❤️ 0😂 0😮 0😢 0😠 0
28/04/2024 kl. 12:11 #19
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.
👍 0❤️ 0😂 0😮 0😢 0😠 0
28/04/2024 kl. 20:46 #20
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. https://www.youtube.com/watch?v=LOhfqjmasi0
👍 0❤️ 0😂 0😮 0😢 0😠 0
Der opstod en uventet fejl. Genindlæs 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.