Namnge objekt efter variabel (c#)

Permalänk

Namnge objekt efter variabel (c#)

Hej! Jag har en klass som heter Cards. I denna har jag tre variabler. En char, en int och en string. Det jag vill göra är att tilldela värden till dessa variabler genom en loop. Mitt problem är att jag inte vet hur jag ska få namngivningen för ett objekt i klassen att bero av en variabler. Eftersom det hela handlar om en kortlek skulle jag vilja döpa objekten k1 - k52. Hur ska jag göra detta?

Exempel:

Cards (HÄR VILL JAG INFOGA NAMNET) = new Cards();

Dold text
Permalänk

Cards k1 = new Cards();
funkar detta?

Visa signatur

Speldator: | Intel i7 2600k @ 4.2GHz | Corsair 16GB | 2xGTX 470 SLI | Asrock Extreme4 | SSD Intel G2 80GB |

Permalänk
Skrivet av Mr_.Anderssons:

Cards k1 = new Cards();
funkar detta?

Tyvärr. Jag vill att k1 ska kunna "växa" eftersom det hela kommer att vara i en for-loop (vara k2 nästa varv).

Permalänk
Medlem

Ehum. Jag skulle rekommendera en array av cards. Istället för att ha en herrans massa lösa variabler.

Permalänk
Medlem

Som phantom säger så är det nog en array eller lista som du bör använda i detta fall.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av erjosefsson:

Hej! Jag har en klass som heter Cards. I denna har jag tre variabler. En char, en int och en string. Det jag vill göra är att tilldela värden till dessa variabler genom en loop. Mitt problem är att jag inte vet hur jag ska få namngivningen för ett objekt i klassen att bero av en variabler. Eftersom det hela handlar om en kortlek skulle jag vilja döpa objekten k1 - k52. Hur ska jag göra detta?

Exempel:

Cards (HÄR VILL JAG INFOGA NAMNET) = new Cards();

Dold text

Då ska du använda en array:

var cards = new Cards[52]; for (var i = 0; i < 52; i++) { cards[i] = new Cards(); // Här gör du vad du vill }

Permalänk
Skrivet av erjosefsson:

Hej! Jag har en klass som heter Cards. I denna har jag tre variabler. En char, en int och en string. Det jag vill göra är att tilldela värden till dessa variabler genom en loop. Mitt problem är att jag inte vet hur jag ska få namngivningen för ett objekt i klassen att bero av en variabler. Eftersom det hela handlar om en kortlek skulle jag vilja döpa objekten k1 - k52. Hur ska jag göra detta?

Exempel:

Cards (HÄR VILL JAG INFOGA NAMNET) = new Cards();

Dold text

Skapa en vektor och ha korten i? Cards[0] = new Cards(); osv...

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Skrivet av gaminggirl:

Skapa en vektor och ha korten i? Cards[0] = new Cards(); osv...

Skrivet av htux:

Då ska du använda en array:

var cards = new Cards[52]; for (var i = 0; i < 52; i++) { cards[i] = new Cards(); // Här gör du vad du vill }

Skrivet av Gnejs:

Som phantom säger så är det nog en array eller lista som du bör använda i detta fall.

Skrivet av phantom:

Ehum. Jag skulle rekommendera en array av cards. Istället för att ha en herrans massa lösa variabler.

Problemet blir ju det att om jag använder en array så kan denna endast hålla en variabel. Anledningen till att jag vill använda mig av klasser är att det då blir väldigt smidigt eftersom jag kan hantera alla mina tre variabler samtidigt.

Permalänk
Medlem
Skrivet av erjosefsson:

Problemet blir ju det att om jag använder en array så kan denna endast hålla en variabel. Anledningen till att jag vill använda mig av klasser är att det då blir väldigt smidigt eftersom jag kan hantera alla mina tre variabler samtidigt.

Vad pratar du om? Ett arrayelement (cards[0]) ska bete sig exakt likadant som en vanlig variabel (card1).

Permalänk
Skrivet av erjosefsson:

Problemet blir ju det att om jag använder en array så kan denna endast hålla en variabel. Anledningen till att jag vill använda mig av klasser är att det då blir väldigt smidigt eftersom jag kan hantera alla mina tre variabler samtidigt.

Den kommer innehålla en lista med objekt av typen card, precis som k1, k2, k3, k4 osv. annars hade gjort.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem
Skrivet av erjosefsson:

Problemet blir ju det att om jag använder en array så kan denna endast hålla en variabel. Anledningen till att jag vill använda mig av klasser är att det då blir väldigt smidigt eftersom jag kan hantera alla mina tre variabler samtidigt.

Du ska ha en array/lista som innehåller objekt av typen Card. Typ så här,

cards[0].Value = 2; cards[0].Color = CardColor.Heart; class { public int Value { get; set; } public CardColor Color { get; set; } }

Visa signatur

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Permalänk
Medlem

char suit[] = {'H','S','K','R'}; char card[] = {'2','3','4','5','6','7','8','9','T','K','D','K','E'}; for (int i=0; i<13; i++) { for (int j=0; i<4; ++j) { deck.push_back(new Card(card[i],suit[j])); } }

Har du nåt som kanske fungera, alternativt så gör du defines och en array etc...

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

För att lösa det du beskrev i topic i C# så har du enbart ett enda val, och det heter T4 Templates

Det sagt.... det är inte rätt lösning och inte något du vill använda dig av för att lusa denna uppgift, liksom HELT fel väg att gå.

Skapa en array eller lista för att hålla koll på dina objekt som alla redan skrivit om här.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem
Skrivet av erjosefsson:

Problemet blir ju det att om jag använder en array så kan denna endast hålla en variabel. Anledningen till att jag vill använda mig av klasser är att det då blir väldigt smidigt eftersom jag kan hantera alla mina tre variabler samtidigt.

Med tanke på att hela tråden säger att array är vägen att gå kanske du skulle fundera över om du med obefintlig erfarenhet av programmering vet vad du pratar om eller om det kanske ligger något i det vi säger...

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

Tycker att NoPain^s förslag låter bra, men istället för en char skulle jag nog använt mig av en egen liten klass med en int som mappar mot en enum så att jag kan sedan behandla kortens värde med intar - blir mycket lättare så. Sen kanske en setter på esset för att definiera om det ska räknas som 1 eller 14.

Om man skall kunna använda Card klassen senare i ett spelscenario måste det vara lätt att tolka properties - då är en array ganska dumt.

en public List<Cards> kommer bli dunderbra, sen kan du sortera / gruppera listan också på färg etc.

En class Card som innehåller CardSuit och CardValue

En class CardSuit som är en enum typ CardSuit.Color.Spades = 1

En klass CardValue som returnerar en int, som kan mappas mot en enum där man kan få fram att 12 = "Dam".

Typ nåt sånt?

Permalänk
Skrivet av Nordis:

Du ska ha en array/lista som innehåller objekt av typen Card. Typ så här,

cards[0].Value = 2; cards[0].Color = CardColor.Heart; class { public int Value { get; set; } public CardColor Color { get; set; } }

Tackar! Ska kolla på detta

Skrivet av Gnejs:

Med tanke på att hela tråden säger att array är vägen att gå kanske du skulle fundera över om du med obefintlig erfarenhet av programmering vet vad du pratar om eller om det kanske ligger något i det vi säger...

Lite tjurig idag?

Skrivet av Ernesto:

Tycker att NoPain^s förslag låter bra, men istället för en char skulle jag nog använt mig av en egen liten klass med en int som mappar mot en enum så att jag kan sedan behandla kortens värde med intar - blir mycket lättare så. Sen kanske en setter på esset för att definiera om det ska räknas som 1 eller 14.

Om man skall kunna använda Card klassen senare i ett spelscenario måste det vara lätt att tolka properties - då är en array ganska dumt.

en public List<Cards> kommer bli dunderbra, sen kan du sortera / gruppera listan också på färg etc.

En class Card som innehåller CardSuit och CardValue

En class CardSuit som är en enum typ CardSuit.Color.Spades = 1

En klass CardValue som returnerar en int, som kan mappas mot en enum där man kan få fram att 12 = "Dam".

Typ nåt sånt?

Tackar!