51単片机--8*8时阵贪吃蛇--C言语
51156 ワード
学習体験フレームワーク(C言語に基づいてヘビを貪る):a:オープニングアニメーションb:スクリーン表示c:ヘビの移動d:最終点数の表示コード:①オープニングアニメーションx=100、1サイクルで表示する.(赤外線制御も可能)
②ヘビの移動二次元配列はヘビの座標,0,空き地,>0&&<65,ヘビ,65,果実を表す
③表示用16進法74 HC 595チップ
④表示点数の半分は、それぞれの方と10位を表示します.
⑤方向に赤外線制御があり、グローバル変数commandに保存されます.
//
wile(x--)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan[i]);
delay(10);
}
}
②ヘビの移動二次元配列はヘビの座標,0,空き地,>0&&<65,ヘビ,65,果実を表す
//
while(1)
{
//
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
{
if(map[i][j]==length)
{
map[i][j]=0;
}
else if(map[i][j]>1 && map[i][j]<65)
{
map[i][j]++;
}
else if(map[i][j]==1)
{
map[i][j]++;
switch(command)
{
case 0:hand_i=i-1;hand_j=j;break;
case 1:hand_i=i;hand_j=j+1;break;
case 2:hand_i=i+1;hand_j=j;break;
case 3:hand_i=i;hand_j=j-1;break;
}
}
}
}
//
if(hand_i==-1)
{
hand_i=7;
}
else if(hand_i==8)
{
hand_i=0;
}
if(hand_j==-1)
{
hand_j=7;
}
else if(hand_j==8)
{
hand_j=0;
}
//
if(map[hand_i][hand_j]>1 && map[hand_i][hand_j]<65)
{
break;//
}
if(map[hand_i][hand_j]==65)
{
map[hand_i][hand_j]=1;
length++;
score++;
while(1) // ,
{
i = rand() % SIZE; j = rand() % SIZE;//
if (map[i][j] == 0)
{
map[i][j] = 65;
break;
}
}
beep();
//
SBUF=score+0x30;// 0x30, hex , 0x30。
while(!TI); //
TI=0;
}
else
{
map[hand_i][hand_j]=1;
}
③表示用16進法74 HC 595チップ
//
for(i=0;i<SIZE;i++)
{
for(j=0;j<SIZE;j++)
{
if(map[i][j]!=0)
{
switch(i)
{
case 0:Duan[j]+=0x01;break;
case 1:Duan[j]+=0x02;break;
case 2:Duan[j]+=0x04;break;
case 3:Duan[j]+=0x08;break;
case 4:Duan[j]+=0x10;break;
case 5:Duan[j]+=0x20;break;
case 6:Duan[j]+=0x40;break;
case 7:Duan[j]+=0x80;break;
}
}
}
}
for(i=0;i<SIZE;i++)
{
Hc595SendByte(ledwei[i],Duan[i]);
Duan[i]=0x00;
delay(10);
}
④表示点数の半分は、それぞれの方と10位を表示します.
//
for(i=0;i<SIZE;i++)
{
Duan[i]=0x00;
}
switch((score%10))
{
case 0:Duan[4]=0x7f;
Duan[5]=0x41;
Duan[6]=0x41;
Duan[7]=0x7f;break;
case 1:Duan[4]=0x00;
Duan[5]=0x00;
Duan[6]=0x00;
Duan[7]=0x7f;break;
case 2:Duan[4]=0x79;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x4f;break;
case 3:Duan[4]=0x49;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x7f;break;
case 4:Duan[4]=0x0f;
Duan[5]=0x08;
Duan[6]=0x08;
Duan[7]=0x7f;break;
case 5:Duan[4]=0x4f;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x79;break;
case 6:Duan[4]=0x7f;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x79;break;
case 7:Duan[4]=0x01;
Duan[5]=0x01;
Duan[6]=0x01;
Duan[7]=0x7f;break;
case 8:Duan[4]=0x7f;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x7f;break;
case 9:Duan[4]=0x4f;
Duan[5]=0x49;
Duan[6]=0x49;
Duan[7]=0x7f;break;
}
switch(score/10)
{
case 0:Duan[0]=0x7f;
Duan[1]=0x41;
Duan[2]=0x41;
Duan[3]=0x7f;break;
case 1:Duan[0]=0x00;
Duan[1]=0x00;
Duan[2]=0x00;
Duan[3]=0x7f;break;
case 2:Duan[0]=0x79;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x4f;break;
case 3:Duan[0]=0x49;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x7f;break;
case 4:Duan[0]=0x0f;
Duan[1]=0x08;
Duan[2]=0x08;
Duan[3]=0x7f;break;
case 5:Duan[0]=0x4f;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x79;break;
case 6:Duan[0]=0x7f;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x79;break;
case 7:Duan[0]=0x01;
Duan[1]=0x01;
Duan[2]=0x01;
Duan[3]=0x7f;break;
case 8:Duan[0]=0x7f;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x7f;break;
case 9:Duan[0]=0x4f;
Duan[1]=0x49;
Duan[2]=0x49;
Duan[3]=0x7f;break;
}
while(1)
{
for(i=0;i<SIZE;i++)
{
Hc595SendByte(ledwei[i],Duan[i]);
delay(10);
}
}
⑤方向に赤外線制御があり、グローバル変数commandに保存されます.
f(IrValue[2]!=~IrValue[3])
{
return;
}
//
switch(IrValue[2])
{
case 8:temp=3;break;//
case 82:temp=2;break;//
case 90:temp=1;break;//
case 24:temp=0;break;//
}
if(abs(temp-command)!=2)// ,
{
command=temp;
}