Trädvy Permalänk
Medlem
Registrerad
Aug 2014

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

Fractal Design Core 2500 | Fractal Design Integra M 550W | Core i5 4690K | Asus Z97-A | Asus Radeon 290x | Corsair Vengeance LP 2x4GB | Windows 10

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2007
Skrivet av Mr_Enric:

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.

AMD FX-8350 | Corsair H80i | ASUS Crosshair V Formula-Z | OCZ Vector 512GB | Fractal Design Newton R3 600W | Fractal Design Define R4| Corsair Venegance Red DDR3 16GB 1866MHz | Powercolor Radeon HD7970 | Eizo Foris FS2331

Inet - Sweclockers fri frakt

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2010

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

Trädvy Permalänk
Medlem
Registrerad
Aug 2014

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; } } } }

Fractal Design Core 2500 | Fractal Design Integra M 550W | Core i5 4690K | Asus Z97-A | Asus Radeon 290x | Corsair Vengeance LP 2x4GB | Windows 10

Trädvy Permalänk
Avstängd
Registrerad
Apr 2016
Skrivet av Mr_Enric:

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.

Live and let live.

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002

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

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

Trädvy Permalänk
Avstängd
Registrerad
Apr 2016
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.

Live and let live.

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
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

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

Trädvy Permalänk
Medlem
Registrerad
Aug 2014

@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.

Fractal Design Core 2500 | Fractal Design Integra M 550W | Core i5 4690K | Asus Z97-A | Asus Radeon 290x | Corsair Vengeance LP 2x4GB | Windows 10

Trädvy Permalänk
Avstängd
Registrerad
Apr 2016
Skrivet av Mr_Enric:

@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?

Live and let live.

Trädvy Permalänk
Medlem
Registrerad
Aug 2014

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

Fractal Design Core 2500 | Fractal Design Integra M 550W | Core i5 4690K | Asus Z97-A | Asus Radeon 290x | Corsair Vengeance LP 2x4GB | Windows 10

Trädvy Permalänk
Avstängd
Registrerad
Apr 2016
Skrivet av Mr_Enric:

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

ja

Live and let live.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2013

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();

INTEL CORE I7 5960X 3 GHZ 20MB S-2011-3 @ 4.5G, ASUS RAMPAGE V EXTREME, CORSAIR 16GB DDR4 DOMINATOR 3000MHZ, CORSAIR 850W, Asus GTX980ti OC, FRACTAL DESIGN R4 | Astro gaming A50