iphpbb - Forenarchiv: Archivbeitrag des Forums Freeprogs.iphpbb.com
Verfügbare Informationen zu "Spiel-Idee"

  • Qualität des Beitrags:
  • Beteiligte Poster: vpascal - Dragorad
  • Forum: Freeprogs.iphpbb.com
  • Forenbeschreibung: Der Ort zum Austauschen selbst Programmierter Programme!
  • aus dem Unterforum: Off Topic
  • Antworten: 16
  • Forum gestartet am: Mittwoch 04.04.2007
  • Sprache: deutsch
  • Link zum Originaltopic: Spiel-Idee
  • Letzte Antwort: vor 1 Jahr, 6 Monaten, 1 Tag, 12 Stunden, 13 Minuten
Alle Beiträge und Antworten
vpascal - 10.04.2007, 20:30
Spiel-Idee
Ich hätte ne Idee.... Ich fange an, und jeder der genügend kenntnisse hat um ein Spiel zu programmieren macht mit... Das ist von mir nur ein Test!!!!!!! Bitte bescheid sagen ob's geht. Ich hab leider kein TP, denn das geht nur mit TP:

Code: program Spieletest;
uses crt, graph;
VAR treiber, modus: Integer;
begin;
DetectGraph (treiber, modus);
InitGraph (treiber, modus, 'C:\Turbo\BGI\');{<----ZUM BEISPIEL!!!----<<<}
circle (200, 300, 40);
while readkey = 'd' do
begin
clrscr;
circle (210, 300, 40);
end;
{------------------------------------------------}
while readkey = 'a' do
begin
clrscr;
circle (200, 300, 40);
end;
{------------------------------------------------}
while readkey = 'w' do
begin
clrscr;
circle (200, 310);
end;
{------------------------------------------------}
while readkey = 's' do
begin
clrscr;
circle (200, 300);
end;
{------------------------------------------------}
closegraph;
readkey;
end.


Ich weiss das das ein behämmertes Beispiel ist!!! Wenn man die taste 'd' drückt, geht ein kreis nach rechts, und so weiter...
vpascal - 10.04.2007, 21:01

doch, ich hab jetzt Tp aber das Spiel ist kacke. Ist ja nur ne Demonstration, kein richtiges Spiel. Bitte um viele, viele Verbesserungsvorschläge!!!
Dragorad - 10.04.2007, 22:04

Hab's mal soweit überarbeitet, dass man den Kreis in jede Richtung bewegen kann. Eine Geschwindigkeitskontrolle folgt ...

Code: program   Spieletest;
uses      crt,graph;
VAR       treiber,modus,x,y:Integer;

begin     DetectGraph(treiber,modus);
          InitGraph(treiber,modus,'C:\Turbo\BGI\');{<----ZUM BEISPIEL!!!----<<<}
          x:=200;
          y:=300;
          circle(x,y,40);
          repeat
           while readkey='d' do
           begin
            setcolor(black);
            circle(x,y,40);
            x:=x+1;
            setcolor(white);
            circle(x,y,40);
           end;
           while readkey='a' do
           begin
            setcolor(black);
            circle(x,y,40);
            x:=x-1;
            setcolor(white);
            circle(x,y,40);
           end;
           while readkey='w' do
           begin
            setcolor(black);
            circle(x,y,40);
            y:=y-1;
            setcolor(white);
            circle(x,y,40);
           end;
           while readkey='s' do
           begin
            setcolor(black);
            circle(x,y,40);
            y:=y+1;
            setcolor(white);
            circle(x,y,40);
           end;
          until (readkey<>'w') and (readkey<>'a') and (readkey<>'s') and (readkey<>'d');
          closegraph;
end.
vpascal - 11.04.2007, 15:41

Cool! Vielen dank!
Dragorad - 11.04.2007, 19:12

Hier die Version mit der Geschwindigkeit (ist aber noch nicht ganz ausgefeilt), außerdem kann der Kreis nicht mehr über'n Bildschirmrand hinaus verschwinden (aber nur wenn v=1). Habe auch zwei Units dazugemacht, wegen Vereinfachung (kann man aber auch in eine zusammenschmeißen).

PS: die udata muss als uneu gespeichert werden (oder in der ugraph die uneu durch udata ersetzen)

Code: program   Spieletest;
uses      crt,graph,ugraph;
VAR       treiber,modus:integer;
          r,v,x,y:integer;

{----------------------------------------------------------------------------}

begin     DetectGraph(treiber,modus);
          InitGraph(treiber,modus,'BGI\');
          x:=320;
          y:=240;
          r:=10;
          v:=1;
          circle(x,y,r);
          {------------------------------------------------------------------}
          line(0,450,640,450);
          schreib(10,460,'Dies ist eine Kugelsimulation. Bitte Geben Sie die Geschwindigkeit ein:');
          readln(v);
          {------------------------------------------------------------------}
          repeat
           while readkey='d' do
           begin
            setcolor(black);
            circle(x,y,r);
            if x<629 then x:=x+v
                     else x:=x;
            setcolor(white);
            circle(x,y,r);
           end;

           while readkey='a' do
           begin
            setcolor(black);
            circle(x,y,r);
            if x>11 then x:=x-v
                   else x:=x;
            setcolor(white);
            circle(x,y,r);
           end;

           while readkey='w' do
           begin
            setcolor(black);
            circle(x,y,r);
            if y>11 then y:=y-v
                   else y:=y;
            setcolor(white);
            circle(x,y,r);
           end;

           while readkey='s' do
           begin
            setcolor(black);
            circle(x,y,r);
            if y<439 then y:=y+v
                     else y:=y;
            setcolor(white);
            circle(x,y,r);
           end;
          until (readkey<>'w') and (readkey<>'a') and (readkey<>'s') and (readkey<>'d');
          closegraph;
end.

Code: unit      ugraph;

{----------------------------------------------------------------------------}

interface
uses      crt,graph,uneu;

procedure schreib(x,y:integer;text:string);
procedure vg(x:integer);
procedure hg(x:integer);

{----------------------------------------------------------------------------}

implementation
procedure schreib(x,y:integer;text:string);
          begin
           settextstyle(1,0,1);
           outtextxy(x,y,text);
          end;
procedure vg(x:integer);
          begin
           setcolor(x);
           if (x<0) or (x>15) then
           begin
            fehler;
            halt;
           end;
          end;
procedure hg(x:integer);
          begin
           setbkcolor(x);
           if (x<0) or (x>7) then
           begin
            fehler;
            halt;
           end;
          end;
end.

Code: unit      udata;

{----------------------------------------------------------------------------}

interface
uses      crt;

procedure pinn(x,y:integer);
procedure writexy(x,y:byte;text:string);
procedure writexynr(x,y:byte;zahl:integer);
procedure openwindow(xl,yl,xr,yr:integer);
procedure openwindowende;
procedure programmende;
procedure stringlesen(var lesstr:string;maxlen:byte);
procedure fehler;
procedure laden;

{----------------------------------------------------------------------------}

implementation
procedure pinn(x,y:integer);
          var richtig:boolean;
              a:char;
              k:integer;
              wort:string;
          begin
           clrscr;
           textcolor(white);
           repeat
            clrscr;
            wort:='';
            writexy(x,y,'PIN-Nummer:');
            for k:=1 to 4 do
            begin
             a:=readkey;
             writexy(x+11+k,y,'*');
             wort:=wort+a;
            end;
            richtig:=wort='2927';
            if richtig then
            begin
             textcolor(red+blink);
             writexy(x+17,y,'OK');
             delay(3000);
            end
            else
            begin
             writexy(x+17,y,'Fehleingabe');
             delay(1000);
            end;
            textcolor(white);
           until richtig;
           textcolor(white);
          end;

procedure writexy(x,y:byte;text:string);
          begin
           gotoxy(x,y);
           write(text);
          end;

procedure writexynr(x,y:byte;zahl:integer);
          begin
           gotoxy(x,y);
           write(zahl);
          end;

procedure openwindow(xl,yl,xr,yr:integer);
          type zaehler=array[1..4] of byte;
          var  zahl:zaehler;
          begin
           writexy(xl,yl,'É');
           writexy(xl,yr,'È');
           writexy(xr,yl,'»');
           writexy(xr,yr,'¼');
           for zahl[1]:=xl+1 to xr-1 do writexy(zahl[1],yl,'Í');
           for zahl[2]:=xl+1 to xr-1 do writexy(zahl[2],yr,'Í');
           for zahl[3]:=yl+1 to yr-1 do writexy(xl,zahl[3],'º');
           for zahl[4]:=yl+1 to yr-1 do writexy(xr,zahl[4],'º');
           window(xl+1,yl+1,xr-1,yr-1);
          end;

procedure openwindowende;
          type zaehler=array[1..4] of byte;
          var  zahl:zaehler;
               x,y:integer;
          begin
           x:=30;y:=8;
           writexy(x,y,'É');
           writexy(x,y+4,'È');
           writexy(x+20,y,'»');
           writexy(x+20,y+4,'¼');
           for zahl[1]:=x+1 to x+19 do writexy(zahl[1],y,'Í');
           for zahl[2]:=x+1 to x+19 do writexy(zahl[2],y+4,'Í');
           for zahl[3]:=y+1 to y+3 do writexy(x,zahl[3],'º');
           for zahl[4]:=y+1 to y+3 do writexy(x+20,zahl[4],'º');
           window(x+1,y+1,x+19,y+3);
          end;

procedure programmende;
          begin
           openwindowende;
           clrscr;
           writexy(2,2,' Wirklich beenden?');
           writexy(2,4,' Ja           Nein');
          end;

procedure stringlesen(var lesstr:string;maxlen:byte);
          const ret=#13;
          var   ch:char;
                i,x,y:byte;
          begin
           x:=wherex;
           y:=wherey;
           lesstr:='';
           repeat
            gotoxy(x,y);
            write(lesstr);
            for i:=length(lesstr)+1 to maxlen do write('_');
            gotoxy(x+length(lesstr),y);
            ch:=readkey;
            if (length(lesstr)<maxlen) and (ch<>ret) then lesstr:=lesstr+ch;
           until ch=ret;
           writeln;
          end;

procedure fehler;
          begin
           sound(440);
           delay(250);
           nosound;
          end;

procedure laden;
          var vg,hg,x:integer;
          begin
           vg:=15;hg:=0;
           textcolor(vg);
           textbackground(hg);
           clrscr;
           writexy(30,14,'Daten werden geladen ...');
           for x:=11 to 30 do
           begin
            textcolor(red);
            writexy(x,12,'²');
            delay(250);
           end;
           for x:=31 to 50 do
           begin
            textcolor(yellow);
            writexy(x,12,'²');
            delay(250);
           end;
           for x:= 51 to 70 do
           begin
            textcolor(green);
            writexy(x,12,'²');
            delay(250);
           end;
           textcolor(15);
          end;
end.
vpascal - 11.04.2007, 20:17

Cool Danke, aber wie macht man Gegner? die sich frei bewegen und auch angreifen können? Das dürfte sehr schwierig sein, aber mit Pascal nicht unmöglich, denn Gegner gab es auch mit BASIC.
Dragorad - 11.04.2007, 20:19

Werd' mich mal ransetzen. Die Geschwindigkeit nehm' ich erstmal wieder raus.
vpascal - 11.04.2007, 20:27

wie kann man units mit tp tp-freundlich machen? Mit VP muss man die nur ausführen aber bei tp?
Dragorad - 11.04.2007, 21:07

äh, wie meinst du "tp-freundlich"? Wie man sie einbindet oder wie man sie erstellt?

Die .tpu-Datei musss im Verzeichnis von TP sein, sonst funzt's net.
vpascal - 13.04.2007, 10:00

Muss man die unit nur compilieren???
Dragorad - 13.04.2007, 22:03

Ganz genau. Es muss außerdem so eingestellt sein, wie man bei der Erstellung einer .exe das einstellt.
vpascal - 14.04.2007, 08:50

achso, ok. Wie kann man den gegner machen? while readkey ='s' do circle (???,???,??); circle (???,???,??) oder so?

das wenn man eine bewegung macht dder gegner auch eine macht???
Dragorad - 14.04.2007, 08:57

Ich hab' angefangen, einen Multiplayermodus zu erstellen, dass man mit WASD den Spieler steuert und ein zweiter mit PLÖÄ den Gegner (klappt aber noch nicht ganz richtig). Eine Möglichkeit wäre dann noch eine Art rundenbasierendes Spiel (erst macht der Speier eine best. Anzahl von Schritten, dann der Gegner, dann der Spieler,...).
vpascal - 14.04.2007, 13:04

Achso, das wäre gut. Aber ich will wissen wie man KI's macht... geht das mit Pascal???
Dragorad - 14.04.2007, 22:24

Kann man sicherlich Über'n Zufall machen, oder mit Wahrscheinlichkeitsberechnungen - muss ich mal ausprobieren.
vpascal - 15.04.2007, 11:40

aha
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus diesem Forum
Ähnliche Beiträge
WM Total (Schweiz spiel in gefahr) - Angel (Sonntag 18.06.2006)
fragen zum spiel - Der Arier (Dienstag 18.04.2006)
Das BB4U Sperrung Spiel - GenrePöpel (Mittwoch 03.05.2006)
Spiel gegen Langeweile - Todesengelchen (Mittwoch 16.02.2005)
Filmzitate Spiel - Yorî (Samstag 24.03.2007)