Hallo Leute
Ich "programmmiere" seit 2 Monaten
Ertmal wollte ich sagen das Ich diese Seite bis jetzt echt toll finde Weiter so ^^
So nun zu meiner eingentlichen Farge ich wollte mir sein spiel machen nennen wir es ma "Irrgarten ich bin jetzt auch so weit gekommen dass ich das spielfeld hab das so ungefähr aussieht
#######################
#C....*...*..................*#
#................*......*.....#
#.......****...............****#
#...........................$#
#######################
man steuern die figur c und das ziel ist es an das $ zeichen zu kommen
ich bin nun soweit dass wenn man auf enter klikt die figur pro klikt seinem Ziel näher kommt
ich wollte nun wissen wie ich es schaffe das man die figur selber in irgendeine richtung steuern kann
danke im voraus
Ich programmiere In C
<<Code.Blocks>>
Problem bei "unten,oben,links,rechts" Bewegung
-
- Beiträge: 2
- Registriert: Do Jan 15, 2009 8:39 pm
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Problem bei "unten,oben,links,rechts" Bewegung
Also, unter DirectX(keine Ahnungs ob es auch mit OpenGL geht) könntet du mit DirectInput die Pfeiltasten Ablesen.
Eine weitere Möglichkeit wäre es, unetn am spielfeld ne inegabe machen zu lassen, die nur das erste zeichen das Eingegeben wurde
Interprtiert und die Figur Bewegt.
Eine andere Möglichkeit ist mir jezt nicht bekannt.
Aber sonst wilkommen im Forum.
Eine weitere Möglichkeit wäre es, unetn am spielfeld ne inegabe machen zu lassen, die nur das erste zeichen das Eingegeben wurde
Interprtiert und die Figur Bewegt.
Eine andere Möglichkeit ist mir jezt nicht bekannt.
Aber sonst wilkommen im Forum.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Problem bei "unten,oben,links,rechts" Bewegung
Hallo und willkommen
Ich nehme mal stark an, dass du das in der Konsole ohne spezielle Libraries machen willst
Nun musst du dir gut überlegen, wie du das machst.
Im Endeffekt kannst du kein Zeichen einzeln auf der Konsole verändern (kannst du natürlich iwie, aber ist ja mal egal).
Du musst also bei jeder Änderung den kompletten Bildschirm neuzeichnen.
Du brauchst also einen Speicher, in dem dein Bildschirminhalt gehalten wird, der verändert wird, wenn eine Taste z.B. gedrückt wurde und dann neu auf den Bildschirm gespeichert wird.
Nun musst du wissen, wo sich dein C und wo sich dein Ziel befindet.
Dein Spielfeld kannst du ja schon zeichnen. Mit dieser Anordnung hier geht das ähnlich.
Du gibst einfach zuerst 25 (=Breite) Zeichen von screen aus, fügst dann ein "\n" an, gibst die nächsten 25 aus etc bis du alle Zeilen (20 in meinem Bsp) ausgegeben hast.
Wenn du dein Spielfeld ausgegeben hast frägst du nach einer Tasteneingabe.
Die wertest du dann aus.
Bsp:
w => nach oben
a => nach links
s => nach unten
d => nach rechts
q => beenden
Je nachdem was gedrückt wurde führst du deine Aktion aus.
Wenn du z.B. nach Links gehst, überprüfst du, ob du nicht schon ganz links stehst.
Wenn nicht, dann kannst du gucken, was denn in dem Feld links von dir ist (durch die cposx).
Ist da frei, dann kannst du rein.
Heißt: In das Feld schreibst du das C, im Feld mit dem alten C schreibst du eine Leerstelle.
Dann änderst du noch cposx und cposy auf die neuen Koordinaten.
Dann kannst du screen wieder zeichnen.
Wenn du das geschafft hast, dann hast du eine Art 2D-Text-Renderer programmiert
Sogar mit Kollisionserkennung
Wenn du etwas nicht verstehst, dann frag einfach
Ich nehme mal stark an, dass du das in der Konsole ohne spezielle Libraries machen willst
Nun musst du dir gut überlegen, wie du das machst.
Im Endeffekt kannst du kein Zeichen einzeln auf der Konsole verändern (kannst du natürlich iwie, aber ist ja mal egal).
Du musst also bei jeder Änderung den kompletten Bildschirm neuzeichnen.
Du brauchst also einen Speicher, in dem dein Bildschirminhalt gehalten wird, der verändert wird, wenn eine Taste z.B. gedrückt wurde und dann neu auf den Bildschirm gespeichert wird.
Code: Alles auswählen
char screen[25*20];//Die Zahlen stehen für Höhe und Breite, dass musst du anpassen
Code: Alles auswählen
int cposx, cposy;
int targetx, targety;
Du gibst einfach zuerst 25 (=Breite) Zeichen von screen aus, fügst dann ein "\n" an, gibst die nächsten 25 aus etc bis du alle Zeilen (20 in meinem Bsp) ausgegeben hast.
Wenn du dein Spielfeld ausgegeben hast frägst du nach einer Tasteneingabe.
Die wertest du dann aus.
Bsp:
w => nach oben
a => nach links
s => nach unten
d => nach rechts
q => beenden
Je nachdem was gedrückt wurde führst du deine Aktion aus.
Wenn du z.B. nach Links gehst, überprüfst du, ob du nicht schon ganz links stehst.
Wenn nicht, dann kannst du gucken, was denn in dem Feld links von dir ist (durch die cposx).
Ist da frei, dann kannst du rein.
Heißt: In das Feld schreibst du das C, im Feld mit dem alten C schreibst du eine Leerstelle.
Dann änderst du noch cposx und cposy auf die neuen Koordinaten.
Dann kannst du screen wieder zeichnen.
Wenn du das geschafft hast, dann hast du eine Art 2D-Text-Renderer programmiert
Sogar mit Kollisionserkennung
Wenn du etwas nicht verstehst, dann frag einfach
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
-
- Beiträge: 2
- Registriert: Do Jan 15, 2009 8:39 pm
Re: Problem bei "unten,oben,links,rechts" Bewegung
Danke für die schnelle antwort
schande über mein haupt -_- weil ich die sachen die du erklärt hast zum ersten ma höre
sorry würde mich noch über ein paar tipps freuen
falls es nichts ausmacht poste ich hier den quellcode
schande über mein haupt -_- weil ich die sachen die du erklärt hast zum ersten ma höre
sorry würde mich noch über ein paar tipps freuen
falls es nichts ausmacht poste ich hier den quellcode
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#ifdef __unix__
#define clrscr() printf("\x1B[2J")
#elif __BORLANDC__ && __MSDOS__
#include <conio.h>
#elif __WIN32__ || _MSC_VER
#define clrscr() system("cls")
#else
#define clrscr() printf("clrscr() - Fehler\n")
#endif
#define HINDERNISSE 150
char spielfeld[15][50];
void createspielfeld(void)
{
int i, j, x, y;
for(i=0, j=0; j < 50; j++)
spielfeld[i][j] = '#';
for(i=1 ;i < 15; i++)
for(j=0;j<50;j++)
{
if(j==0 || j==49)
spielfeld[i][j] = '#';
else
spielfeld[i][j] = ' ';
if(i==13 && j==48)
spielfeld[i][j] = 'O';
}
for(i=14,j=0;j<50;j++)
spielfeld[i][j] = '#';
for(i=0;i<=HINDERNISSE;i++)
{
x=rand()%14;
y=rand()%48;
if(x<15&&y<50 && x>0&&y>0)
spielfeld[x][y] = '*';
}
spielfeld[1][1]=' ';
}
void showspielfeld(void)
{
int i, j;
clrscr();
for(i=0; i < 15; i++)
for(j=0;j<50;j++)
{
printf("%c",spielfeld[i][j]);
if(j==49)
printf("\n");
}
}
int step(int x, int y, int xalt, int yalt)
{
printf("<ENTER>"); getchar();
if(spielfeld[x][y] == 'O')
{
spielfeld[x][y] = 'C';
spielfeld[xalt][yalt] == ' ';
showspielfeld();
printf("Level eins erfolgreich geschafft\n");
exit (EXIT_SUCCESS);
}
else if(spielfeld[x][y] == ' ');
{
spielfeld[x][y] = 'C';
spielfeld[xalt][yalt] = ' ';
showspielfeld();
if( y+1<49 && spielfeld[x][y+1] !='*' &&
yalt!=y+1 && step(x,y+1,x,y) )
return 1;
else if( x+1<14 && spielfeld[x+1][y] !='*' && xalt!=x+1 && step(x+1,y,x,y) )
return 1;
else if( x-1>0 && spielfeld[x-1][y] !='*' && xalt!=x-1 && step(x-1,y,x,y) )
return 1;
else if( y-1>0 && spielfeld[x][y-1] !='*' && yalt!=y-1 && step(x,y-1,x,y) )
return 1;
}
}
int main(void)
{
createspielfeld();
step(1,1,1,1);
return EXIT_SUCCESS;
}
Re: Problem bei "unten,oben,links,rechts" Bewegung
Willkommen
Ich hab es mal geschafft ein sehr systemabhängiges Windows-Spiel zu programmieren, das man mit den Pfeiltasten steuern kann.
Den Quellcode habe ich hier verlinkt.
Wobei ich gerade sehe, dass der Auszug im Beitrag nicht gerade sinnvoll ist...
Die Funktion "spielzug" könnte dich interessieren.
Aber das einfachste ist am Anfang wahrscheinlich die WASD-Steuerung.
Ich hab es mal geschafft ein sehr systemabhängiges Windows-Spiel zu programmieren, das man mit den Pfeiltasten steuern kann.
Den Quellcode habe ich hier verlinkt.
Wobei ich gerade sehe, dass der Auszug im Beitrag nicht gerade sinnvoll ist...
Die Funktion "spielzug" könnte dich interessieren.
Aber das einfachste ist am Anfang wahrscheinlich die WASD-Steuerung.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Problem bei "unten,oben,links,rechts" Bewegung
Gut, du bist schon relativ weit.
Funktioniert das alles bisher so?
Den Code habe ich mir jetzt nicht genau durchgeschaut, denke aber, dass man das noch etwas kürzer/einfacher schreiben kann.
Deine neue main:
Deine step Funktion solltest du überarbeiten.
Speichere am besten global, wo dein C steht, und benutze dann step so:
step ( änderung nach x, änderung nach y);
Funktioniert das alles bisher so?
Den Code habe ich mir jetzt nicht genau durchgeschaut, denke aber, dass man das noch etwas kürzer/einfacher schreiben kann.
Deine neue main:
Code: Alles auswählen
int x, y;
int main(void)
{
char weiter = 1
char input = 0;
createspielfeld();
while(weiter) {
//nun bekommst du input
fgets(input,1,stdin);
//bitte hier den EIngabepuffer leeren...
switch (input) {
case 'w': // nun bewegst du dich
case 'q': weiter = 0;break;
default: break;
}
}
return EXIT_SUCCESS;
}
Speichere am besten global, wo dein C steht, und benutze dann step so:
step ( änderung nach x, änderung nach y);
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.