貪吃蛇程序,帶仿真圖哦
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (12.24 KB, 下載次數: 60)
下載附件
2018-6-4 17:52 上傳
0.png (45.82 KB, 下載次數: 49)
下載附件
2018-6-4 17:52 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<stdlib.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- #include <math.h>
- /***************初始化*************/
- sbit up=P3^2;
- sbit right=P3^1;
- sbit left=P3^3;
- sbit down=P3^4;
- u8 addx,addy;
- u8 head_x[40],head_y[40];
- u8 poit_x,poit_y;
- u8 leng,z=0,col=1;
- u8 y_list[8];
- /****************延時函數**********/
- void delay1s(void) //誤差 0us
- {
- unsigned char a,b,c;
- for(c=167;c>0;c--)
- for(b=171;b>0;b--)
- for(a=16;a>0;a--);
- }
- void delay1ms(u16 num)
- {
- u16 x,y;
- for(x=num; x>0; x--)
- for(y=110; y>0; y--)
- {
- ;//延時1ms
- }
- }
- /****************控制函數***********/
- void judge_swit()
- {
- if(up==0)
- {
- addx=0;
- if(addy!=-1)
- addy=1;
- else
- addy=-1;
- }
- if(down==0)
- {
- addx=0;
- if(addy!=1)
- addy=-1;
- else
- addy=1;
- }
- if(right==0)
- {
- addy=0;
- if(addx!=-1)
- addx=1;
- else
- addx=-1;
- }
- if(left==0)
- {
- addy=0;
- if(addx!=1)
- addx=-1;
- else
- addx=1;
- }
- }
- /***************是否相撞****************/
- void judg_out()
- {
- u8 i;
- if(head_x[leng-1]>=8)
- {
- P1=0xff;
-
- }
- }
- /****************顯示函數**************/
- void display()
- {
- u8 i,j;
- u8 x=0;
- u8 y=0;
- u8 w=0x01;
- for(j=0;j<8;j++)
- y_list[j]=0x00;
- for(i=leng-1;i>=1;i--)
- {
- x=head_x[i];
- y=head_y[i];
- switch(x)
- {
- case 0: y_list[0]=w<<y|y_list[0];
- w=0x01;
- break;
- case 1: y_list[1]=w<<y|y_list[1];
- w=0x01;
- break;
- case 2: y_list[2]=w<<y|y_list[2];
- w=0x01;
- break;
- case 3: y_list[3]=w<<y|y_list[3];
- w=0x01;
- break;
- case 4: y_list[4]=w<<y|y_list[4];
- w=0x01;
- break;
- case 5: y_list[5]=w<<y|y_list[5];
- w=0x01;
- break;
- case 6: y_list[6]=w<<y|y_list[6];
- w=0x01;
- break;
- case 7: y_list[7]=w<<y|y_list[7];
- w=0x01;
- break;
- }
-
- }
- }
- /****************主函數****************/
- void main()
- {
- u8 i,x,y;
- /***********中斷初始化*********/
- TMOD = 0x01;
- TL0 = 0x3C;
- TH0 = 0xF6;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- head_x[1]=0;
- head_y[1]=0;
- head_x[2]=0;
- head_y[2]=0;
- leng=3;
- poit_x=4;
- poit_y=4;
- while(1)
- {
- x = rand()%7+1;
- y = rand()%7+1;
- if(!up||!right||!left||!down)
- judge_swit();
- if(poit_x==head_x[1]+addx&&poit_y==head_y[1]+addy)
- {
- leng++;
- poit_x=x;
- poit_y=y;
- }
- else if(poit_x==head_x[1]-addx&&poit_y==head_y[1]-addy)
- {
- leng++;
- poit_x=x;
- poit_y=y;
- }
- // judg_out();
- head_x[1]=head_x[1]+addx;
- head_y[1]=head_y[1]+addy;
-
- for(i=leng-1;i>1;i--)
- {
- head_x[i]=head_x[i-1];
- head_y[i]=head_y[i-1];
- }
- display();
- delay1s();
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
First_Game.zip
(55.31 KB, 下載次數: 116)
2018-6-4 15:29 上傳
點擊文件名下載附件
|