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

Tagget: ,

  • Dette emne har 46 svar og 6 stemmer, og blev senest opdateret for 1 uge, 3 dage siden af WeezY.
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 1 måned, 3 uger siden af WeezY.
Viser 16 svar - 31 til 46 (af 46 i alt)
  • Forfatter
    Svar
  • #31
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    #30 Lige for at præcisere så er det .Net og C# jeg snakker om. Jeg er heller ikke tosset med C eller C++. C/C++ er meget forskelligt fra C#. Man kan de samme ting, men C# udgaverne er meget mere clean i syntaxen synes jeg.

    • Dette svar blev ændret 1 måned, 1 uge siden af Festival_H.
    • Dette svar blev ændret 1 måned, 1 uge siden af Festival_H.
    #32
    WeezY
    Rusher
    #0 Trådstarter
    • 87 Indlæg
    Offline

    Hej igen

    Festival_H,

    håber du har tid, kan ikke forstå hvorfor jeg får dette: System.String[].
    Da den siger jeg ikke har fejl i min kode. Har brugt alt for lang tid, for at finde ud af det.
    Hvis jeg laver et breakpoint på “Console.WriteLine(yourHand);” Viser den de 26 kort… :S

    tænkte det kunne være disse: har prøvet at konverter string’en og lave dem om til S,H,D,C, men virker heller ikke.
    “♠”, “♥”, “♦”, “♣”

    dette er mit output
    MyHand:
    System.String[]
    YourHand:
    System.String[]

    using System;
    using System.Text;
    
    namespace TEST
    {
        internal class Program
        {
            static void Main(string[] args)
            {
    
                // deck
    
                string[] cards = new string[52];
                string[] suits = { "♠", "♥", "♦", "♣" };
                string[] ranks = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
                string[] myHand = new string[26];
                string[] yourHand = new string[26];
    
                for (int i = 0; i < cards.Length; i++)
                {
                    cards = ranks + suits;
                }
    
                // Shuffle
                var random = new Random();
                for (int i = 0; i < cards.Length; i++)
                {
                    int j = random.Next(52);
                    string temp = cards;
                    cards = cards[j];
                    cards[j] = temp;
                    
    
                }
    
                // Del 12 cards fra shuffle til mig og dig
                for (int i = 0; i < 26; i++)
                {
    
                    myHand = cards; // Tilføj kort til mig
                    cards = null!;  // Fjern kort fra bunden
    
                    yourHand = cards; // Tilføj kort til dig
                    cards = null!; // Fjern kort fra bunden
    
                }
                
                // Vis kortene
                Console.WriteLine("MyHand: ");
                Console.WriteLine(myHand);
    
                Console.WriteLine("YourHand: ");
                Console.WriteLine(yourHand);
    
                Console.ReadLine();
                }
    
        }
    }
    
    
    • Dette svar blev ændret 3 uger, 4 dage siden af WeezY.
    #33
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    I C# what you did there

    Først kan jeg se at du har Ace på plads 1 (eller faktisk 0 jo), så hvordan har du tænkt dig at vurder hvem der vinder et udspil hvis Ace er en af de spillede kort? Sæt den sidst så den har den højeste enum værdi.

    2: Hvor er alle dine klasser? Klasser, klasser, klasser. Card, Deck, Player og Game (glem hand, det har du ikke brug for i dette spil fordi spillet er tabt når Player ikke har flere kort tilbage).

    Et Card objekt har en FaceValue og en Suit enum. Det duer ikke at et kort bare er en string. I krig bruges Suit ikke til noget, men du vil gerne bygge en brygbart lib du kan tage med videre.

    C# har en fantastisk Generic Collection Lib som indeholder en List. Den har en dynamisk længde, så du ADDer bare og REMOVEr når du fjerner.

    Et Deck består af en privat List cardsInDeck. Der er ingen der skal kigge stikke sine fingre i disse kort. Det er Deck klassen selv der styre det helt 100%. Så den har en Draw funktion der returner en type af Card. Dette Card lægges så i en Players Stack med en Take funktion. Players Draw funktion trækker fra Players egen liste. Som jeg vil implementere som en Queue fordi der altid tages fra toppen og vundne kort tages fra bunken.

    Prøv at fortælle dig selv en historie om hvordan en af disse titler fungere i virkeligheden. Det forklare ligsom hvordan objektet skal designes for at løse de opgaver det har i den virkelige verden. Object Orienteret Programmering handler netop om at løse problemstillinger fra det virkelige liv i koden.

    Prøv at starte med det her. De kan være i een fil eller du kan have det i flere filer. Det må du selv om. I starten er det nok nemmere have have det hele i een fil, men når du har styr på encapsulation, så kan du lægge alt i sine egne filer.

       public enum Suit
        {
            Hearts,
            Diamonds,
            Clubs,
            Spades,
        }
    
        public enum FaceValue
        {
            Two = 2,
            Three = 3,
            Four = 4,
            Five = 5,
            Six = 6,
            Seven = 7,
            Eight = 8,
            Nine    = 9,
            Ten = 10,
            Jack = 11,
            Queen = 12,
            King = 13,
            Ace= 14,
        }
    
        public class Card
        {
            public Suit Suit { get; private set; }
            public FaceValue FaceValue { get; private set; }
    
            public int IntValue => (int)FaceValue;
    
            public Card(Suit suit, FaceValue faceValue) 
            { 
                Suit = suit;
                FaceValue = faceValue;
            }
    
            public override string ToString()
            {
                return $"{FaceValue} of {Suit}";
            }
        }

    • Dette svar blev ændret 3 uger, 3 dage siden af Festival_H.
    #34
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    Med hensyn til din fejl, så kan jeg slet ikke compile hvis jeg paster dit kode ind i et nyt projekt.

    Hvad bruger du som IDE? Visual Studio Community Edition er FREE og anbefales.

    #35
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    Oh vent. Det er ikke en fejl du får. Du kan ikke printe indholdet af et array ud i C# bare ved at skrive den til konsollen. Så vil den bare skrive typen til dig og det er jo rigtig nok at det er string array String[]

    Enten skal du foreach på alle dine elementer og lave en console med hvert enkelt element eller skal du lige lave en Join på dit array med denne: Console.WriteLine(String.Join(“, “, myHand));

    • Dette svar blev ændret 3 uger, 3 dage siden af Festival_H.
    #36
    WeezY
    Rusher
    #0 Trådstarter
    • 87 Indlæg
    Offline

    #35. Det virkede… mange tak…

    Det er Visual Studio Community 2022 Edition jeg bruger.
    kom en del videre med det i går… Ved godt det er Noob spørgsmål, men man skal jo lærer det.

    Er bange for klasser… Det skal nok komme… har vel set 10+ timer C# guides – En fra Skillshare, så jeg begynder at forstå små ting og sager.

    #37
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    Det er nemt med klasser når du lige får den under armen. Tænkt det som små kasser med knapper. Du har ingen anelse om hvordan din remote til TV’et virker, men på magiskvis så skifter TV’et kanal når du trykker på en knap. Det er indkapsling. Du behøver ikke at vide hvad der ligger i kassen, så længe der er de rigtige håndtag du kan benytte. Funktionerne.

    Klasser er blueprints du skal lave instanser af.

    Card card = new Card(Suit.Hearts, FaceValue.One);

    Det blir så dejligt når du får der under huden.

    #38
    VampiricEye
    Rusher
    • 3692 Indlæg
    Offline

    for (int i = 0; i < cards.Length; i++)
    {
    cards = ranks + suits;
    }

    Dafuq? Jeg forstår ikke helt dine for-løkker, hvor du ikke bruger dine i’er til noget.:)

    Nintendo Influencer

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

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

    #39
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    #38 Ja, den studsede jeg også over, men tænkte at det skulle være en lille ‘WOOT?’ når han nåede frem til at have en liste af kort som blev skrevet ud.

    Learning from the process

    #40
    WeezY
    Rusher
    #0 Trådstarter
    • 87 Indlæg
    Offline

    #38 ja, jeg forstår ikke “for” helt endnu. Tænker det er noget fra ChatGPT.
    Prøver ikke at bruge ChatGPT, men hvis jeg sidder fast om aften, spørger jeg lige den.

    her er hvad jeg fik lavet igår aften.:
    jeg fik Symbolerne til at virke “Club, Diamond, Heart, Spades”
    Nu med farve også..
    tie virker også

    jeg ved godt Ace burde stå til sidst, men kan bedst lide det først. har lavet så i min rank er det Ace = 14.
    spillet slutter når alle 52 kort er brugt, da jeg ikke giver at trykke 1000000 gange…
    skal ind i Godot Enigne og se om jeg lave et interface/grafik med knapper og det hele.
    Nu da jeg har et start setup. Næste er at lave mit eget kortspil. for styr på klasser, da mit spil er lidt mere kompleks.

    #41
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    #40 If it works, it works

    Spillet spiller jo nu og det er jo det der, i sidste ende, tæller.

    #42
    WeezY
    Rusher
    #0 Trådstarter
    • 87 Indlæg
    Offline

    #41 Det er jo lige det.

    Nu har jeg lavet det med Interface/grafik og det hele.

    Startede for ca. 1½ måned siden med Pyhton, gik så over i C# begge sprog er gode.
    Da jeg så også kan bruge Unity Engine, selvom Pyhton gad jeg godt at lærer også, da jeg bruger Blender.
    Det er første gang jeg prøver at kode noget fra bunden(med lidt hjælp fra Rusherne og ChatGPT)

    jeg vil prøve at lave mit eget kortspil nu, da jeg har en OK forståelse af hvordan man gør.
    Udgiver det nok på Web, Windows, Linux, Android og iOS. tager nok 5-6 måneder. Jeg har lavet en Notion plan

    Man kan hente spillet “Krig” her.(Kun til Windows):
    https://mnj3d.itch.io/card-game-war

    Lille video, hvordan det ser ud:

    • Dette svar blev ændret 2 uger, 6 dage siden af WeezY.
    #43
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    Nice. Og nu – scratch det hele og gør det om igen

    Det er sådan man lærer nyt. Og denne gang skal du begynde at bruge noget af det som var for farligt første gang. Som fx klasser

    #44
    CrackMaND
    Rusher
    • 98 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.

    Er selv til C# igennem 20 år, men det er min opfattelse at Python er meget lettere for nybegyndere. Nok også derfor det er det mest populære programmeringssprog idag.

    #45
    Festival_H
    Rusher
    • 809 Indlæg
    Offline

    Jeg erkender at være en smule biased mod C#. Jeg synes det gir mere mening end python. Dont like the syntax.

    Hvorom alting er skal vi stadig ud i at vores elev her kommer igang med i hvert fald at bruge klasser som data containers Right?

    #46
    WeezY
    Rusher
    #0 Trådstarter
    • 87 Indlæg
    Offline

    Hehe. Ja jeg prøver. Er kommet så småt igang med mit spil. Har lavet 3 klasser. Link dem sammen er stadig underligt. Jeg synes det virker nogle gange til mit main script. Det er sådan lidt 50/50.

    Måske jeg har lidt weekend at vise. Det eneste der er lidt surt. Er C# ikke understøtter web og Android i Godot, men mindre man selv laver det. Hvilket jeg ikke kan jo.

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