|
最近新接觸的一個(gè)小游戲,打地鼠,已經(jīng)用開(kāi)發(fā)板驗(yàn)證
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (23.61 KB, 下載次數(shù): 76)
下載附件
2020-10-20 23:02 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- #include<stdlib.h>
- sbit RS=P2^0;
- sbit EN=P2^1;
- sbit Speak=P2^2;
- sbit button1=P2^3; //選擇模式鍵
- sbit button2=P2^4; //確認(rèn)鍵、返回鍵、暫停鍵、下一關(guān)開(kāi)始鍵
- sbit Buzzer=P2^6;
- sbit hole1=P2^7; //1號(hào)洞
- sbit SDA=P1^1; //24c02數(shù)據(jù)線
- sbit SCL=P1^0; //24c02時(shí)鐘線
- unsigned char Count; //Play_Song使用
- unsigned char i,j;
- unsigned char temp; //隨機(jī)數(shù)種子
- unsigned char result; //隨機(jī)數(shù)臨時(shí)變量
- unsigned char score; //保存臨時(shí)分?jǐn)?shù)
- unsigned char tempname[2];//保存臨時(shí)分?jǐn)?shù)的名字
- unsigned char time; //保存時(shí)間(30秒倒計(jì)時(shí))
- unsigned char num; //1秒鐘判斷變量
- unsigned char flag1; //1標(biāo)識(shí)得分,led全滅,不進(jìn)行scankey操作
- unsigned char flag2; //1標(biāo)識(shí)得分Buzzer響方式1
- unsigned char flag3; //1標(biāo)識(shí)地鼠出洞時(shí)間到,開(kāi)始下一輪地鼠出洞
- unsigned char flag4; //1標(biāo)識(shí)關(guān)卡時(shí)間到
- unsigned char flag5; //1標(biāo)志暫停
- unsigned char level; //關(guān)卡等級(jí)
- unsigned char holenum; //保存隨機(jī)生成的洞號(hào)
- unsigned char topscore[3]={0}; //保存3個(gè)最高分
- unsigned char name[3][2]={"AA","BB","CC"}; //保存3個(gè)最高分名字
- unsigned char code hole[]={0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P3口控制的洞
- unsigned char code str1[]={"Welcome!"}; //歡迎標(biāo)語(yǔ)
- unsigned char code str2[]={"1.start 2.score"};
- unsigned char code str3[]={"3.exit"};
- unsigned char code str4[]={"See You! "}; //exit界面
- unsigned char code str5[]={"Ready?"};
- unsigned char code str6[]={"GO!"};
- unsigned char code str7[]={"Your Soccer: "}; //查看分?jǐn)?shù)
- unsigned char code str8[]={"Time: Score: "};
- unsigned char code str9[]={" Team: SONGE "}; //隊(duì)名
- unsigned char code str10[]={"Game Over!"};
- unsigned char code str11[]={"You Win! GO?"};
- unsigned char code str12[]={"You Lose!"};
- unsigned char code str13[]={"top1:"};
- unsigned char code str14[]={"Congratulations"};
- unsigned char code str15[]={"hole: level:"};
- unsigned char code str16[]={"top2:"};
- unsigned char code str17[]={"top3:"};
- unsigned char code str18[]={"Your Name:"}; //記錄姓名
- //*************************1602函數(shù)聲明*******************************//
- void displayWelcome(); //顯示歡迎界面
- void displayPrepare(); //顯示選項(xiàng)
- void Game(); //游戲真正進(jìn)行
- void displayGame(); //開(kāi)始游戲
- void displayExit(); //顯示退出界面
- void displaytime();
- void displayChoose(); //顯示選擇界面
- void displayover();
- void scankey();
- void pause();
- void displayScoreNext();
- //***************************基礎(chǔ)函數(shù)*****************************//
- void delayms(unsigned int xms) //延時(shí)xms 毫秒
- {
- unsigned int i,j;
- for(i=xms; i>0; i--)
- for(j=110; j>0; j--);
- }
- void delayus(unsigned int ums) //延時(shí)ums 個(gè)3微秒
- {
- unsigned int i,j;
- for(i=0; i<ums; i++)
- for(j=0; j<3; j++);
- }
- void Time_init() //定時(shí)器初始化,11.0592MZ晶振 初始選擇:定時(shí)器0用于播放音樂(lè),定時(shí)器1關(guān)閉
- { //進(jìn)入游戲:定時(shí)器1用于LCD顯示分?jǐn)?shù)
- TMOD = 0x11; //16位定時(shí)器 退出游戲:定時(shí)器0播放音樂(lè),定時(shí)器1關(guān)閉
- TH0 = 0xDC;
- TL0 = 0x00;
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- ET1=1; //開(kāi)定時(shí)器1中斷
- }
- void Time0() interrupt 1 //定時(shí)器0中斷 播放音樂(lè)
- {
- TH0 = 0xDC;
- TL0 = 0x00;
- Count++; //長(zhǎng)度加1
- }
- void Time1() interrupt 3 //定時(shí)器1中斷 游戲中顯示分?jǐn)?shù)
- {
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256; //每50ms中斷一次
- num++;
- if(num%20==0) //近似1秒鐘
- {
- time--;
- }
- if(num==(60-20*level)) //出洞結(jié)束,level1:3s; level2:2s; level3:1s
- {
- num=0;
- flag3=1;
- }
- if(time==0) //一關(guān)結(jié)束
- {
- time=30;
- flag4=1;
- }
- }
- //***********************播放音樂(lè)*********************************//
- unsigned char code SONG[] ={ //祝你平安
- 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
- 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x00, //27個(gè)數(shù)字
- //0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,
- //0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
- //0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
- //0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
- //0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
- //0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
- //0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
- //0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
- //0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
- //0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
- //0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
- //0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
- //0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,//第217個(gè)數(shù)字
- //路邊的野花不要采
- // 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C,
- // 0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,
- 0x20,0x30,0x1C,0x10,0x18,0x20,
- 0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,
- 0x30,0x80,0xFF,0x20,0x20,0x00,
- //0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
- //0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,
- //0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,
- //0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20,
- //0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F,
- //0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,
- //0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,
- //0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20,
- //0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,
- };
- void Play_Song(unsigned char i) //i=1 播放 路邊的野花不要采
- { //i=0 播放 祝你平安
- unsigned char Temp1,Temp2;
- unsigned int Addr;
- Count = 0; //中斷計(jì)數(shù)器清0
- Addr = i * 27; //音樂(lè)地址
- TR0=1; //開(kāi)啟定時(shí)器0
- while(1)
- {
- Temp1 = SONG[Addr++];
- if (Temp1 == 0xFF) //休止符
- {
- TR0 = 0; //關(guān)閉定時(shí)器0
- delayus(100);
- }
- else if (Temp1 == 0x00) //歌曲結(jié)束符
- {
- TR0=0; //關(guān)閉定時(shí)器0
- return;
- }
- else //正常播放歌曲
- {
- Temp2 = SONG[Addr++];
- TR0 = 1;
- while(1)
- {
- Speak = ~Speak;
- delayus(Temp1);
- if(Temp2 == Count)
- {
- Count = 0;
- break;
- }
- }
- }
- }
- }
- void playBuzzer()
- {
-
- if(flag2==1) //得分響
- {
- for(i=0;i<20;i++)
- { Speak=1;
- delayms(1);
- Speak=0;
- delayms(1);
- }
- Speak=0;Buzzer=0;delayms(500);Buzzer=1;delayms(100);
- }
- else
- {
-
- }
- }
- //******************************24C02環(huán)節(jié)*************************************//
- void init()
- {
- SDA=1;
- delayms(5);
- SCL=1;
- delayms(5);
- }
- void start() //開(kāi)始信號(hào)
- {
- SDA=1;
- delayms(5);
- SCL=1;
- delayms(5);
- SDA=0;
- delayms(5);
- }
- void stop() //停止信號(hào)
- {
- SDA=0;
- delayms(5);
- SCL=1;
- delayms(5);
- SDA=1;
- delayms(5);
- }
- void respons() //應(yīng)答
- {
- unsigned char i;
- SCL=1;
- delayms(5);
- while((SDA==1)&&(i<250))
- i++;
- SCL=0;
- delayms(5);
- }
- void write_byte(unsigned char date)//寫(xiě)字節(jié)
- {
- unsigned char i,temp,j;
- temp=date;
- for(i=0; i<8; i++)
- {
- j=0x80&temp;
- temp=temp<<1;
- SCL=0;
- delayms(5);
- SDA=(bit)j;
- delayms(5);
- SCL=1;
- delayms(5);
- }
- SCL=0;
- delayms(5);
- SDA=1;
- delayms(5);
- }
- unsigned char read_byte()//讀字節(jié)
- {
- unsigned char i,k;
- SCL=0;
- delayms(2);
- SDA=1;
- for(i=0; i<8; i++)
- {
- SCL=1;
- delayms(5);
- k=(k<<1)|SDA;
- SCL=0;
- delayms(5);
- }
- return k;
- }
- void write_add(unsigned char address,unsigned char date)//往地址寫(xiě)數(shù)據(jù)
- {
- start();
- write_byte(0xa0); //控制字寫(xiě)1010 000 0(寫(xiě)操作)
- respons();
- write_byte(address);//存儲(chǔ)單元地址
- respons();
- write_byte(date);
- respons();
- stop();
- }
- unsigned char read_add(unsigned char address) //往地址中讀數(shù)據(jù)
- {
- unsigned char date;
- start();
- write_byte(0xa0); //控制字 寫(xiě)
- respons();
- write_byte(address); //單元地址
- respons();
- start();
- write_byte(0xa1); //控制字讀1010 000 1(讀操作)
- respons();
- date=read_byte(); //數(shù)據(jù)
- SDA=1; //非應(yīng)答
- delayus(5);
- SCL=1;
- delayus(5);
- stop();
- return date;
- }
- void getRecord() //讀取前三名分?jǐn)?shù)
- {
- topscore[0]=read_add(0);//第一名
- name[0][0]=read_add(1);
- name[0][1]=read_add(2);
- topscore[1]=read_add(3);//第二名
- name[1][0]=read_add(4);
- name[1][1]=read_add(5);
- topscore[2]=read_add(6);//第三名
- name[2][0]=read_add(7);
- name[2][1]=read_add(8);
- }
- void Record() //更新前三并記錄分?jǐn)?shù)
- {
- write_add(0,topscore[0]);//第一名
- write_add(1,name[0][0]);
- write_add(2,name[0][1]);
- write_add(3,topscore[1]);//第二名
- write_add(4,name[1][0]);
- write_add(5,name[1][1]);
- write_add(6,topscore[2]);//第三名
- write_add(7,name[2][0]);
- write_add(8,name[2][1]);
- }
- void Judge() //判斷分?jǐn)?shù)高低
- {
- if(score>topscore[0])
- {
- topscore[2]=topscore[1];//第二名賦給第三名
- name[2][0]=name[1][0];
- name[2][1]=name[1][1];
- topscore[1]=topscore[0];//第一名賦給第二名
- name[1][0]=name[0][0];
- name[1][1]=name[0][1];
- topscore[0]=score; //臨時(shí)變量賦給第一名
- name[0][0]=tempname[0];
- name[0][1]=tempname[1];
- }else if(score>topscore[1])
- {
- topscore[2]=topscore[1];//第二名賦給第三名
- name[2][0]=name[1][0];
- name[2][1]=name[1][1];
- topscore[1]=score; //臨時(shí)變量賦給第二名
- name[1][0]=tempname[0];
- name[1][1]=tempname[1];
- }else if(score>topscore[2])
- {
- topscore[2]=score; //臨時(shí)變量賦給第三名
- name[2][0]=tempname[0];
- name[2][1]=tempname[1];
- }
- }
- //*******************************1602環(huán)節(jié)*************************************//
- void wr_com(unsigned char com) //寫(xiě)指令
- {
- delayms(5);
- RS=0;
- EN=0;
- P0=com;
- delayms(5);
- EN=1;
- delayms(5);
- EN=0;
- }
- void wr_dat(unsigned char dat) //寫(xiě)數(shù)據(jù)
- {
- delayms(5);
- RS=1;
- EN=0;
- P0=dat;
- delayms(5);
- EN=1;
- delayms(5);
- EN=0;
- }
- void lcd_init() //1602初始化設(shè)置//
- {
- delayms(1);
- wr_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
- wr_com(0x01); //顯示清0,數(shù)據(jù)指針清0
- wr_com(0x06); //寫(xiě)一個(gè)字符后地址加一
- wr_com(0x0c); //設(shè)置開(kāi)顯示,不顯示光標(biāo)
- getRecord();
- }
- void displayWelcome() //顯示歡迎界面
- {
- wr_com(0x80+0x03);
- delayms(1);
- for(i=0; i<9; i++)
- {
- wr_dat(str1[i]);
- delayus(1);
- }
- wr_com(0xc0+0x01);
- delayms(1);
- for(i=0; i<13; i++)
- {
- wr_dat(str9[i]);
- delayus(1);
- }
- for(i=0; i<10; i++) //開(kāi)關(guān)顯示完成閃爍
- {
- if(j==0)
- {
- wr_com(0x08); //關(guān)顯示
- delayms(100);
- }else
- {
- wr_com(0x0c); //開(kāi)顯示
- delayms(100);
- }
- j=~j;
- }
- Play_Song(0);
- delayms(100);
- }
- void displayPrepare() //顯示選項(xiàng)
- {
- wr_com(0x01); //清屏
- delayms(5);
- wr_com(0x80);
- delayms(5);
- for(i=0; i<15; i++)
- {
- wr_dat(str2[i]);
- delayus(5);
- }
- wr_com(0x80+0x40);
- delayms(5);
- for(i=0; i<6; i++)
- {
- wr_dat(str3[i]);
- delayus(5);
- }
- for(i=0; i<9; i++)
- {
- switch(i%3)
- {
- case 0:hole1=0;P3=0x00;delayms(100);
- case 1:hole1=0;P3=0x55;delayms(100);
- case 2:hole1=1;P3=0xaa;delayms(100);
- }
- }
- hole1=0;
- P3=0x00;
- }
- void displaytime() //游戲過(guò)程中刷新顯示時(shí)間、分?jǐn)?shù)
- {
- wr_com(0x80+0x05); //顯示倒計(jì)時(shí)
- delayus(5);
- wr_dat(0x30+time/10);
- delayus(5);
- wr_dat(0x30+time%10);
- delayus(5);
- wr_com(0x80+0x0e); //顯示分?jǐn)?shù)
- delayus(5);
- wr_dat(0x30+score/10);
- delayus(5);
- wr_dat(0x30+score%10);
- delayus(5);
- wr_com(0xc0+0x0e); //顯示關(guān)卡
- delayus(5);
- wr_dat(0x30+(level+1));
- delayus(5);
- }
- void recordName() //記錄姓名
- {
- wr_com(0x01);
- delayus(5);
- wr_com(0x80);
- delayus(5);
- for(i=0; i<10; i++) //Your Name:
- {
- wr_dat(str18[i]);
- delayus(5);
- }
- i='A';
- wr_dat(i);
- delayus(5);
- wr_com(0x10); //光標(biāo)左移
- delayus(5);
- wr_com(0x0f); //光標(biāo)閃爍
- delayus(5);
-
-
- while(1) //輸入第一個(gè)字母
- {
- wr_com(0x80+0x0a);
- delayus(5);
- wr_dat(i);
- delayus(5);
- if(button1==0)
- {
- delayms(10);
- if(button1==0)
- {
- while(!button1);
- i++;
- if(i>'Z')
- i='A';
- }
- }
- if(button2==0)//確認(rèn),開(kāi)始輸入第二個(gè)字母
- {
- tempname[0]=i;
- break;
- }
- }
- i='A'; //輸入第二個(gè)字母
- wr_dat(i);
- delayus(5);
- while(1)
- {
- wr_com(0x80+0x0b);
- delayus(5);
- wr_dat(i);
- delayus(5);
- if(button1==0)
- {
- delayms(10);
- if(button1==0)
- {
- while(!button1);
- i++;
- if(i>'Z')
- i='A';
- }
- }
- if(button2==0)//確認(rèn),輸入完畢
- {
- tempname[1]=i;
- break;
- }
- }
- wr_com(0x0c); //關(guān)閉光標(biāo)
- delayus(5);
- displayChoose();
- }
- void displayover() //顯示一輪游戲結(jié)束畫(huà)面
- {
- TR1=0; //關(guān)閉定時(shí)器1
- wr_com(0x01);
- delayms(5);
- wr_com(0x80);
- delayms(5);
- for(i=0; i<10; i++) //Game Over
- {
- wr_dat(str10[i]);
- delayus(5);
- }
- wr_com(0xc0);
- delayus(5);
-
- if(score>=(10*(1+level))) //不同level分?jǐn)?shù)要求不同,win了
- {
- if(level==3) //通關(guān)了
- {
- level=0;
- wr_com(0x80);
- delayus(5);
- for(i=0; i<15; i++)
- {
- wr_dat(str14[i]);
- delayus(5);
- }
- wr_com(0xc0);
- delayus(5);
- for(i=0; i<8; i++)
- {
- wr_dat(str11[i]);
- delayus(5);
- }
- while(1)
- {
- if(button2==0)
- {
- delayms(10);
- if(button2==0)
- {
- while(!button2);
- recordName();
- }
- }
- }
- }
- else //升級(jí)了
- {
- for(i=0; i<12; i++) //You Win!
- {
- wr_dat(str11[i]);
- delayus(5);
- }
-
- while(1)
- {
-
- if(button2==0)
- {
- delayms(10);
- if(button2==0)
- {
- while(!button2);
- level++;
- displayGame();
- }
- }
- }
- }
- }
- else //You Lose!
- {
- for(i=0; i<9; i++)
- {
- wr_dat(str12[i]);
- delayus(5);
- }
- }
- while(1) //失敗了
- {
- if(button2==0)
- {
- delayms(10);
- if(button2==0)
- {
- while(!button2);
- if(score!=0) //0分不記錄
- recordName();
- displayChoose();
- }
- }
- }
- }
- void scankey() //掃描按鍵,判斷是否得分
- {
- if((hole1==0) && (P3==0x00))//打中地鼠
- {
- delayms(5);
- flag1=1; //標(biāo)志得分不進(jìn)行scankey
- flag2=1; //標(biāo)識(shí)得分buzzer
- score++;
- playBuzzer();
- hole1=0;
- P3=0x00;
- }
- }
- unsigned char random() //隨機(jī)數(shù)
- {
- temp++;
- result=rand()%9+1;
- return result;
- }
- void displayhole() //hole地鼠顯示
- {
- holenum=random();
- if(holenum==0)
- holenum++;
- wr_com(0xc0+0x06);
- delayus(5);
- wr_dat(0x30+holenum);
- delayus(5);
- switch(holenum)
- {
- case 0: break;
- case 1: //1號(hào)洞亮
- hole1=1;
- P3=hole[1];
- break;
- case 2: //2號(hào)洞亮
- hole1=0;
- P3=hole[2];
- break;
- case 3: //3號(hào)洞亮
- hole1=0;
- P3=hole[3];
- break;
- case 4: //4號(hào)洞亮
- hole1=0;
- P3=hole[4];
- break;
- case 5: //5號(hào)洞亮
- hole1=0;
- P3=hole[5];
- break;
- case 6: //6號(hào)洞亮
- hole1=0;
- P3=hole[6];
- break;
- case 7: //7號(hào)洞亮
- hole1=0;
- P3=hole[7];
- break;
- case 8: //8號(hào)洞亮
- hole1=0;
- P3=hole[8];
- break;
- case 9: //9號(hào)洞亮
- hole1=0;
- P3=hole[9];
- break;
- }
- }
- void pause() //暫停/恢復(fù)游戲
- {
- if(button2==0) //暫停鍵
- {
- delayms(5); //去抖動(dòng)
- if(button2==0)
- {
- while(!button2);
- TR1=~TR1;
- flag5=~flag5;
- return;
- }
- }
- }
- void Gameinit() //游戲開(kāi)始時(shí)數(shù)據(jù)初始化
- {
- flag1=0;//scankey標(biāo)識(shí)
- flag2=0;//蜂鳴器標(biāo)志位
- flag3=0;//出洞結(jié)束標(biāo)識(shí)
- flag4=0;//timeover標(biāo)識(shí)
- time=30;
- if(level==0) //重新開(kāi)始闖關(guān),則清零得分
- score=0;
- wr_com(0x01); //清屏
- delayus(5);
- wr_com(0x80);
- delayus(5);
- for(i=0; i<15; i++) //固定內(nèi)容顯示
- {
- wr_dat(str8[i]);
- delayus(5);
- }
- wr_com(0xc0);
- delayus(5);
- for(i=0; i<14; i++)
- {
- wr_dat(str15[i]);
- delayus(5);
- }
- }
- void Game() //游戲真正進(jìn)行!!!!!!!!!!
- {
- Gameinit();
- displaytime(); //顯示時(shí)間、分?jǐn)?shù)、洞、關(guān)卡
- TR1=1; //開(kāi)啟定時(shí)器1
- while(1)
- {
- displayhole(); //地鼠出洞
- while(!flag3)//地鼠出洞時(shí)間 level:3s; level2:2s; level3:1s
- {
- if(flag5==0)
- {
- if(flag1==0)
- scankey();
- displaytime();
- }
- pause(); //暫停鍵判斷
- };
- if(flag2==0)//沒(méi)有打中地鼠
- {
- playBuzzer();
- }
- if(flag4==1)//時(shí)間到,結(jié)束game
- {
- displayover();
- }
- flag1=0;//scankey標(biāo)識(shí)
- flag2=0;//蜂鳴器標(biāo)志位
- flag3=0;//出洞結(jié)束標(biāo)識(shí)
- flag4=0;//timeover標(biāo)識(shí)
- }
- }
- void displayGame() //開(kāi)始游戲
- {
- wr_com(0x01); //清屏
- delayms(5);
- wr_com(0x80+0x04);
- delayms(5);
- for(i=0; i<6; i++) //顯示Ready
- {
- wr_dat(str5[i]);
- delayus(5);
- }
- wr_com(0xc0+0x06);
- delayms(5);
- for(i=5; i>0; i--) //顯示倒數(shù)5秒
- {
- wr_dat(0x30+i);
- for(j=0; j<10; j++)
- delayms(100);
- wr_com(0xc0+0x06);
- delayms(5);
- }
- wr_com(0xc0+0x06);
- delayms(5);
- for(i=0; i<3; i++) //顯示GO
- {
- wr_dat(str6[i]);
- delayus(5);
- }
- delayms(200);
- Game(); //開(kāi)始游戲!
- }
- void displayScore() //顯示得分記錄
- {
- getRecord();//從24C02中獲取數(shù)據(jù)
- wr_com(0x01);
- delayms(5);
- wr_com(0x80);
- delayms(5);
- for(i=0; i<12; i++) //顯示當(dāng)前得分
- {
- wr_dat(str7[i]);
- delayus(5);
- }
- wr_dat(0x30+score/10);
- delayms(5);
- wr_dat(0x30+score%10);
- delayms(5);
- wr_com(0xc0);
- delayus(5);
- for(i=0; i<5; i++) //第二行顯示top1
- {
- wr_dat(str13[i]);
- delayus(5);
- }
- wr_com(0xc0+0x06); //top1
- delayus(5);
- wr_dat('4');
- delayus(5);
- wr_dat('0');
- delayus(5);
- wr_com(0xc0+0x09);
- delayus(5);
- wr_dat('A');
- delayus(5);
- wr_dat('Q');
- delayus(5);
- while(1) //進(jìn)入第二頁(yè)鍵
- {
- if(button2==0)
- {
- delayms(10); //去抖動(dòng)
- if(button2==0)
- {
- while(!button2);
- displayScoreNext();
- break;
- }
- }
- }
- }
- void displayScoreNext() //顯示分?jǐn)?shù)第二頁(yè)
- {
- wr_com(0x01);
- delayms(5);
- wr_com(0x80);
- delayus(5);
- for(i=0; i<5; i++) //第一行顯示top2
- {
- wr_dat(str16[i]);
- delayus(5);
- }
- wr_com(0x80+0x06);
- delayus(5);
- wr_dat('3');
- delayus(5);
- wr_dat('9');
- delayus(5);
- wr_com(0x80+0x09);
- delayus(5);
- wr_dat('A');
- delayus(5);
- wr_dat('W');
- delayus(5);
-
- wr_com(0xc0);
- delayus(5);
- for(i=0; i<5; i++) //第二行顯示top3
- {
- wr_dat(str17[i]);
- delayus(5);
- }
- wr_com(0xc0+0x06);
- delayus(5);
- wr_dat('3');
- delayus(5);
- wr_dat('8');
- delayus(5);
- wr_com(0xc0+0x09);
- delayus(5);
- wr_dat('A');
- delayus(5);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
打地鼠游戲設(shè)計(jì).zip
(160.12 KB, 下載次數(shù): 93)
2020-10-20 22:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|