Permalänk
Medlem

Högt eller lågt spel i C#

Hej alla människor,

sitter här och försöker programmera ett spel, har dock lite problem. Jag förstår ungefär hur jag ska skapa det, men inte hur jag ska koda det. Det ska kodas i C#

Det jag ska göra är ett spel där 13 av 52 kort läggs ut, det första visas medan resten inte visas, och sedan ska man gissa ifall det nästa kortet är lägre eller högre än det man ser. (Ganska basic), klarar man alla 13 kort vinner man, svarar man fel eller ifall det är lika så förlorar man (Bad for you). Ess kan vara både högst och lägst (kan inte förlora med ess).

Inga abstrakta klasser, arv eller polymorfi.

Detta är typ uppgiften som jag har svårt med, har inte programmerat särskilt länge så vet inte riktigt hur jag ska göra. Och tycker att min kod inte direkt har någon anledning att laddas upp här.

Skulle uppskattas ifall någon kunde göra ett sådant program så jag kan få se på en fungerande kod!

Tackar,
Mr_Enric

Visa signatur

Win 10 maskin: Core 2500 | Integra M 550W | Ryzen 5 3600 | MSI B450 A Pro max | GTX 1060 6GB | Vengeance LPX 2x16GB
Win XP maskin: Core 1100 | 550W | AMD Athlon II | MSI GF615M-P33 | ATI HD5670 | 2x2GB
Laptop: Lenovo Flex 3-1580

Permalänk
Inaktiv
Skrivet av AReal_Human:

Hej alla människor,

sitter här och försöker programmera ett spel, har dock lite problem. Jag förstår ungefär hur jag ska skapa det, men inte hur jag ska koda det. Det ska kodas i C#

Det jag ska göra är ett spel där 13 av 52 kort läggs ut, det första visas medan resten inte visas, och sedan ska man gissa ifall det nästa kortet är lägre eller högre än det man ser. (Ganska basic), klarar man alla 13 kort vinner man, svarar man fel eller ifall det är lika så förlorar man (Bad for you). Ess kan vara både högst och lägst (kan inte förlora med ess).

Inga abstrakta klasser, arv eller polymorfi.

Detta är typ uppgiften som jag har svårt med, har inte programmerat särskilt länge så vet inte riktigt hur jag ska göra. Och tycker att min kod inte direkt har någon anledning att laddas upp här.

Skulle uppskattas ifall någon kunde göra ett sådant program så jag kan få se på en fungerande kod!

Tackar,
Mr_Enric

Du kan testa att implementera saker steg för steg. Du måste lägga upp en plan för hur du tänkt programmera uppgiften. Hur ska "korthögen" läggas upp? Hur ska du du kolla om nästa kort är högre eller lägre än det som ligger synligt?

Kom på alla saker som behöver fixas och sedan funderar du på varje enskild lösning i taget och skriver hur just den ska lösas. När du börjar komma på lösningar på problemen kommer det att bli enklare att sätta ihop allt till ett program. Det är omöjligt att bara börja koda och skriva hela programmet rakt upp och ned.

Permalänk
Medlem

Du får göra en array typ

List<int> Kort = new List<Int>();

Sen får du slumpa 52 kort mellan 1-13 och spara new i arrayen, typ kort.Add(Rnd.Max(1,13));

Sen får du plocka/slumpa 13 kort ur arrayen, som du "visar".

Fråga högre eller lägre, kolla resultat, loopa till spelet är slut

// LZ

Permalänk
Medlem

Jag har nu en fungerande kod, mitt problem nu är att jag inte vet vilka delar jag borde göra klasser av, samt hur jag skall skriva klasserna. Min kod är:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace nyttSlumpTestForms { public partial class Form1 : Form { int nästa; int nuvarande; int j = 0; int[] hand = new int[14]; public Form1() { InitializeComponent(); } private void btnStarta_Click(object sender, EventArgs e) { btnStarta.Enabled = false; btnHögre.Enabled = true; btnLägre.Enabled = true; j = 0; int[] kort = new int[52]; int räkna = 0; int nyKort = 0; Random slump = new Random(); while (räkna < 52) { nyKort = slump.Next(0, 52); kort[räkna] = nyKort; räkna++; } Array.Copy(kort, 0, hand, 0, 14); int l = 0; while (l < 14) { hand[l] = hand[l] % 13; l++; } if (j < 13) { nuvarande = hand[j]; nästa = hand[j + 1]; lblNuvarande.Text = hand[j].ToString(); lblNästa.Text = hand[j + 1].ToString(); } } private void btnLägre_Click(object sender, EventArgs e) { if (nästa < nuvarande) { j++; if (j < 13) { nuvarande = hand[j]; nästa = hand[j + 1]; lblNuvarande.Text = hand[j].ToString(); lblNästa.Text = hand[j + 1].ToString(); } else { MessageBox.Show("Du vann, yay!"); } } else { MessageBox.Show("Fel!"); btnHögre.Enabled = false; btnLägre.Enabled = false; btnStarta.Enabled = true; } } private void btnHögre_Click(object sender, EventArgs e) { if (nästa > nuvarande) { j++; if (j < 13) { nuvarande = hand[j]; nästa = hand[j + 1]; lblNuvarande.Text = hand[j].ToString(); lblNästa.Text = hand[j + 1].ToString(); } else { MessageBox.Show("Du vann, yay!"); } } else { MessageBox.Show("Fel"); btnHögre.Enabled = false; btnLägre.Enabled = false; btnStarta.Enabled = true; } } } }

Visa signatur

Win 10 maskin: Core 2500 | Integra M 550W | Ryzen 5 3600 | MSI B450 A Pro max | GTX 1060 6GB | Vengeance LPX 2x16GB
Win XP maskin: Core 1100 | 550W | AMD Athlon II | MSI GF615M-P33 | ATI HD5670 | 2x2GB
Laptop: Lenovo Flex 3-1580

Permalänk
Skrivet av AReal_Human:

Jag har nu en fungerande kod, mitt problem nu är att jag inte vet vilka delar jag borde göra klasser av, samt hur jag skall skriva klasserna. Min kod är:

//code

Hej,

Jag är C#.NET kodare och har jobbat med det i flera år, om du är verkligen vill lära dig så kan jag hjälpa dig lite över Skype om du vill?

Heter sweyoda på Skype.

Visa signatur

Live and let live.

Permalänk
Medlem

En liten tanke bara.
Du ska nog först bygga en "komplett" kortlek, och sen ta 13 slumpmässiga kort från den, som det är nu kan du få samma kort flera gånger (4 lika är ok då färg inte är relevant, men det finns risk att du får fler än det och det finns ju inte i en riktig kortlek).

Kortlek kan vara en klass, kort en annan. Lite overkill för det här programmet men om det är en skoluppgift eller arbetsprov ser det bra ut.

Bryt sen ut all kod som återkommer till funktioner, och det brukar även vara bra att ta sånt som utför en specifik uppgift som t ex fylla kortleken.

Skickades från m.sweclockers.com

Visa signatur

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Permalänk
Skrivet av Zajin:

En liten tanke bara.
Du ska nog först bygga en "komplett" kortlek, och sen ta 13 slumpmässiga kort från den, som det är nu kan du få samma kort flera gånger (4 lika är ok då färg inte är relevant, men det finns risk att du får fler än det och det finns ju inte i en riktig kortlek).

Kortlek kan vara en klass, kort en annan. Lite overkill för det här programmet men om det är en skoluppgift eller arbetsprov ser det bra ut.

Bryt sen ut all kod som återkommer till funktioner, och det brukar även vara bra att ta sånt som utför en specifik uppgift som t ex fylla kortleken.

Skickades från m.sweclockers.com

Det är aldrig overkill att skriva bra kod. Det fokuseras för lite i skolan på att skriva bra kod. De fokuserar för mycket på att lösa exemepluppgifter, även om det också är viktigt. Men de lär inte ut hur man ska tänka riktigt.

Visa signatur

Live and let live.

Permalänk
Medlem
Skrivet av GiveMeLibertyOrDeath1337:

Det är aldrig overkill att skriva bra kod. Det fokuseras för lite i skolan på att skriva bra kod. De fokuserar för mycket på att lösa exemepluppgifter, även om det också är viktigt. Men de lär inte ut hur man ska tänka riktigt.

Det håller jag med om.
Är det väl genomtänkt är det också bra mycket lättare att återanvända eller bygga ut i framtiden. Och 99% av programmering är återvinning

Skickades från m.sweclockers.com

Visa signatur

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Permalänk
Medlem

@GiveMeLibertyOrDeath1337:
Vilken sweyoda är du? Och jag hoppas att du inte är ett creep som typ tänker komma och sitta utanför mitt fönster.

Visa signatur

Win 10 maskin: Core 2500 | Integra M 550W | Ryzen 5 3600 | MSI B450 A Pro max | GTX 1060 6GB | Vengeance LPX 2x16GB
Win XP maskin: Core 1100 | 550W | AMD Athlon II | MSI GF615M-P33 | ATI HD5670 | 2x2GB
Laptop: Lenovo Flex 3-1580

Permalänk
Skrivet av AReal_Human:

@GiveMeLibertyOrDeath1337:
Vilken sweyoda är du? Och jag hoppas att du inte är ett creep som typ tänker komma och sitta utanför mitt fönster.

Whuut?

Visa signatur

Live and let live.

Permalänk
Medlem

@GiveMeLibertyOrDeath1337: finns 2 sweyoda på skype, heter du bobby?

Visa signatur

Win 10 maskin: Core 2500 | Integra M 550W | Ryzen 5 3600 | MSI B450 A Pro max | GTX 1060 6GB | Vengeance LPX 2x16GB
Win XP maskin: Core 1100 | 550W | AMD Athlon II | MSI GF615M-P33 | ATI HD5670 | 2x2GB
Laptop: Lenovo Flex 3-1580

Permalänk
Skrivet av AReal_Human:

@GiveMeLibertyOrDeath1337: finns 2 sweyoda på skype, heter du bobby?

ja

Visa signatur

Live and let live.

Permalänk
Medlem

Tja,

Som @Zajin säger så kan du inte använda Random då den kan ge dig samma svar fler gånger och då måste du iterera tills du har samlat på dig alla valörer av 4 typer till din lek. Så jag ger dig ett exempel på hur man kan skapa en lek om 52 kort, blandade och väljer de första 13 ur leken. Dock är de kvar i leken så det måste du hantera.

Ett generellt big no-no är att använda svenska benämningar i kod översätt det till engelska där du kan.

cardTypes = är då hjärter, ruter osv.
Du får ut en lista av dynamiska objekt. Du kan såklart göra en klass istället men detta fungerar väl i samma context.

Lycka till.
/ L

var cardTypes = new[] {"H", "R", "K", "S"};
var deckOfCards = cardTypes.SelectMany(c =>
Enumerable.Range(1, 13)
.Select(i => new {Name = string.Format("{0}{1}", c, i), Value = i}))
.OrderBy(o => Guid.NewGuid()).ToList();
var topThirteen = deckOfCards.Take(13).ToList();

Visa signatur

INTEL CORE I7 5960X 3 GHZ 20MB S-2011-3 @ 4.2ghz, ASUS RAMPAGE V EXTREME, CORSAIR 32GB DDR4 DOMINATOR 3000MHZ, CORSAIR 850W, Asus RTX 2080ti OC, FRACTAL DESIGN R4