Knut Marius Skrevet 11. november 2005 Del Skrevet 11. november 2005 (endret) Jeg har en skoleoppgave som går på å lage et snake-spill. I dette spillet prøver jeg nå å få implementert lagring av highscoreliste på fil, men det viser seg at jeg ikke har helt oversikt over skriving og lesing til/fra fil i C++ (er ganske fersk i språket). Når spilleren avslutter spillet får han beskjed om å taste inn navn. Navn og score blir da sendt til en funksjon, og planen var da at det skulle leses fra fila hvilke rekorder som lå der, og dersom spilleren har nådd topp-5 skal dette oppdateres i fila. Det eneste jeg hittil har fått til er å skrive navn og highscore til fila, men hver gang jeg skal åpne den og skrive en ny score overskriver den bare forrige linje... Noen som har noen gode forslag på bra løsninger av mitt problem, og eventuelt forslag til tanker som kan forenkle problemet dersom det virker litt for vanskelig å løse? Hadde vært toppers med litt hjelp. Føler MSDN er ganske vanskelig å få god info fra. Likte Javadoc vesentlig bedre.. Endret 19. november 2005 av Knut Marius Lenke til kommentar
willbend Skrevet 11. november 2005 Del Skrevet 11. november 2005 Seriøst, du kan å lage et snake spill men du greier ikke å finne ut av et lite problem som det der? Hvor lang tid har du programmert c++? Lenke til kommentar
Knut Marius Skrevet 11. november 2005 Forfatter Del Skrevet 11. november 2005 Seriøst, du kan å lage et snake spill men du greier ikke å finne ut av et lite problem som det der? Hvor lang tid har du programmert c++? 5140501[/snapback] Jeg har laget snakespillet jo. Konsollbasert. Vi startet med C++ i høst, men hadde java i fjor. Problemet er at jeg ikke er vant med å behandle I/O i forhold til filer, samt å bruke MSDN Lenke til kommentar
willbend Skrevet 11. november 2005 Del Skrevet 11. november 2005 Seriøst, du kan å lage et snake spill men du greier ikke å finne ut av et lite problem som det der? Hvor lang tid har du programmert c++? 5140501[/snapback] Jeg har laget snakespillet jo. Konsollbasert. Vi startet med C++ i høst, men hadde java i fjor. Problemet er at jeg ikke er vant med å behandle I/O i forhold til filer, samt å bruke MSDN 5140723[/snapback] Konsoll basert snakespill, haha. Kan jeg få kildekoden? Lenke til kommentar
Knut Marius Skrevet 11. november 2005 Forfatter Del Skrevet 11. november 2005 (endret) Konsoll basert snakespill, haha. Kan jeg få kildekoden? Konsollbasert ja. Funker helt fint det. Vi har ikke begynt å lære om noen grafiske biblioteker i C++ enda. Gidder ikke legge ut hele kildekoden her nå, med mindre du har planer om å bruke den til noe annet enn spydige kommentarer. Edit: Legger ut den midlertidige programfila HER. Spillet er som sagt under utvikling, så hvis noen vil komme med konstruktive forslag til videreutvikling er det flott. Endret 11. november 2005 av Knut Marius Lenke til kommentar
Peter Skrevet 11. november 2005 Del Skrevet 11. november 2005 (endret) Antar at du bruker std::fstream std::fstream fp; fp.open("minfil.txt", std::ios::out|std::ios::app); // (app for append) så vil du skrive på slutten av filen. if(fp.is_open()) { // (...) legg inn data her } fp.close() Alternativt: std::fstream fp; fp.open("minfil.txt", std::ios::out); if(fp.is_open()) { fp.seekp(std::ios::end); // søker mot slutten av filen // (...) legg inn data her } fp.close(); Håper dette hjelper. Synes spillet fungerte kjempebra. Veldig interessert i å se koden dersom du vil legge den ut! @willbend: Går an å oppføre seg voksent selv om man ikke risikerer å få seg en på trynet når man er dust på et forum. Endret 11. november 2005 av Nazgul Lenke til kommentar
Knut Marius Skrevet 11. november 2005 Forfatter Del Skrevet 11. november 2005 Nazgul: Takker for oppklarende kode, og kommentar til spillet! Hadde i utgangspunktet ikke tenkt å legge ut den komplette koden her nå med det første, i og med at innleveringen først er om en uke, og jeg ville synes det var litt kjedelig dersom noen plutselig leverte identisk kode som meg Men jeg kan jo eventuelt sende det til deg dersom du er interessert. Har du forresten en idè angående det å klare å rangere spillere etter score innad i fila? Alternativet ville vel være å hente alle poengsummer og navn fra fila inn i programmet og så rangere det deretter, men hvordan vil jeg da kunne klare å lese ut setningene som to separate verdier og ikke èn? (Er jo bare poengsummene som skal sammenlignes, men navnene må jo følge med de og). Takker igjen for konstruktivt svar! Lenke til kommentar
Cascade Skrevet 12. november 2005 Del Skrevet 12. november 2005 (endret) Synes spillet fungerte bra jeg også, kunne kanskje gjort seg med litt farger... Ikke bry deg om de som ler, dette er et forum for alle som er interresert. Ikke bare de som kan alle kodene til c++ utenatt... Har ingen peilig på c++ osv... Men er vel lov til å si sin mening likevel Det eneste er at når du trykker motsatt knapp av det "slangen" går får du game over; bør gå bort. Det var det mest irriterende jeg opplevde med det orginale snake... Er bare min mening, men hvis du vil lage noe likt det originale snake er det din sak EDIT: trykkleif; Dahlspilsen gjør sitt inntog Endret 12. november 2005 av Cascade Lenke til kommentar
Peter Skrevet 12. november 2005 Del Skrevet 12. november 2005 (endret) Det er flere måter å sortere på. Enten må du sortere ved innskrift (til filen), eller ved utskrift (fra filen). Personlig ville jeg nok ha gått for den siste. Enkleste måten å gjøre det på, etter min mening, vil være å ha en fil slik: <score><space><navn> 1045 Nazgul og co Jeg vil ikke gjøre koden for deg med en gang, da dette er skole, men her er pseudokode: Les linje en og en linje fra fil og putt i vektor - tips: fp.eof() std::string std::getline std::vector sorter vektor - sort() skriv ut - cout Med dette trenger du antakelig ikke å dele strengen engang, fordi tallene kommer først i strengen i vektoren og er de som vil gjøre utslaget for sorteringen. Om du i ettertid derimot vil ha tallet, så kan du, etter å ha sortert strengen, bruke en miks av std::string::find og std::string::substr for å hente ut tallet. Trenger du fysisk kode, får du først vise hva du har kommet frem til. (Altså bare funksjonen, du trenger ikke poste hele programmet) Endret 12. november 2005 av Nazgul Lenke til kommentar
Knut Marius Skrevet 12. november 2005 Forfatter Del Skrevet 12. november 2005 (endret) Nazgul: Aha! Genialt Takker for tips igjen! Men et lite spørsmål: Når du skriver "sort()", henviser du da til en eksisterende funksjon, eller må jeg lage det selv? Husker vi hadde om sorteringsalgoritmer og denslags i fjor, men det greieste hadde jo såklart vært å kunne bruke noe som eksisterte fra før Cascade: Ja, jeg regna med at noen ville kommentere det med at man ikke kan trykke "tilbake" uten å dø. I utgangspunktet tenkte jeg ikke over dette når jeg programmerte, men merket det selvfølgelig når jeg skulle teste spillet. Men så kom jeg til å tenke på at det jo var sånn på tidlige versjoner av snake, så jeg har latt det være sånn inntil videre. Men jeg er helt enig i at det er irriterende, så jeg kommer nok til å endre det Endret 12. november 2005 av Knut Marius Lenke til kommentar
willbend Skrevet 12. november 2005 Del Skrevet 12. november 2005 (endret) Herregud, faens forum nerder. Jeg mente ingenting ondskapsfullt med "haha", jeg har aldri sett et konsollbasert snakespill før, så det var litt artig tenkte jeg. Det var et kult spill, kunne du sendt meg kildekoden Knut Marius? Endret 12. november 2005 av willbend Lenke til kommentar
Peter Skrevet 13. november 2005 Del Skrevet 13. november 2005 (endret) Nazgul: Aha! Genialt Takker for tips igjen! Men et lite spørsmål: Når du skriver "sort()", henviser du da til en eksisterende funksjon, eller må jeg lage det selv? Husker vi hadde om sorteringsalgoritmer og denslags i fjor, men det greieste hadde jo såklart vært å kunne bruke noe som eksisterte fra før 5142402[/snapback] Du kan bruke den som finnes fra før, eller du kan lage din egen. Spørs jo helt hva oppgaven krever. Personlig ville jeg nok ha brukt den innebygde sort()-funksjonen. Du kan forsåvidt ta en titt her ang. sorteringsalgoritmer. Herregud, faens forum nerder. *snip* Det var et kult spill, kunne du sendt meg kildekoden Knut Marius? 5143873[/snapback] Sjarmerende, lurer på hva svaret blir... Du kan banne og sverte så mye du vil, du kan forbanne meg om det er din greie. I alle tilfeller vil uansett jeg komme seirende ut av det, fordi jeg vet hva vanlig folkeskikk er. Nerd? Jepp, og stolt av det! (Det heter forresten forumnerder: AMO, bare sånn oss nerder imellom.) Endret 13. november 2005 av Nazgul Lenke til kommentar
genstian Skrevet 13. november 2005 Del Skrevet 13. november 2005 Jeg kan ikke prøve snake spillet din for det er kompilert for Windows og jeg bruker Linux. Synes du kan laste opp koden. Lenke til kommentar
Peter Skrevet 13. november 2005 Del Skrevet 13. november 2005 Jeg tror ikke det vil funke på linux uten en del arbeid, fordi han har sikkert brukt en god del av window API for konsollen. Lenke til kommentar
Knut Marius Skrevet 13. november 2005 Forfatter Del Skrevet 13. november 2005 (endret) Jeg tror ikke det vil funke på linux uten en del arbeid, fordi han har sikkert brukt en god del av window API for konsollen. 5147784[/snapback] Det er nok riktig ja.. Nazgul: Jeg fikk til den sorteringsfunksjonen nå, men problemet er følgende: Strengene sorteres ikke på samme måte som tall. Første siffer blir sorter isolert, deretter andre siffer osv. Ergo tror den at en poengsum på 5 ligger godt over en poengsum på 3000 fordi 5 ligger over 3. Jeg kunne selvfølgelig castet strengene til tall, men problemet er jo at både poengsum og navn ligger i samme streng... Endret 14. november 2005 av Knut Marius Lenke til kommentar
Manfred Skrevet 15. november 2005 Del Skrevet 15. november 2005 Herregud, faens forum nerder. Jeg mente ingenting ondskapsfullt med "haha", jeg har aldri sett et konsollbasert snakespill før, så det var litt artig tenkte jeg.Det var et kult spill, kunne du sendt meg kildekoden Knut Marius? 5143873[/snapback] Det var vel ikke dette som ble kritisert heller, men første innlegget ditt i denne tråden. Du forventer at alle skal kunne alt, eller? Det er faktisk mange som kan mye programmering, men lite IO... Det er forskjellig hva folk fokuserer på og slikt vet du. Det er lov til å ha litt folkeskikk her, og ikke oppføre deg som en allvitende og arrogant tulling. Lenke til kommentar
unwill Skrevet 15. november 2005 Del Skrevet 15. november 2005 (endret) Morsomt En ting du kanskje kan forbedre på er at slangen går raskere vertikalt enn horisontalt. Eller den går egentlig ikke raskere, det er bare at "rutenette" ikke er av kvadrater så det føles som om slangen går mye raskere vertikalt. Litt Offtopic: Hvilken bok bruker dere på høgskolen? Endret 15. november 2005 av unwill Lenke til kommentar
Knut Marius Skrevet 15. november 2005 Forfatter Del Skrevet 15. november 2005 Takker for god respons unwill: Stemmer at slangen går raskere vertikalt enn horisontalt, og dette har som du nevner med å gjøre at fonten som brukes som standard i console ikke er kvadratisk. En annen i klassen har brukt en god slump med tid på å finne ut av dette, og greide det til slutt. Selv har jeg ikke prioritert å bruke masse tid på å finne ut av dette, og jeg tror neppe at han vil gi meg koden for å si det sånn. Men dersom jeg får tid så skal jeg prøve å se nærmere på det... Akkurat for øyeblikket bruker vi ikke en egen bok som pensum. Vi har fått et stort kompendium om C++ som et par forelesere på høyskolen har laget, i tillegg til en del powerpointpresentasjoner som brukes i forelesningene. Vi har en såkalt "støttelitteraturbok" som mange har valgt å kjøpe for å ha ekstra stoff. Selv har jeg ikke kjøpt denne boka, men får oppgitt fra sidemann her at den visstnok heter "The C++ programming language" Jeg har forresten lagt ut en litt oppdatert versjon av spillet. Highscorefunksjonen min har jeg ikke fått ordnet helt enda, så den sorterer fortsatt tallene som strenger. Link til spillet Lenke til kommentar
Peter Skrevet 15. november 2005 Del Skrevet 15. november 2005 (endret) Tallene ligger fortsatt først i strengen, så dersom du gjør om strengene til tall (atoi()), så mener jeg å huske at atoi lese frem til første whitespace, noe som skulle være safe i ditt tilfelle. Ble uansett usikker på om dette ble noe bedre løsning. Mulig det er bedre å lage en liten struct: struct Player { std::string navn; int poeng; }; std::vector<Player> highScore; (...) Så skriver du din egen sorteringsalgoritme. Da må du gjøre en liten endring i "leshighscore" funksjonen din sånn at den henter ut poengsum og navn fra filen og putter dem i en struct, som du igjen putter i vectoren. Og det er i den funksjonen jeg forslår at du også sorterer. En enkel måte vil være: void minClass::minInsert(const Player& pl) { std::vector<Player>::iterator it; bool inserted = false; for(it=highscore.begin();it<highscore.end();it++) { if(pl.score > it->score) { minVector.insert(it,pl); inserted = true; break; } } if(!inserterted) minVector.push_back(pl); } Sikkert noen små skrivefeil, men tror du skjønner poenget. Endret 15. november 2005 av Nazgul Lenke til kommentar
Knut Marius Skrevet 18. november 2005 Forfatter Del Skrevet 18. november 2005 Spillet er nå levert, og den ferdige versjonen ligger HER for de som er interessert Kan legge ut kildekoden etterhvert hvis noen fortsatt vil se den 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å