最近Soc的報告想做一下不一樣的

想說有Matrix_Led了那為什麼不做一下貪食蛇

想著想著 就把心中所有的程式碼都在腦中實作出來了

不過沒有什麼時間 所以就沒有加上linked_list了

寫的有點差 = =

被學長們看到應該會被笑吧 = =

sneak 

-----------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

#define uchar unsigned char
#define MAX 8  //can be change the MAX size

uchar matrix[MAX][MAX];  //main matrix
uchar die_matrix[MAX][MAX]; //die_matrix is a zero matrix to light on and light off

typedef struct sneak_body{  //struct the sneak's row and col
  int row;
  int col;
}sneak_body;

void init_sneak();  //initial set
void move(int direct);  //send the direct and head's body's tail's row and col
void up(void);  //move to up
void down(void); //move to down
void left(void); //move to left
void right(void); //move right
void die(void);  //to light on and light off

void print(void);
int matrix2binary(int row);  //matrix_led_to_use

sneak_body head;
sneak_body body1;
sneak_body body2;
sneak_body tail;

int main(){
 int t = 0;
 init_sneak(); //initial the sneak
 print();
 while (1){
  fflush(stdin);
  scanf("%d",&t);
  move(t);
  print();
  printf("\n");
 }
 system("pause");
}

void init_sneak(){  //initial sneak set
 matrix[0][0] = 1;
 matrix[0][1] = 1;
 matrix[0][2] = 1;
 matrix[0][3] = 1;

 head.row = 0;
 head.col = 3;
 
 body1.row = 0;
 body1.col = 2;

 body2.row = 0;
 body2.col = 1;

 tail.row = 0;
 tail.col = 0;
}

void move(int direct){  //select move to where@@?
 switch(direct){
  case 1:  //1 is up
   up();  //send row and col now
   break;
  case 2:  //2 is downt
   down();  //send row and col now
   break;
  case 3:  //3 is left
   left();  //send row and col now
   break;
  case 4:  //4 is right
   right();  //send row and col now
   break;
  default:
   break;
 }
 return;
}

void up(void){  //set head to up and clear tail's light
 do{
  if ((head.row - 1) < 0){ //over the side
   die();
   break;
  }
  if (matrix[head.row - 1][head.col] == 1){
   int i=0;
   do{
    if (((head.row - 1) == body1.row) && (head.col == body1.col)){  //head back to touch body nothing
     i = 1;
     break;
    }
    else{
     die();
     i = 1;
     break;
    }
   }while(0);
   if(i != 0){
    break;
   }
  }
  if (matrix[head.row - 1][head.col] != 1){
   matrix[head.row - 1][head.col] = 1;

   matrix[tail.row][tail.col] = 0;

   tail.row = body2.row;
   tail.col = body2.col;

   body2.row = body1.row;
   body2.col = body1.col;

   body1.row = head.row;
   body1.col = head.col;

   head.row = head.row - 1;
   head.col = head.col;
   break;
  }
  printf("abcd");
 }while(0);
/* if ((head.row - 1) < 0) //over the side
  die();
 if (matrix[head.row - 1][head.col] == 1){
  if (((head.row - 1) == body.row) && (head.col == body.col)){  //head back to touch body nothing
   return;
  }
  else{ //head touch tail or others die
   die();
  }
 }
 else{
  matrix[head.row - 1][head.col] = 1;

  matrix[tail.row][tail.col] = 0;

  tail.row = body.row;
  tail.col = body.col;
 
  body.row = head.row;
  body.col = head.col;

  head.row = head.row - 1;
  head.col = head.col;
 }*/
 return;
}

void down(void){  //set head to down and clear tail's light
 do{
  if ((head.row + 1) >= MAX){ //over the side
   die();
   break;
  }
  if (matrix[head.row + 1][head.col] == 1){
   int i = 0;
   do{
    if (((head.row + 1) == body1.row) && (head.col == body1.col)){  //head back to touch body nothing
     i = 1;
     break;
    }
    else{
     i = 1;
     die();
     break;
    }
   }while(0);
   if (i != 0)
    break;
  }
  if (matrix[head.row + 1][head.col] != 1){
   matrix[head.row + 1][head.col] = 1;

   matrix[tail.row][tail.col] = 0;

   tail.row = body2.row;
   tail.col = body2.col;

   body2.row = body1.row;
   body2.col = body1.col;

   body1.row = head.row;
   body1.col = head.col;

   head.row = head.row + 1;
   head.col = head.col;
   break;
  }
 }while(0);
/* if ((head.row + 1) >= 8) //over the side
  die();
 if (matrix[head.row + 1][head.col] == 1){
  if (((head.row + 1) == body.row) && (head.col == body.col)){  //head back to touch body nothing
   return;
  }
  else{ //head touch tail or others die
   die();
  }
 }
 else{
  matrix[head.row + 1][head.col] = 1;

  matrix[tail.row][tail.col] = 0;

  tail.row = body.row;
  tail.col = body.col;

  body.row = head.row;
  body.col = head.col;

  head.row = head.row + 1;
  head.col = head.col;
 }*/
 return;
}
void left(void){  //set head to left and clear tail's light
 do{
  if ((head.col - 1) < 0){ //over the side
   die();
   break;
  }
  if (matrix[head.row][head.col - 1] == 1){
   int i = 0;
   do{
    if ((head.row == body1.row) && ((head.col - 1) == body1.col)){  //head back to touch body nothing
     i = 1;
     break;
    }
    else{ //head touch tail or others die
     die();
     i = 1;
     break;
    }
    if (i != 0)
     break;
   }while(0);
  }
  if (matrix[head.row][head.col - 1] != 1){
   matrix[head.row][head.col - 1] = 1;

   matrix[tail.row][tail.col] = 0;

   tail.row = body2.row;
   tail.col = body2.col;

   body2.row = body1.row;
   body2.col = body1.col;

   body1.row = head.row;
   body1.col = head.col;

   head.row = head.row;
   head.col = head.col - 1;
   break;
  }
 }while(0);
/* if ((head.col - 1) < 0) //over the side
   die();
 if (matrix[head.row][head.col - 1] == 1){
  if ((head.row == body.row) && ((head.col - 1) == body.col)){  //head back to touch body nothing
   return;
  }
  else{ //head touch tail or others die
   die();
  } 
 }
 else{
  matrix[head.row][head.col - 1] = 1;

  matrix[tail.row][tail.col] = 0;

  tail.row = body.row;
  tail.col = body.col;

  body.row = head.row;
  body.col = head.col;

  head.row = head.row;
  head.col = head.col - 1;
 }*/
 return;
}
void right(void){  //set head to right and clear tail's light
 do{
  if ((head.col + 1) >= MAX){ //over the side
   die();
   break;
  }
  if (matrix[head.row][head.col + 1] == 1){
   do{
    int i = 0;
    if ((head.row == body1.row) && ((head.col + 1) == body1.col)){  //head back to touch body nothing
     i = 1;
     break;
    }
    else{ //head touch tail or others die
     die();
     i = 1;
     break;
    }
    if (i != 0)
     break;
   }while(0);
  }
  if (matrix[head.row][head.col + 1] != 1){
   matrix[head.row][head.col + 1] = 1;

   matrix[tail.row][tail.col] = 0;

   tail.row = body2.row;
   tail.col = body2.col;

   body2.row = body1.row;
   body2.col = body1.col;

   body1.row = head.row;
   body1.col = head.col;

   head.row = head.row;
   head.col = head.col + 1;
   break;
  }
 }while(0);
 /*if ((head.col + 1) >= 8) //over the side
  die();
 if (matrix[head.row][head.col + 1] == 1){
  if ((head.row == body.row) && ((head.col + 1) == body.col)){  //head back to touch body nothing
   return;
  }
  else{ //head touch tail or others die
   die();
  }
 }
 else{
  matrix[head.row][head.col + 1] = 1;

  matrix[tail.row][tail.col] = 0;

  tail.row = body.row;
  tail.col = body.col;

  body.row = head.row;
  body.col = head.col;

  head.row = head.row;
  head.col = head.col + 1;
 }*/
 return;
}

void die(void){
 printf("die");
 while(1);//{
 //printf->die_matrix;
 //delay();
 //printf->matrix;
 //}
}

void print(void){
 int count1,count2;
 for (count1 = 0;count1 < MAX;count1++){
  for (count2 = 0;count2 < MAX;count2++){
   printf("%d",matrix[count1][count2]);
  }
  printf("\t");
  printf("%x",matrix2binary(count1));
  printf("\n");
 }
}

int matrix2binary(int row){ //MAX is the side
 int col,temp,sum = 0;
 temp = 0x01; //temp will be shift left
 for (col = 1;col < MAX;col++){ //initial the temp
  temp <<= 1;
 }
 for (col = 0;col < MAX;col++){ //when the row and col in matrix is 1 then the sum or the temp
  if (matrix[row][col] == 1){
   sum = sum | temp;
  }
  temp >>= 1;
 }
 return sum;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ffyy99 的頭像
    ffyy99

    喜歡亂搞的世界

    ffyy99 發表在 痞客邦 留言(0) 人氣()