Hoffentlich mehr als ein Pong

Präsentation und Organisation von eigenen Projekten
Antworten
Dosi
Beiträge: 1
Registriert: Fr Jan 06, 2017 7:58 am

Hoffentlich mehr als ein Pong

Beitrag von Dosi » Fr Jan 06, 2017 8:20 am

Ich muß mich wegen der Physik korrigieren.
Ich habe stabile Partikelbindungen hinbekommen (hier allerdings nicht umgesetzt)
und das Licht, das sind wohl zufällige Spannungsschwankungen im Hitzegerüttel.
Es geht aber in Wahrheit nicht um Atomphysik, sondern um die Kollisionsabfrage.
Es klingt halt nach Atomphysik, so wie die's von der Terminologie her vermurkst haben.
Sagen wir statt "durch Gegenladung bindendes Partikel" Elektron oder nennen wir das Gewackel
im Mesh "Längendilatation" oder den Wert des Bewegungsvektors vor der Bewegung "Bezugspunkt" oder die
Rundungsfehler "Quantisierung", egal...
es ist in Wahrheit total billig: Kraftfeldkugeln mit Koordinaten und Bewegungsvektoren nähern die räumliche Gestalt
der Objekte an und interagieren untereinander mit ihren Kraftwirkungen.

Planetenbahnen kann man mit demselben Algorithmus auch simulieren.
Einfach die Abstände und Vektoren der Partikel entsprechend initialisieren, dann fängt das Zeug an, sich zu
umkreisen.

Code: Alles auswählen

/*  Prog-Pong Version 0.9

  Es gibt nur einen Grund dafuer, dass ich es geschrieben habe:
  Testen, ob man die KI mit der Physik zusammengebaut kriegt.
   Es geht anscheinend theoretisch schon, aber hier funktioniert es nur schlampig und sehr schwach.
   Im originalen Prong war vermutlich ein viel primitiverer Algorithmus am Werk.
   Von der Version fuer die Magnavox Odyssey ganz zu schweigen...
   Für die Banden macht man dieselbe Kraftwirkung und läßt die X-Komponente einfach weg.
    Dann wirkt die Kraft auf einer Linie. Man könnte hinterher auch noch den Vektor rotieren, dann geht es auch
   mit schrägen Linien. 
   
   Einfach den Minimax-Algorithmus mit der Physik zusammenbauen.
   Jetzt gibt es zwei Moeglichkeiten: man tauscht Weitblick gegen Schaetzfehler, oder der Computer sieht immer nur,
   was er direkt vor der Nase hat, handelt dann aber mit perfekter Praezision.
   Man koennte vielleicht auch das Detail in Abhaengigkeit vom Abstand des Balls variieren (auf grosse Distanz den Gegner austricksen,
   von der Naehe den Ball praezise treffen).
   Und wie macht man die Physik ueberhaupt grober?
   Steht da: 'die Elastizitaet ist keine reine Materialkonstante, sondern auch von v2 abhaengig.'.
    Das bedeutet im Klartext: die Festigkeit der fuer die Annaeherung von raeumlichen Objekten noetigen Partikelbindungen
	(fuer die man obendrein den Mittelwert mit dem alten Vektor als Bezugsvektor zuweisen muss, damit das Gewackel irgendwann aufhoert) steht in keinem
	linearen Bezug zur Raumaufloesung.
	 Also: man kann die Elastizitaet und damit den genauen Ablauf der Verformungen nur erraten, aber in der Praxis nie genau ausrechnen.
	 Ist ja auch klar: wenn man mit dem Auto gegen eine Betonmauer faehrt, ist es unmoeglich zu bestimmen, wie sich der Hirnschaden hinterher genau
	 manifestiert. Oder denken wir an Bollertraumas durch Raeder, die sich von der Lenkstange loesen. Manchmal reicht schon ein Stoss am Tuerrahmen fuers
	 lebenslaengliche Wachkoma.
	 Alles runterskalieren, die groesse des Kraftfelds und den Raum?
	 Dann laeuft dasselbe mit einer niedrigeren Aufloesung und damit schneller ab.
	 Mit Proportionalitaet und Geschwindigkeitsverhaeltnissen haben wir Lobomonks immer so unsere Schwierigkeiten...
	 
	 Das ist nicht bloss ein beschissenes Pong, sondern wahrscheinlich die Demonstration einer goldrichtigen Methode.
	 Die grundsaetzliche Vorgehensweise koennte man weiterentwickeln, dass es sogar noch fuers autonome Fahren taugt.*/


#include <stdio.h>
#include <math.h>

#define PLAYER -1
#define COM 1
#define OFF 2



 
   #define SCHEITEL 2.5
   #define LADUNG 20
   #define MAXKRAFT 1
   #define LADNULL 100
   #define TRAEGSCHWELLE 0.3
   #define TIMESLICE 10.0
   
   #define MAXDEPTH 5
   #define MOV 4.0
   #define TIMESLICEB (TIMESLICE/MOV)
   #define SCALE 4.0
    


struct
 {
  float x,y;
  float xvec, yvec;
  float touch;
 } ball;      /* der Ball */
 
 int xbuf,ybuf;
 int reinit=PLAYER;
 
 
 struct
 {
  float height;
  int score;
 
 }player[2];  /* Spieler und Computer */


 float heightcmp;
 float distance, power;
 int x_buf, y_buf;
 int x,y;
 int sign;



void simmove(void)
{
	
	
  for(heightcmp=player[0].height-3; heightcmp <= player[0].height+3; heightcmp+=3 )
  {
  xbuf=0, ybuf=0;
  

  power=
   sqrt ( 
    ( ball.x - 20 )  *
    ( ball.x - 20 )+
       ( ball.y - heightcmp) *
    ( ball.y - heightcmp) );
  
    distance=power;

   x_buf=(ball.x - 20);
   y_buf=(ball.y - heightcmp);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=PLAYER;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;
 
  }



   for(heightcmp=player[1].height-3; heightcmp <= player[1].height+3; heightcmp+=3 )
  {
  xbuf=0, ybuf=0;

  power=
   sqrt ( 
    ( ball.x - 60 )  *
    ( ball.x - 60 )+
       ( ball.y - heightcmp) *
    ( ball.y - heightcmp) );
  
    distance=power;

   x_buf=(ball.x - 60);
   y_buf=(ball.y - heightcmp);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

    /*  der Ball besteht aus einem beweglichen Atom und die Schlaeger aus jeweils drei festen,
      die sich in Y-Richtung gemeinsam verschieben lassen */
 
  }



  xbuf=0, ybuf=0;

  power=
   sqrt ( 
    ( 0 )  *
    ( 0 )+
       ( ball.y +3) *
    ( ball.y + 3) );
  
    distance=power;

   x_buf=(0 );
   y_buf=(ball.y +3);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

/* Boden und Decke */
 


  power=
   sqrt ( 
    ( 0 )  *
    ( 0 )+
       ( 22-ball.y) *
    ( 22-ball.y ) );
  
    distance=power;

   x_buf=(0);
   y_buf=(ball.y-22);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

 





  ball.x+=ball.xvec/TIMESLICEB; /* Ball bewegen */
  ball.y+=ball.yvec/TIMESLICEB;

 
}

/* Vorausschauende KI-Simulation */

signed int ki_lookout ( float x, float y, float xvec, float yvec, int play_height, int com_height, int depth, int touch )
{
  signed int buf, comwins, plwins, even,
             pl1, pl2, pl3, comsure;
  if ( depth > MAXDEPTH ) return 0;


    if ( play_height > 15 )play_height=15;
    if ( play_height < 3 ) play_height=3;
    if ( com_height < 3 ) com_height=3;
    if ( com_height > 15 ) com_height=15 ;


 if ( x/MOV >= 60/MOV ) return PLAYER;
    else
    if ( x/MOV <= 20/MOV ) return COM;   /* Ball am Gegner durch? Anderer Gegner gewinnt..*/



   ball.x=x, ball.y=y, ball.xvec=xvec, ball.yvec=yvec, player[0].height=play_height, player[1].height=com_height, ball.touch=touch;
   simmove();
   
   touch=ball.touch, y=ball.y, x=ball.x, xvec=ball.xvec, yvec=ball.yvec, play_height=player[0].height, com_height=player[1].height;
  

  buf=0; comwins=0; plwins=0; even=0; comsure=0;
  pl1=0, pl2=0, pl3=0;

   plwins=0; comwins=0;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec, play_height, com_height, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec,  play_height-MOV, com_height, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf == COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec,  play_height+MOV, com_height, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf == COM ) comwins++;
   if ( plwins >=1 ) pl1=1;
   if ( comwins==3 ) comsure=1;

   plwins=0; comwins=0;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec,  play_height-MOV, com_height+MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec,  play_height, com_height+MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec,  play_height+MOV, com_height+MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   if ( plwins>=1) pl2=1;
   if ( comwins==3 ) comsure=1;

   plwins=0; comwins=0;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec, play_height, com_height-MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec, play_height+MOV, com_height-MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   buf=ki_lookout( x+xvec, y+yvec, xvec,yvec, play_height-MOV, com_height-MOV, depth+1, touch );
   if ( buf==PLAYER ) plwins++;
   if ( buf==COM ) comwins++;
   if ( plwins>= 1 ) pl3=1;
   if ( comwins==3 ) comsure=1;

   /* rekursiver Selbstaufruf zur Simulation der Folgeschritte */

  if ( pl1 == 1 && pl2==1 && pl3== 1 )
  {
   /*  printf("Spieler siegt bei %f %f %d\n", x,y, depth ); getch(); */ /* debug muß zuerst kommen */
    return PLAYER;
  }
  else if (comsure==1 ) return COM;
  return 0;
}


int main(void)
{
 struct
 {
  float x,y;
  float xvec, yvec;
  float touch;
 } ball;      /* der Ball */
 
 int xbuf,ybuf;
 int reinit=PLAYER;
 
 
 struct
 {
  float height;
  int score;
 
 }player[2];  /* Spieler und Computer */


 float heightcmp;
 float distance, power;
 int x_buf, y_buf;
 int x,y;
 int sign;

 char screen[80][25];
 
 player[0].score=0, player[1].score=0;

 while ( 1 )
 {
  ball.x=40, ball.y=4+rand()%8;
  if ( reinit==PLAYER ) ball.xvec=5, ball.yvec=0, ball.touch=PLAYER;
   else ball.xvec=-5, ball.yvec=0, ball.touch=COM;
  player[0].height=8, player[1].height=8;
 
 
 while(1)
 {

  for(heightcmp=player[0].height-3; heightcmp <= player[0].height+3; heightcmp+=3 )
  {
  xbuf=0, ybuf=0;
  

  power=
   sqrt ( 
    ( ball.x - 20 )  *
    ( ball.x - 20 )+
       ( ball.y - heightcmp) *
    ( ball.y - heightcmp) );
  
    distance=power;

   x_buf=(ball.x - 20);
   y_buf=(ball.y - heightcmp);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=PLAYER;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;
 
  }



   for(heightcmp=player[1].height-3; heightcmp <= player[1].height+3; heightcmp+=3 )
  {
  xbuf=0, ybuf=0;

  power=
   sqrt ( 
    ( ball.x - 60 )  *
    ( ball.x - 60 )+
       ( ball.y - heightcmp) *
    ( ball.y - heightcmp) );
  
    distance=power;

   x_buf=(ball.x - 60);
   y_buf=(ball.y - heightcmp);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

    /*  der Ball besteht aus einem beweglichen Atom und die Schlaeger aus jeweils drei festen,
      die sich in Y-Richtung gemeinsam verschieben lassen */
 
  }



  xbuf=0, ybuf=0;

  power=
   sqrt ( 
    ( 0 )  *
    ( 0 )+
       ( ball.y +3) *
    ( ball.y + 3) );
  
    distance=power;

   x_buf=(0 );
   y_buf=(ball.y +3);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

/* Boden und Decke */
 


  power=
   sqrt ( 
    ( 0 )  *
    ( 0 )+
       ( 22-ball.y) *
    ( 22-ball.y ) );
  
    distance=power;

   x_buf=(0);
   y_buf=(ball.y-22);
 
  if ( power-SCHEITEL < 0.0 ) sign= -1.0; else sign= 1.0;
   power=power-SCHEITEL;

    if ( fabs(power) < 0.001 ) power=sign*0.001;    

    power= ( LADUNG / (( power * power)+MAXKRAFT) ) *sign  ;

   if ( fabs ( power) >= LADNULL ) power=0;

          if ( distance != 0 )
          {
          y_buf*=power/distance;
          x_buf*=power/distance;

        } else x_buf=0, y_buf=0;
        
        
        
        if ( (distance=sqrt ( x_buf*x_buf+y_buf*y_buf )) > TRAEGSCHWELLE )
   {
      power= (distance-TRAEGSCHWELLE)/ distance;
      x_buf*=power; y_buf*=power;
      ball.touch=COM;
    }  else x_buf=0, y_buf=0 ;

   
    ball.xvec+=x_buf, ball.yvec+=y_buf;

 





  ball.x+=ball.xvec/TIMESLICE; /* Ball bewegen */
  ball.y+=ball.yvec/TIMESLICE;

 
  if ( kbhit() )
  {
   switch( getch() )
   {
    case 'e' : if ( player[0].height > 3 ) player[0].height--; break;
    case 'd' : if ( player[0].height < 15 ) player[0].height++; break;
    case 'u' : if ( player[1].height > 3 ) player[1].height--; break;
    case 'j' : if ( player[1].height < 15 ) player[1].height++; break;
    default : break;
   } /* Spielereingaben entgegennehmen */

  }


  y_buf=0;

  if ( x_buf=ki_lookout(ball.x, ball.y, ball.xvec*1.0, ball.yvec*1.0, player[0].height, player[1].height, 1, ball.touch )!=PLAYER )
  { if ( player[1].height > 3 ) y_buf=0; }

   if ( x_buf== COM ) goto skip;
  if ( x_buf=ki_lookout(ball.x, ball.y, ball.xvec*1.0, ball.yvec*1.0, player[0].height, player[1].height-MOV, 1, ball.touch )!=PLAYER )
  { if ( player[1].height > 3 ) y_buf=-1; }

   if ( x_buf==COM ) goto skip;
  if ( x_buf=ki_lookout(ball.x, ball.y, ball.xvec*1, ball.yvec*1, player[0].height, player[1].height+MOV, 1, ball.touch )!=PLAYER )
  { if ( player[1].height < 15 ) y_buf=1; }

   skip:
  player[1].height+=y_buf;
   /* Computerentscheidung */


  y=0;
  while(y < 25 )
  {
   x=0;
   while ( x < 80 )
   {
    screen[x][y]=' ';
   x++;
   }
   y++;
  }

  y=0;
  while ( y < 6 )
  {
   screen[20][(int)player[0].height-3 + y ]='|';
   y++;
  }

  y=0;
  while ( y < 6 )
  {
   screen[60][(int)player[1].height-3 + y ]='|';
   y++;
  }


  
 if ( ball.x < 80 && ball.x > 0 && ball.y < 25 && ball.y > 0 )
 screen[(int)ball.x][(int)ball.y]='O';

 system("cls\n");
 y=0;
  while(y < 18 )
  {
   x=0;
   while ( x < 77 )
   {
    putch(screen[x][y]);
   x++;
   }
   printf("\n");
   y++;
  }

  printf("-------------------------------------------------------------------------------");
  printf("\nSpieler 1 : %d      Spieler 2 : %d", player[0].score, player[1].score );

  /* Bildschirm im Textmodus darstellen */

  if ( ball.x < 0 || ball.x > 80 )
  {
   if ( ball.x > 60 ) player[0].score++, reinit=PLAYER;
   else if ( ball.x < 20 ) player[1].score++, reinit=COM;
   
   break;
  }
 }

 }


}


Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Hoffentlich mehr als ein Pong

Beitrag von cloidnerux » Fr Jan 06, 2017 9:22 am

Hallo Dosi und Willkommen im Forum :D

Ich habe deinen Beitrag mal in unseren "Projekte" bereich verschoben, du willst es ja anscheinend vorstellen.
Hat es einen Grund, dass du alles in C geschrieben hast?

Ansonsten: Hast du deine Mathematik/Physik mal auf einem Blatt Papier zusammen gefasst, dass es einfacher ist zu verstehen, was genau du programmiert hast?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Hoffentlich mehr als ein Pong

Beitrag von Xin » Fr Jan 06, 2017 1:32 pm

Dosi hat geschrieben:Ich muß mich wegen der Physik korrigieren.
...? ^^

Interessante Einleitung für ein erstes Posting.
Ich würde dann mal mit 'Hallo' anfangen :D
Dosi hat geschrieben:Planetenbahnen kann man mit demselben Algorithmus auch simulieren.
Einfach die Abstände und Vektoren der Partikel entsprechend initialisieren, dann fängt das Zeug an, sich zu
umkreisen.
Sehr schön... vielleicht fangen wir kurz damit an, was Du mit dem Algorithmus da gemacht hast, was man zu sehen bekommt, wenn man ihn kompiliert und welche Voraussetzungen man schaffen muss, um ihn zu kompilieren.

Willkommen im Forum, vielleicht stellst Du Dich im entsprechenden Brett einfach mal vor. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten