Kjeksen Skrevet 29. juli 2005 Del Skrevet 29. juli 2005 (endret) Jeg har startet å programmere litt igjen, etter en liten pause. For å repetere litt så tenkte jeg at jeg skulle lage et spill. Problemet jeg har her er å få noe if greier til å passe inn. Her er koden. if(direction == 'w') { if(diff == 0) { if(xAxis > 2) { lose(); } if(diff == 0) { if(xAxis > 1) { std::cout << "\n\nWARNING! 1 step more in the same direction" << " and you are\nout of bounds " << "and will loose!\n"; getche(); } } } //Increase the X axis xAxis++; std::cout << "\n\nYour coordinates are now: " << xAxis << ", " <<yAxis << std::endl; } Jeg skal ha inn i det der, if(diff == 1) { blabla; }. Har prøvd lenge for å få d til men står litt fast. diff er da vansklighets graden i spillet, visst diff er 0, er det easy, og 1 er normal. Skal ha d slik at visst den er på easy så er "kartet" lite, eller når det er normal så er det litt større og da må jeg bruke andre tall. ( Ja vet at jeg ikke skal bruke getche() og system("pause"), men dette er bare et lite repeterings "prosjekt" så etter min mening er det ikke så nøye med.) Endret 29. juli 2005 av Kjeksen Lenke til kommentar
Orjanp Skrevet 29. juli 2005 Del Skrevet 29. juli 2005 (endret) if(direction == 'w') { if(diff == 0) { //<-------- if(xAxis > 2) { lose(); } if(diff == 0) { //<------- if(xAxis > 1) { std::cout << "\n\nWARNING! 1 step more in the same direction" << " and you are\nout of bounds " << "and will loose!\n"; getche(); } } } //Increase the X axis xAxis++; std::cout << "\n\nYour coordinates are now: " << xAxis << ", " <<yAxis << std::endl; } Hvorfor har du to if(diff == 0) tester? Og hvorfor står den siste inni den første? Den siste er meningsløs såframt funksjonen Lose() ikke endrer diff. Endret 29. juli 2005 av Orjanp Lenke til kommentar
☀ ❄ Skrevet 29. juli 2005 Del Skrevet 29. juli 2005 (endret) Restrukturer koden, så blir alt så meget lettere: enum difficulty { easy, normal }; if (direction == 'w') { int loseOffset = 2; // Normal difficulty if (diff == easy) { loseOffset = 3; } if (xAxis > loseOffset) { lose(); } if (xAxis > loseOffset - 1) { std::cout << "\n\nWARNING! 1 step more in the same direction and you are\nout of bounds and will loose!\n"; getche(); } // Increase the X axis ++xAxis; std::cout << "\n\nYour coordinates are now: " << xAxis << "," <<yAxis << std::endl; } (Jeg synes forresten kodestilen din gjør koden svært uleselig.) Edit: La til mellomrom mellom if og ( for leselighetens skyld. Endret 29. juli 2005 av Myubi Lenke til kommentar
Kjeksen Skrevet 29. juli 2005 Forfatter Del Skrevet 29. juli 2005 Ble rotete når jeg pasta det inn her. Var ikke akkurat sånn den var. men takk for hjelpen Lenke til kommentar
Kjeksen Skrevet 29. juli 2005 Forfatter Del Skrevet 29. juli 2005 Noen annen måte og "cleare" skjermen på enn system("cls"); skal skrive om hele programmet og vil denne gang holde meg unna system. Lenke til kommentar
krakow1905 Skrevet 29. juli 2005 Del Skrevet 29. juli 2005 Jeg har startet å programmere litt igjen, etter en liten pause. For å repetere litt så tenkte jeg at jeg skulle lage et spill. Problemet jeg har her er å få noe if greier til å passe inn. Her er koden. if(direction == 'w') { if(diff == 0) { if(xAxis > 2) { lose(); } if(diff == 0) { if(xAxis > 1) { std::cout << "\n\nWARNING! 1 step more in the same direction" << " and you are\nout of bounds " << "and will loose!\n"; getche(); } } } //Increase the X axis xAxis++; std::cout << "\n\nYour coordinates are now: " << xAxis << ", " <<yAxis << std::endl; } Jeg skal ha inn i det der, if(diff == 1) { blabla; }. Har prøvd lenge for å få d til men står litt fast. diff er da vansklighets graden i spillet, visst diff er 0, er det easy, og 1 er normal. Skal ha d slik at visst den er på easy så er "kartet" lite, eller når det er normal så er det litt større og da må jeg bruke andre tall. ( Ja vet at jeg ikke skal bruke getche() og system("pause"), men dette er bare et lite repeterings "prosjekt" så etter min mening er det ikke så nøye med.) Skjønner ikke helt hva alt dette har inne i en if test å gjøre, men her er en omstrukturert utgave av koden din. Når du ikke skjønner noe av koden din selv lenger, bør du tenke deg litt om hvordan du har skrevet den:) Søk litt på C coding guidelines for tips for å forbedre kodestilen din... Lykke til med spillet;) switch(direction) { case 0: { if (xAxis > 2): { lose(); break; } if (diff ==0 && xAxis > 1): { std::cout << "\n\nWARNING! 1 step more in the same direction" << " and you are\nout of bounds " << "and will loose!\n"; getche(); break; } } default: { xAxis++; std::cout << "\n\nYour coordinates are now: " << xAxis << ", " <<yAxis << std::endl; } } Lenke til kommentar
Kjeksen Skrevet 29. juli 2005 Forfatter Del Skrevet 29. juli 2005 If test?? eh, les litt til du. Jeg sa if PROBLEM. Har heller ikke sagt at jeg ikke skjønner koden, ser at enkelte deler av koden som jeg har brukt i programmet er unødvendig rotete og lite system, ( rekna ikke med at d skulle så mye kode for og få til det jeg tenkte på, derfor lite system, og ja, derfor skriver jeg om hele greia ). Lenke til kommentar
krakow1905 Skrevet 30. juli 2005 Del Skrevet 30. juli 2005 If test?? eh, les litt til du.Jeg sa if PROBLEM. Har heller ikke sagt at jeg ikke skjønner koden, ser at enkelte deler av koden som jeg har brukt i programmet er unødvendig rotete og lite system, ( rekna ikke med at d skulle så mye kode for og få til det jeg tenkte på, derfor lite system, og ja, derfor skriver jeg om hele greia ). Jeg ser at du skrev if problem, men det jeg skrev var at jeg ikke skjønner hvorfor du har puttet all den koden du har skrevet inne i en if kontroll, da noe av den burde vært flyttet utenfor. Slikt kan lett skape et "if PROBLEM". Når man får for store if settninger, og disse skaper problemer bør de skrives om. Lenke til kommentar
Kjeksen Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 If test?? eh, les litt til du.Jeg sa if PROBLEM. Har heller ikke sagt at jeg ikke skjønner koden, ser at enkelte deler av koden som jeg har brukt i programmet er unødvendig rotete og lite system, ( rekna ikke med at d skulle så mye kode for og få til det jeg tenkte på, derfor lite system, og ja, derfor skriver jeg om hele greia ). Jeg ser at du skrev if problem, men det jeg skrev var at jeg ikke skjønner hvorfor du har puttet all den koden du har skrevet inne i en if kontroll, da noe av den burde vært flyttet utenfor. Slikt kan lett skape et "if PROBLEM". Når man får for store if settninger, og disse skaper problemer bør de skrives om. Joda, men det var mye som var avhengig av forskjellige ting, derfor mye if rot. Men har skreve om koden for lenge siden og komt frem til en bedre løsning enn den jeg hadde før. Lenke til kommentar
Kjeksen Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 (endret) Mens jeg har en post her så lurer jeg på om der er noen god erstatning til system("cls") ? siden system ikke er platformuavhengig kode. stemmer det også at switch(var) er treigt, så det er bedre og bruke if? Endret 31. juli 2005 av Kjeksen Lenke til kommentar
Klette Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 En veldig enkel måte vil vel være å dra en ifndef om det er win32 eller linux eller osv.... Lenke til kommentar
GeirGrusom Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Det varierer om det er en fordel med if eller switch, det er to helt forskjellige elementer. Lenke til kommentar
Kjeksen Skrevet 31. juli 2005 Forfatter Del Skrevet 31. juli 2005 Det varierer om det er en fordel med if eller switch, det er to helt forskjellige elementer. Jaha? kan du nevne noen eksempler på når det er fordel og bruke switch? Lenke til kommentar
Klette Skrevet 31. juli 2005 Del Skrevet 31. juli 2005 Generelt burde du vel bruke switch når der er flere mulige caser.. altså, når det blir if else else else else else ...osv så slenger du inne n switch istedenfor, og oppnår ryddigere kode.. farten på de forskjellige metodene vet jeg ingenting om... Lenke til kommentar
GeirGrusom Skrevet 1. august 2005 Del Skrevet 1. august 2005 Switch fungerer på en annen måte en if; if(a == 1) noop; else if(a == 2) noop; else noop; mot switch(a) { case 1: noop; break; case 2: noop; break; default: noop; break; } switch kan kun sjekke hvis den er lik, og kun på tallverdier, fordi den er enklere i oppbygning for prosessoren; hver case er som en goto, dermed kan du også ha break; der, eller la være hvis det er gunstig, det er ikke mulig med if. en if ville sett slik ut med switch: switch(a == true) { case true: break; case false: break; } Altså If sjekker bare om verdien er sann, eller usann, switch sjekker etter mange andre verdier, det som står i if() må være true eller false, det finnes ikke noe annet, enten blir koden kalt, eller ikke. Lenke til kommentar
Kjeksen Skrevet 1. august 2005 Forfatter Del Skrevet 1. august 2005 (endret) Har valgt å teste å bruke switch kombinert med if`s. Her er koden: switch(dir) { case 'w': if(xAxis > looseOffsett +1) { loose(); } if(xAxis > looseOffset { std::cout << "\n\nWARNING!"; } ++xAxis; break; case 'e': if(xAxis < looseOffsetMinus) { std::cout << "\n\nWARNING!"; } if(xAxis < looseOffsetMinus -1) { loose(); } --xAxis; break; case 's': if(yAxis < looseOffsetMinus -1) { loose(); } if(yAxis < looseOffsetMinus) { std::cout << "\n\nWARNING!"; } --yAxis; break; case 'n': if(yAxis > looseOffset +1) { loose(); } if(yAxis > looseOffset) { std::cout << "\n\nWARNING!"; } ++yAxis; break; default: std::cout << "\n\nERROR in input!\n\n"; break; } I tilleg til selve spillet vil jeg også ha en slags highscore funksjon som har styring på bestetider i forskjellige vansklighetsgrader. Noen som har noen tips til dette? tenkte jeg kunne kanskje bruke time.h og funksjonen _strtime, eneste problemet med denne er at tiden blir lagret i et array av chars. I arrayet er det også kolon. Endret 1. august 2005 av Kjeksen Lenke til kommentar
Kjeksen Skrevet 3. august 2005 Forfatter Del Skrevet 3. august 2005 Ok, jeg har 2 tider som jeg har fått ved hjelp av dette. #include <iostream> #include <time.h> int main() { char time1[9]; char time2[9]; //Lagrer klokkeslett 1 i array time1 _strtime (time1); //bla bla bla kode kode //Lagrer klokkeslett 2 i array time2 _strtime (time2); return 0; } Altså med denne koden har jeg 2 arrays som ser ut som dette: hr:min:sec Jeg tenkte jeg skulle ta time2 minus time1 for å få tiden som har gått. Noen som har noe lurt på lager her? Det hele hadde vært enklere om jeg hadde hatt klokkesletta som int. Lenke til kommentar
GeirGrusom Skrevet 3. august 2005 Del Skrevet 3. august 2005 (endret) struct time { public: long hours; long minutes; long seconds; public: time() { seconds = 0; minutes = 0; hours = 0; } time(int total_seconds) { // Henter klokkeslett fra en int int rest = total_seconds / 60; hours = total_seconds % 60; minutes = rest % 60; seconds = rest / 60; } time(char *src) { // Henter klokkeslett fra en string sscanf(str, "%d:%d:%d", &this->hours, &this->minutes, &this->seconds); } static time operator - (time a, time b) { // Trekker ett klokkelsett fra et annet time res; res.seconds = a.seconds - b.seconds; res.minutes = a.minutes - b.minutes; if(res.seconds < 0) { res.minutes -= 1 res.seconds = -res.seconds; } res.hours = a.hours - b.hours; return res; } operator int() { // Returnerer antall sekunder return hours * 60 * 60 + minutes * 60 + seconds; } static time now() { char current_time[9]; _strtime(current_time); return time(¤t_time); } }; Endret 3. august 2005 av GeirGrusom Lenke til kommentar
Kjeksen Skrevet 3. august 2005 Forfatter Del Skrevet 3. august 2005 (endret) okai takker men er der ikke en litt enklere måte og løse dette på? Eller en forklaring på deler i koden slik at jeg kan henge med Endret 3. august 2005 av Kjeksen Lenke til kommentar
Kjeksen Skrevet 3. august 2005 Forfatter Del Skrevet 3. august 2005 har løst problemet ved å bruke sscanf(tid1, "%d: %d: %d:", &hours1, &minutes1, &seconds1); Og deretter bruke sscanf(tid2, "%d: %d: %d:", &hours2, &minutes2, &seconds2); og så legge sammen til 3 totale verdier ved å ta h2 - h1, m2 - m1, s2 - s1. Så får jeg tiden som har gått fra tid1 til tid2. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå