Avatar billede webstuff Nybegynder
23. august 2006 - 12:11 Der er 8 kommentarer og
2 løsninger

Har jeg lavet ordentlig kode? og evt. flere ideer?

Hejsa allesammen

Jeg er nybegynder i C++, og har så lavet et lille bitte tekst spil, hvor man skal lande en raket på månen.

Så ville først og fremmest høre om min kode ser ordentligt ud, og hvad der evt. kan gøres for at optimere den.

For det andet, så ville jeg høre om der var noget der havde nogle gode ideer til lignende ting jeg kunne lave for ligesom at træne de ting jeg kan og få lidt blod på tanden inden jeg går videre.

Her er min nuværende kode.
----------------------------------------------------------
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>

using namespace std;

int game()
{
    const int start_height = 1500;
    const float accel = 1.6;
    const int max_speed = 5;
    const int time = 1000;

    int height = start_height;
    int speed = 0;
    int fuel = 50;
    int counter = 3;
    int choice;
   
    cout << "Spillet start om:" << endl << endl;
   
   
        // En løkke som laver en nedtælling
        while(counter>0)
            {
                        cout << counter << "\t";
                        counter--;
                        Sleep(1000);
            }
                        cout << "GO!!!";
                        Sleep(500);
                        cout << endl << endl;
                       
    //Løkken som styrer hele spillet
    while(height>0)
    {
                    //Beregner ny fart og ny højde.
                  speed = speed + accel*time/1000;
                  height = height - speed*time/1000;
                 
        //Tjekker om brugeren bremser raketten
        if(_kbhit() != 0 && _getch() == 32)
            {
                    //Tjekker om brugeren har brændstof nok til at bremse raketten
                    if(fuel>0)
                    {
                              fuel = fuel-1;
                              speed = speed - 5;
                    }
            }
            if(height<0)
            {
                        height = 0;
            }
            //Udskrive nye informationer
            cout << "Hoejde: " << height << " m\tFart: " << speed << " m/s\tBraendstof: " << fuel << " units" << endl << endl;
           
            //Delay'er løkken så spillet ikke kører for hurtigt
            Sleep(time/5);
    }
   
    //Tjekker om brugeren landede ordentligt
    if(speed<=max_speed)
    {
              cout << "Tillykke, du landede perfekt!" << endl << endl;
    }
    else
    {
              cout << "\a\a\a CRASH!!!!!! \a\a\a" << endl << "Du styrtede ned!" << endl << endl;
              cout << "Vil du proeve igen??" << endl << "JA: 1 Enter" << endl << "NEJ: 2 Enter" << endl;
             
                  cin >> choice;
   
                  //Tjekker om brugeren vil spille igen
                  if(choice==1)
                  {
                                game();
                  }
                  else
                  {
                      return 0;
                  }
    }
}
int main()
{
    system("TITLE Luna Lander by Andreas Kristiansen");
       
    int choice;
   
   
    //Lidt forhistorie
    cout << "Den 20. juli 1969 landede modulet Eagle fra Apollo 11 paa maanens overflade." << endl;
    cout << "Tiden forud var praeget af nogen dramatik, idet computeren, der skulle styre nedstigningen svigtede!" << endl;
    cout << "Man var altsaa noed til at lande manuelt... Det er ikke simpelt: Eagle er meget lille, saa austronauterne ligger paa ryggen og kigger opad!" << endl;
    cout << "Deres eneste fornemmelse af position er en hoejde - og en fartmaaler!!!" << endl;
    cout << "Desuden er braendstofsmaengden i bremseraketten staerkt begraenset, saa det skal doseres meget praecist saa man ikke loeber toer i stor hoejde og bliver knust mod maanens overflade!" << endl << endl;

    cout << "Tryk paa mellemrumstasten for at bremse rakketten men husk du ikke har ret meget braendstof!" << endl;
    cout << "Desuden skal du passe paa med ikke at bruge for meget braendstof saa du flyver op igen, og derved goer det svaerere for dig selv!" << endl << endl;
   
    cout << "Startsituation: 1500 meter ned, 50 braendstofsdosier der hver bremser med 5m/s.!" << endl;
    cout << "Naar du rammer maanens overflade skal din hastighed vaere max 5m/s ellers bliver du knust, held og lykke pilot!!!" << endl << endl << endl;;
   
    cout << "Vil du starte spillet??" << endl << "JA: 1 Enter" << endl << "NEJ: 2 Enter"<< endl;
    cin >> choice;
   
            //Tjekker om brugeren vil starte spillet!
            if(choice==1)
            {                                                                         
                        game();
            }
            else
            {
                return 0;
            }
}
----------------------------------------------------

Mvh. Andreas :-)
Avatar billede webstuff Nybegynder
23. august 2006 - 13:46 #1
forresten, så vil jeg også høre om jeg har nogle overflødige biblioteker med?
Avatar billede mollevp Nybegynder
23. august 2006 - 16:18 #2
En umiddelbar ting er din #include's:

Headers introduced by Standard C++ have no .h extension (e.g. <iostream>, <cstdio>). Prefer these to proprietary C++ headers that conform to no formal standard (e.g. <iostream.h>) and to Standard C headers (e.g. <stdio.h>), inherited by Standard C++ for backwards compatibility. See also: http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4
Avatar billede mollevp Nybegynder
23. august 2006 - 19:51 #3
Jeg ved ikke om det er en forbedring af koden, men du lyder som om du er interesseret i at lære sproget - et forslag var at prøve at lave en spil klasse med nogle de metoder/funktioner der skal bruges for at spille spillet.

ala:

class LunarLander
{
public:
    printAbout();
    printMenu();
    startNewGame();
    saveHiscore();
.....
};

Ville være en hurtigt forslag..
Avatar billede nlf Nybegynder
24. august 2006 - 12:15 #4
"forresten, så vil jeg også høre om jeg har nogle overflødige biblioteker med?"

Prøv at fjerne dem én efter én (både i kode og fra linker) og se, om det giver en fejl.
Det er nok den nemmeste metode, hvis du er i tvivl. Det kan jo aldrig skade at prøve.

Og ellers vil mit foreslag også være at gøre dit program mere objekt-orienteret i forhold til den flow-baserede kode, du roder med nu, hvis du agter at lære det fulde potentiale, som C++ kan tilbyde i forhold til C.
Avatar billede webstuff Nybegynder
25. august 2006 - 15:06 #5
mollevp: Jeg er endnu ikke kommet igang med at lære klasser, jeg vil godt have helt styr på det jeg kan indtil videre, så har du nogle ideer til nogle småprogrammer eller småspil jeg kan lave?
Avatar billede webstuff Nybegynder
06. september 2006 - 08:10 #6
Nå er det på tide at lukke?

mollevp og nlf lægger i et svar?
Avatar billede mollevp Nybegynder
06. september 2006 - 09:23 #7
svar
Avatar billede webstuff Nybegynder
07. september 2006 - 11:42 #8
hvis nlf. ikke svarer inden klokken 20.00 i aften får du pointene mollevp
Avatar billede webstuff Nybegynder
08. september 2006 - 00:09 #9
Nu har han også fået noget ekstra tid. Vi deler pointene mollevp ;o)
Avatar billede webstuff Nybegynder
08. september 2006 - 00:09 #10
hovsa
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester