Nyt spil i C++

Tags:    c++

<< < 12 > >>
Hey alle sammen

Jeg skal lave et spil med C++ sproget og er kun nybegynder. Jeg har forstand på funktioner, arrays, lidt klasser osv af det som man lærer i en nybegynder bog.
Men jeg har virkelig svært ved at komme igang med mit spil. Jeg ved ikke helt hvordan logikken skal være i det, men jeg ved hvordan spillet skal være:
Det hedder box racer, man kører i en racer-bil og skal undgå at ramme de kasser der kommer på vejen. Der er så 3 forskellige hastigheder som man kan vælge imellem.
Spillet skal være sådan, at der er 3 vognbaner. Da spillet er i 2D, kommer kasserne ovenfra og på vej mod bilen som er nedenunder. Mht. hastighederne, er det så kun kasserne der skal blive hurtigere og langsommere.
Ved siden af alt det, kan man så se hvor mange "liv" man har tilbage og hvor mange point man har samlet. Point samles ved at lade kasserne forbi bilen uden at blive ramt.

Som kode, har jeg det her som start:
--------------------------------------------------
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

using namespace std;

int main(void)
{
Beep(440, 100); //lyd eksempel

int box_tilstand [100];
int box_x[100];
int box_y[100];

int n1 = 0; // n1 er en tæller
for(n1=0; n1 <= 100; n1++) // resetning af variabler
{
box_tilstand[n1] = 0;
box_x[n1] = 0;
box_y[n1] = 0;
}

while(1==1) // 1 lig 1 er sandt, derfor kører while uendeligt!
{
system("cls");

void vis_grafik(void)
{
}

void bruger_input(void)
{
}

void ryk_bil(void)
{
}
}
system("PAUSE");
return n1;
}

--------------------------------------------------

Jeg håber at nogle kan hjælpe mig igang. Jeg har læst så meget på nettet, og søgt efter engelske tutorials som det altid er bedst anbefalet når man skal lave spil, men det hjalp ikke.

Tak på forhånd!
-------------------
Der findes ingenting der så let slår fejl, som tanker

[Redigeret d. 02/01-06 23:08:40 af Hitman Joe]



BoxList er en std::vector, en vector er en art dynamisk array, BoxList.size() fortæller hvor mange elementer der er vectoren, push_back tilføjer et element til vectoren og erase fjerne et element.

Denne kode:

if(BoxList.size() < 10 && Random(3) == 0)
{
BoxList.push_back(Point(Random(GetXSize()), 0));
}

checker om der er mindre end 10 elementer i BoxList (dvs. der er mindre end 10 kasser på skærmen). Hvis der er mindre end ti trækker vi et tilfældigt tal: 0 <= tal < 3, hvis dette tal er 0, indsætters en ny box i vectoren. Det tilfældige tal bruges til at skabe en spredning på hvornår boksene kommer frem.

Denne linie:
BoxList.push_back(Point(Random(GetXSize()), 0));
Tilføjer en kasse, X positionen er tilfældig, og Y er 0, dvs toppen af skærmen.
Det der sker er at man opretter et Point object, kalder constructoren, der sætter x og y for objectet. Derpå kopieres dette Point/punkt til vectoren.
Man kunne også skrive linien som:
int x = Random(GetXSize());
int y = 0;
Point P;
P.x = x;
P.y = 0;
BoxList.push_back(P);

Point er en class der bruges til at holde styr på et punkt (i dette tilfælde en kasse. et punkt er defineret som x,y

Hvis du kun vil have tre vognbaner kan du sætte kassens x til at være 0, 1, 2 og så tegne dem f.ex 10 tegn brede.
Når du flytter "bilen" kan du flytte den 10 step eller lade den køre glidene.
Hvis du kun har 3 vognbaner skal du måske lave noget der gør at der altid er plads til bilen.



Jeg har også lige et spørgsmål.
Det drejer sig om funktionen:
Fold kodeboks ind/udKode 

Hvad er det helt præcist at der sker i den sætning?

På forhånd tak.



Hvis du læser om GetAsyncKeyState på msdn står der:

"If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks."

& er bit-vis-and operatoren, resultatet af & er de bit der er sat på både venster og højre side.
I vores funktion kalder vi GetAsyncKeyState og and'er resultatet med 0x8000, derved får vi netop MSB (af en SHORT) som fortæller om tasten er trykket eller ikke.
?: operatoren evaluerer udtrykket til venstre for ?, hvis det er != 0 bruges delen til venstre for : ellers delen til højre for :

Man kunne også skrive den samme funktion som:
Fold kodeboks ind/udKode 

Men jeg er doven.



<< < 12 > >>
t