Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

1

09.04.2009, 12:06

Problem bei der Realisierung eines kleinen Konsolenspieles

Hallo!!!

Haben in der Schule ein Programm geschrieben mit dem man ein kleines Raumschiff aus Sternchen im Fenster steuern und somit herumfliegen lässt. Ist eigentlich sehr fad :? Habe angefangen da man schießen kann aber das funktioniert nicht so richtig. Mit einer Kugel funktioniert es wunder bar aber wenn ich erneut abfeuere verschwindet die erste Kugel sofort und die neu wird abgeschoßen. Hab mir überlegt ob man das nicht mit einer Klasse für die Kugel beheben kann, aber weis nicht wie man eine Instanz mit einen Tastendruck erzeugt :( . Vielleicht gibt es auch bessere Möglichkeiten? Danke im Voraus und alle schöne Ferien die jetzt Osterferien haben!

mfg

killmichnich

unregistriert

2

09.04.2009, 12:13

also ich habs immer so gemacht:
schreib eben diese klasse mit der kugel, und dann erstell ein array davon
dann bei jedem tastendruck überpfüfst du welcher schuss "frei" ist, also welcher grad nich unterwegs is, und wenn du einen hast schießte den ab

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

3

09.04.2009, 12:15

Also soweit ich weiß kannst du alles, was du mit Klassen machen kannst, auch ohne realisieren... Soll heißen, dass in deiner Spiellogik eher was nicht stimmt, wenn du immer nur eine Kugel auf dem Bildschirm haben kannst. Allerdings kannst du es natürlich auch in eine Klasse packen und dieser dann Methoden wie beispielsweise move() verpassen.
Was die neue Instanz mit Tastendruck angeht... naja, ich denke du weißt bereits, wie man Tasten abfragt. Du könntest es so machen, dass du bei gedrückter Taste einen neuen Schuss (CShot) auf dem Heap erstellst... mit new CShot; den Pointer legst du dann einfach in eine std::list oder ähnliches und kannst dann immer die Schüsse durchgehen, alle weiterbewegen, überprüfen, ob sie noch im Fenster sind, und wenn nicht, dann machst du ein delete drauf und löschst den eintrag aus der liste...

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

4

09.04.2009, 12:41

Danke für die beiden schnellen Antworten! Haben mich sehr viel weitergebracht, denn ich bin wircklich voll "auf der Leitung gestanden". Werde mich gleich reinhängen das ich bald fertig werde.

mfg

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

5

09.04.2009, 12:49

Boa, is mir jetzt erst aufgefallen! Hab ein Problem mit der Zeit. Die Kugel bewegt sich nur weiter wenn ich das Raumschiff um eins weiterbewege. Wie kann man da die Zeit einbauen, so das die Kugel unabhängig vom Raumschiff sich bewegt?

mfg

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

6

09.04.2009, 12:54

[EDIT] Sry, nicht auf den Titel geschaut ^^"


Wenn es nichts kompliziertes sein soll dann kannst du einfach eine endlose While-Schleife machen, und ans Ende ein Sleep() setzen. Die Tastenabfragen kannst du dann mit GetASyncKeyState prüfen.
Nachteile: Wartezeit hängt von den ausgeführten Befehlen und von der Auslastung ab.

7

09.04.2009, 12:57

Es gibt eigentlich gute Bücher mit denen man grob die Grundlagen von Spielen lernt.
Ansonsten müsstest du schon den ganzen Quelltet zeigen, sonst kann ja keiner wissen, wie du es bisher machst.
Lieber dumm fragen, als dumm bleiben!

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

8

09.04.2009, 13:01

Hier ist mal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include<stdlib.h>
#include<stdio.h>
#include<conio2.h>
#include<iostream.h>
#include<windows.h>
#include<dos.h>

int schiff(int xs, int ys, int x, int y){                                                         
    xs=x;                                         
    ys=y;
    gotoxy(xs,ys);
    cout<<"*";
    ys=ys+1;
    xs=xs-1;
    gotoxy(xs,ys);
    cout<<"***";
    ys=ys+1;
    xs=xs+1;
    gotoxy(xs,ys);
    cout<<"*";
    ys=ys+1;
    xs=xs-1;
    gotoxy(xs,ys);
    cout<<"***";
     };


               
int main(){
    int x=40, y=21, xs, ys, i, kx, ky, xg=80, yg=24; //x,y schiff-startkoordinaten; xs,ys schiffkoordinaten; kx ky Kugelkoordinaten

    char antwort;
    bool statusk=false, statusa=false;  //statusk ob eine Kugel vorhanden ist; satausa ob sie mit irgendetwas kolliediert(Fensterrand)

    
    do{
    antwort=getch();
    switch(antwort){                                            
       case 'w': case 'W' : statusk=true; statusa=true; break;
       case 'a': case 'A' : x--; break;
       //case 's': case 'S' : y++; break;

       case 'd': case 'D' : x++; break;
       }                                                        
    
    if(x>xg-1){                //Fenstergröße und Kollisionsabfragung

       x=xg-1;
       }
    if(y>yg-3){
       y=yg-3;
       } 
    if(y<=1){
       y=1;
       }
    if(x<=2){
       x=2;
       }  
    else{
        gotoxy(x,y);
        }
    
    clrscr();
    schiff(xs, ys, x, y);
    if(ky==1){
         statusk = !statusk;
         }     
    if(statusk==true){
         while(statusa==true){             
            kx=x;
            ky=y;
            statusa=false;
            }
         gotoxy(kx,ky);
         printf("*");
         //Sleep(100);

         ky=ky-1;   
         }
    }while(antwort!='b');
    getch();
}
[/cpp]

killmichnich

unregistriert

9

09.04.2009, 13:07

ich sag mal dass du mit GetAsyncKeyState() die tasten abfragen musst dass das klappt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
for(;;)
{
if(GetAsyncKeyState(0x00))
{
x++;
}
if( ...)
usw.

und dann eben jedesmal deinen schuss bewegen:
xs++
}
}


weil so wartest du jedesmal auf die eingabe, und das blockiert

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

10

09.04.2009, 13:13

Danke werde das mal versuchen einzubauen

mfg

Werbeanzeige