C# - Ändra en variabels värde?

Permalänk
Medlem

C# - Ändra en variabels värde?

Hejsan!

Jag håller just nu på med ett textbaserat spel i C#! Jag har dock stött på ett problem.
Jag vet inte hur jag ska ändra en variabels value. T.ex. int bossHp = 1000;

Om spelaren gör skada på bossen så vill jag att valuen av bossHp ska ändras till bossHp - skada. Så om man skadar 20 så ska valuet av bossHp vara 980!

Om det spelar någon roll så använder jag mig även av random generators för attackerna:

Citat:

Random heavyStrike = new Random();
heavyDMG = heavyStrike.Next(charStats.attackPower, 400);

Där så ger den ut ett random nummer mellan spelarens attackpower och talet 400.

Permalänk

Förstår inte riktigt problemet, det är bara att ta bossHp = bossHp-skada eller har jag missförstått frågan?

Visa signatur

ASUS P8Z68 Deluxe | i5 2500k@4,6 | Radeon 5750 | Corsair 550W | Corsair Force GT 60gb | Samsung Spinpoint 250GB | Corsair Vengeance 8gb

Permalänk
Medlem
Skrivet av jan_banan655:

Förstår inte riktigt problemet, det är bara att ta bossHp = bossHp-skada eller har jag missförstått frågan?

Mjo det funkar om jag använder normala int's och set value på skadan.

Skrev denna koden lite snabbt bara för att demonstrera på ett bättre sätt:

static void Main(string[] args) { int bosshp = 1000; int attack = 20; int bosshpremaining = bosshp - attack; int x = int.Parse(Console.ReadLine()); Console.WriteLine(x); switch (x) { case 1: Console.WriteLine("You hit the boss for " + attack); Console.Write("The boss has " + bosshpremaining); Console.Write(" HP left"); Console.WriteLine("Want to hit him again?"); int again = int.Parse(Console.ReadLine()); if (again == 1) { Console.WriteLine("You hit the boss for " + attack); Console.Write("The boss has "); Console.Write(bosshpremaining - attack); Console.Write(" HP left"); } Console.ReadKey(); break; } }

Om vi tar den koden som exempel så funkar det alltid men om jag skulle använda mig utav random generators så kommer det inte att funka.

Permalänk
Medlem

Varför skulle det inte funka?

T.ex. här är ett litet snabbt kod baserat på det du skrev ovan.

static void Main(string[] args) { var rnd = new Random(); int bosshp = 1000; int attack = 20; //Max damage. string input = null; Console.WriteLine("To attack just hit enter, any other input will stop"); do { int damage = rnd.Next(attack); bosshp -= damage; Console.WriteLine("You hit the boss for " + damage); Console.WriteLine("The boss has {0} HP left", bosshp); input = Console.ReadLine(); } while (string.IsNullOrEmpty(input)); }

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Medlem
Skrivet av MugiMugi:

Varför skulle det inte funka?

T.ex. här är ett litet snabbt kod baserat på det du skrev ovan.

static void Main(string[] args) { var rnd = new Random(); int bosshp = 1000; int attack = 20; //Max damage. string input = null; Console.WriteLine("To attack just hit enter, any other input will stop"); do { int damage = rnd.Next(attack); bosshp -= damage; Console.WriteLine("You hit the boss for " + damage); Console.WriteLine("The boss has {0} HP left", bosshp); input = Console.ReadLine(); } while (string.IsNullOrEmpty(input)); }

Tack så mycket!

Detta är det första projektet jag gör i C# så jag är rätt så ny och har mycket att lära.

Tack återigen!

Permalänk
Medlem

Lite off topic men bara tips eftersom du är nybörjare.
Du kan skicka in oändligt med text och variabler i Console.Write
Ser att du skrev följande:
Console.Write("The boss has "); Console.Write(bosshpremaining - attack); Console.Write(" HP left");
Funkar precis lika bra att skriva detta:
Console.WiteLine("The boss has: " + (bosshpremaining-attack) + " HP left");
Utskrift blir, "The boss has: VÄRDE HP left"

Visa signatur

In order to understand recursion, one must first understand recursion

Permalänk
Medlem
Skrivet av pkzlol:

Lite off topic men bara tips eftersom du är nybörjare.
Du kan skicka in oändligt med text och variabler i Console.Write
Ser att du skrev följande:
Console.Write("The boss has "); Console.Write(bosshpremaining - attack); Console.Write(" HP left");
Funkar precis lika bra att skriva detta:
Console.WiteLine("The boss has: " + (bosshpremaining-attack) + " HP left");
Utskrift blir, "The boss has: VÄRDE HP left"

det går även att skriva så här:

Console.WriteLine("The boss has {0} HP left", bosshpremaining - attack);

där {0} byts ut mot andra argumentet till WriteLine. Se även String.Format.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

det går även att skriva så här:

Console.WriteLine("The boss has {0} HP left", bosshpremaining - attack);

där {0} byts ut mot andra argumentet till WriteLine. Se även String.Format.

Alldeles riktigt. Skrev så bara för att det är på det sättet jag själv brukar skriva

Visa signatur

In order to understand recursion, one must first understand recursion

Permalänk
Medlem
Skrivet av pkzlol:

Alldeles riktigt. Skrev så bara för att det är på det sättet jag själv brukar skriva

Undvik det med en plåga, att plussa ihop strängar ska enbart användas i syfte där det inte finns andra sätt. Så länge som möjligt så använd string.format ifall du behöver plussa ihop dem eller för mer kompliserade saker StringWriter

Varför ska du göra detta, jo, för att strängar är immutable, likasom tal i C#. Vad immutable betyder är att de är read-only. Dvs ska du plus'a ihop strängar så skapas flera nya objekt om och om igen.

Plusar du ihop en hel hög med strängar så blir det en ganska fet prestanda förlust, så jag rekommenderar dig att lära dig att sluta upp med det överallt.

http://en.wikipedia.org/wiki/Immutable_object <- Här har du lite mer om vad Immutable innebär.

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Hedersmedlem
Skrivet av MugiMugi:

Undvik det med en plåga, att plussa ihop strängar ska enbart användas i syfte där det inte finns andra sätt. Så länge som möjligt så använd string.format ifall du behöver plussa ihop dem eller för mer kompliserade saker StringWriter

Nog för att jag egentligen förespråkar optimering (och att string.format är rätt flexibelt), men jag kan tänka mig att fixande av detaljer som dessa tillhör de mindre effektiva åtgärderna om man har prestandaproblem (särskilt om det inte ens är många strängar man lägger ihop (och särskilt om man ändå tänker skriva ut dem strax därefter)).

Permalänk
Medlem
Skrivet av Elgot:

Nog för att jag egentligen förespråkar optimering (och att string.format är rätt flexibelt), men jag kan tänka mig att fixande av detaljer som dessa tillhör de mindre effektiva åtgärderna om man har prestandaproblem (särskilt om det inte ens är många strängar man lägger ihop (och särskilt om man ändå tänker skriva ut dem strax därefter)).

Det beror helt och hållet på vad du ska göra självklart, jag snackar bara om att man ska sluta upp med det och inte använda det som en vanan, att börja använda string.format eller annat är varken svårare eller tar mer tid, som bonus så får du bättre kod på en gång.

Har dock själv varit i projekt där just plusa ihop stringar har varit ett stort prestanda problem, bland annat i relation till ett logg system jag vart tvungen att fixa, det tog programmet minuter att läsa in feta loggar, efter fixen tog det sekunder.

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift