最近Soc的報告想做一下不一樣的
想說有Matrix_Led了那為什麼不做一下貪食蛇
想著想著 就把心中所有的程式碼都在腦中實作出來了
不過沒有什麼時間 所以就沒有加上linked_list了
寫的有點差 = =
被學長們看到應該會被笑吧 = =
-----------------------------------------------------
#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;
}