Advertisement
Guest User

Untitled

a guest
May 26th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.65 KB | None | 0 0
  1.  
  2. /*The ThreadLoop*/
  3. void* runSnake(void* snakeData){
  4.        
  5.     /*lets cast the submitted data for proper use*/
  6.     snake data = *(snake*)snakeData;
  7.     char tempText[256]; //buffer for the text written by threads       
  8.     int singleFlag = ( gameField.startSnakes == 1 ) ? 1 : 0; //in case its a solo run theres no winner
  9.     enum type {NLEFT=1, ELEFT, SLEFT, WLEFT, NRIGHT, ERIGHT, SRIGHT, WRIGHT, HRAND, FRAND}; //mode identifyiers
  10.  
  11.     pthread_mutex_lock(&gameField.mutex); //mutex on
  12.     gameField.field[data.startX][data.startY] = threadName[data.number]; //the starting point set as letter
  13.     pthread_mutex_unlock(&gameField.mutex); //mutex off
  14.  
  15.     data.running = 1; //the running loop variable
  16.  
  17.     while(data.running == 1){
  18.        
  19.         data.running=0; //resetting the running flag
  20.         pthread_mutex_lock(&gameField.mutex); //mutex on
  21.            
  22.         switch(data.mode){
  23.            
  24.             case 1:
  25.                 //top, left, right, down
  26.                 if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NLEFT;}
  27.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WLEFT;}
  28.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ELEFT;}
  29.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SLEFT;}
  30.                 else{data.running=-1;}
  31.                 break;
  32.  
  33.             case 2:
  34.                 //right, top, down, left
  35.                 if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ELEFT;}
  36.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1;  data.mode = NLEFT;}
  37.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SLEFT;}
  38.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WLEFT;}
  39.                 else{data.running=-1;}
  40.                 break;
  41.  
  42.             case 3:
  43.                 //down, right, left, top
  44.                 if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SLEFT;}
  45.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ELEFT;}
  46.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WLEFT;}
  47.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NLEFT;}
  48.                 else{data.running=-1;}
  49.                 break;
  50.  
  51.             case 4:
  52.                 //left, top, down, right
  53.                 if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WLEFT;}
  54.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SLEFT;}
  55.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NLEFT;}
  56.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ELEFT;}
  57.                 else{data.running=-1;}
  58.                 break;
  59.            
  60.             case 5:
  61.                 //top, right, left, down
  62.                 if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NRIGHT;}
  63.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ERIGHT;}
  64.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WRIGHT;}
  65.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SRIGHT;}
  66.                 else{data.running=-1;}
  67.                 break;
  68.  
  69.             case 6:
  70.                 //right, down, up, left
  71.                 if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ERIGHT;}
  72.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NRIGHT;}
  73.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SRIGHT;}
  74.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WRIGHT;}
  75.                 else{data.running=-1;}
  76.                 break;
  77.  
  78.             case 7:
  79.                 //down, left, right, up
  80.                 if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SRIGHT;}
  81.                 else if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WRIGHT;}
  82.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ERIGHT;}
  83.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NRIGHT;}
  84.                 else{data.running=-1;}
  85.                 break;
  86.  
  87.             case 8:
  88.                 //left, up, down, right
  89.                 if( checkleft(data.startX, data.startY) == 0 ){data.startX--; data.running=1; data.mode = WRIGHT;}
  90.                 else if( checktop(data.startX, data.startY) == 0 ){data.startY--; data.running=1; data.mode = NRIGHT;}
  91.                 else if( checkbottom(gameField.sizeY, data.startX, data.startY) == 0 ){data.startY++; data.running=1; data.mode = SRIGHT;}
  92.                 else if( checkright(gameField.sizeX, data.startX, data.startY) == 0 ){data.startX++; data.running=1; data.mode = ERIGHT;}
  93.                 else{data.running=-1;}
  94.                 break;
  95.  
  96.             case 9:
  97.                 //not set yet
  98.                 break;
  99.  
  100.             case 10:
  101.                 //not set yet
  102.                 break;
  103.                    
  104.         }
  105.            
  106.         /*if the snake survived...*/
  107.         if(data.running == 1){
  108.             if(gameField.startSnakes > 1 || (singleFlag == 1 && gameField.startSnakes == 1)){
  109.                
  110.                 gameField.field[data.startX][data.startY] = threadName[data.number]; //yay, survived
  111.                 sprintf(tempText, "[Game] Snake %c (number %i) stays on position %i/%i\n", threadName[data.number], data.number, data.startX, data.startY);
  112.                 strcat(logText, tempText); //adding message
  113.             }
  114.             else{
  115.                
  116.                 gameField.field[data.startX][data.startY] = threadStop[data.number]; //won, setting stopletter
  117.                 data.running=-1; //stopflag
  118.                 sprintf(tempText, "[Game] Snake %c (number %i) on position %i/%i WON!!! (killed'em all, haw!)\n", threadName[data.number], data.number, data.startX, data.startY); //message
  119.                 strcat(gameField.message, tempText); //adding message
  120.                 strcat(logText, tempText); //adding message
  121.                 gameField.startSnakes--; //running snakes
  122.             }              
  123.         }
  124.         else{
  125.             gameField.field[data.startX][data.startY] = threadStop[data.number]; //died, setting stop letter
  126.             gameField.startSnakes--;
  127.             sprintf(tempText, "[Game] Snake %c (number %i) crashed on position %i/%i... xP\n", threadName[data.number], data.number, data.startX, data.startY);
  128.             strcat(gameField.message, tempText);
  129.             strcat(logText, tempText); //adding message
  130.         }
  131.            
  132.         pthread_mutex_unlock(&gameField.mutex); //mutex off
  133.         usleep(gameField.speed); //SNOOOORRRRREEE
  134.     }
  135.  
  136.         return NULL;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement