📄 main.c
字号:
/**************************************
* copyright:tiany
* time:2008-9-20
**************************************/
#include <reg52.h>
#include "LCD.h"
#include "main.h"
uchar button,buttonflag,menuflag,buttonplay,speed;//send/*发球标志位*/;
num_info gamenum={0,0,0,0};//比分信息结构体
//press_button play_button;
void main()
{
// int i,j;
uchar wdata;
speed=1;
EA=1;
EX1=1;//int1
IT1=1;
EX0=1;//int0
IT0=1;
LCD_Initial();
LCD_CLR(R);
put_picture_half(Bmp1,L);
Delay_x10ms(100);LCD_CLR(L);
put_picture_half(Bmp1,L);
Delay_x10ms(100);LCD_CLR(L);
put_picture_half(Bmp1,R);
for(;;)
{
button=0;
buttonflag=0;
menuflag=0;
buttonplay=0;
LCD_CLR(L);
put_menu(1,0);
put_menu(2,0);
put_menu(3,0);
wdata=0;
gamenum.mark1=0,gamenum.mark2=0,gamenum.game1=0,gamenum.game2=0;
while(!wdata)
{
while(!buttonflag);
buttonflag=0;
switch(button)
{
case DOWN:
{
put_menu(1,0);
put_menu(2,0);
put_menu(3,0);
if(menuflag==3) menuflag=1;
else menuflag+=1;
put_menu(menuflag,1);
break;
}
case UP:
{
put_menu(1,0);
put_menu(2,0);
put_menu(3,0);
if(menuflag<=1) menuflag=3;
else menuflag-=1;
put_menu(menuflag,1);
break;
}
case ENTER:
{
switch(menuflag)
{
case 1://singlaplay
wdata=singlaplay();
break;
case 2://doubleplay
wdata=doubleplay();
break;
case 3://setingmenu
wdata=settingmenu();
break;
default:break;
}
break;
}
case EXIT:break;
default:break;
}
}
}
}
/////////////////////////////////////
//设置难度选项
/////////////////////////////////////
uchar settingmenu()
{
LCD_CLR(L);
put_menu(4,0);
put_menu(5,0);
put_menu(6,0);
menuflag=0;
while(1)
{
while(!buttonflag);
buttonflag=0;
switch(button)
{
case DOWN:
{
put_menu(4,0);
put_menu(5,0);
put_menu(6,0);
if(menuflag==3) menuflag=1;
else menuflag+=1;
put_menu(menuflag+3,1);
break;
}
case UP:
{
put_menu(4,0);
put_menu(5,0);
put_menu(6,0);
if(menuflag<=1) menuflag=3;
else menuflag-=1;
put_menu(menuflag+3,1);
break;
}
case ENTER:
{
switch(menuflag)
{
case 1:speed=1;break;
case 2:speed=4;break;
case 3:speed=7;break;
default:break;
}
return 1;
}
case EXIT:
{
return 1;
}
default:break;
}
}
}
void int1() interrupt 2 using 3
{
P2=0xFF;
buttonflag=1;
button=P2&0xF0;
}
void put_menu(uchar menuid,uchar reverse)
{
switch(menuid)
{
case 1://单人游戏
{
put_chinese(chinese[0],0,0,reverse);
put_chinese(chinese[2],0,16,reverse);
put_chinese(chinese[3],0,32,reverse);
put_chinese(chinese[4],0,48,reverse);break;
}
case 2://双人游戏
{
put_chinese(chinese[1],2,0,reverse);
put_chinese(chinese[2],2,16,reverse);
put_chinese(chinese[3],2,32,reverse);
put_chinese(chinese[4],2,48,reverse);break;
}
case 3://游戏设置
{
put_chinese(chinese[3],4,0,reverse);
put_chinese(chinese[4],4,16,reverse);
put_chinese(chinese[5],4,32,reverse);
put_chinese(chinese[6],4,48,reverse);break;
}
case 4://专家
{
put_chinese(chinese[7],0,16,reverse);
put_chinese(chinese[8],0,32,reverse);break;
}
case 5://高手
{
put_chinese(chinese[9],2,16,reverse);
put_chinese(chinese[10],2,32,reverse);break;
}
case 6://菜鸟
{
put_chinese(chinese[11],4,16,reverse);
put_chinese(chinese[12],4,32,reverse);break;
}
default:
break;
}
}
//=============================================
//斜线移动:向左下移动
//=============================================
uchar Ball_MoveLeftDown(uint speed)
{
uchar j,wdata;
int i;
for(i=8;i>0;i--)
{
wdata=0x03;
for(j=1;j<8;j+=2)
{
if(j)
{
LCD_WriteData(0x00,8-i,64+i*8-j+2);//CLR
LCD_WriteData(0x00,8-i,64+i*8-j+1);
}
LCD_WriteData(wdata,8-i,64+i*8-j);
LCD_WriteData(wdata,8-i,64+i*8-j-1);
wdata=wdata<<2;
Delay_x10ms(speed*10);
}
if(buttonplay)
{
buttonplay=0;
if((button==0x08)&&(i<=1)) return 0; //p2.3
else if(button==0x08||button==0x04) return 1;
}
LCD_WriteData(0x00,8-i,64+i*8-j+2);
LCD_WriteData(0x00,8-i,64+i*8-j+1);
}
return 1;
}
//=============================================
//斜线移动:向右上移动
//=============================================
uchar Ball_MoveRightUp(uint speed)
{
uchar i,j,wdata;
for(i=0;i<8;i++)
{
wdata=0xc0;
for(j=0;j<8;j+=2)
{
if(j)
{
LCD_WriteData(0x00,7-i,64+i*8+j-2);//CLR
LCD_WriteData(0x00,7-i,64+i*8+j-1);
}
LCD_WriteData(wdata,7-i,64+i*8+j);
LCD_WriteData(wdata,7-i,64+i*8+j+1);
wdata=wdata>>2;
Delay_x10ms(speed*10);
if(i==7&&j>=4) j=10;
}
if(buttonplay)
{
buttonplay=0;
if((button==0x02)&&(i>=7)) return 0; //p2.1
else if(button==0x02||button==0x01) return 2;
}
LCD_WriteData(0x00,7-i,64+i*8+j-2);
LCD_WriteData(0x00,7-i,64+i*8+j-1);
}
return 2;
}
//=============================================
//斜线移动:向左上移动
//=============================================
uchar Ball_MoveLeftUp(uint speed)
{
uchar j,wdata;
int i;
for(i=8;i>0;i--)//向左上移动
{
wdata=0xc0;
for(j=1;j<8;j+=2)
{
if(j)
{
LCD_WriteData(0x00,i-1,64+i*8-j+2);//CLR
LCD_WriteData(0x00,i-1,64+i*8-j+1);
}
LCD_WriteData(wdata,i-1,64+i*8-j);
LCD_WriteData(wdata,i-1,64+i*8-j-1);
wdata=wdata>>2;
Delay_x10ms(speed*10);
}
if(buttonplay)
{
buttonplay=0;
if((button==0x04)&&(i<=1)) return 0; //p2.2
else if(button==0x04||button==0x08) return 1;
}
LCD_WriteData(0x00,i-1,64+i*8-j+2);
LCD_WriteData(0x00,i-1,64+i*8-j+1);
}
return 1;
}
//=============================================
//斜线移动:向右下移动
//=============================================
uchar Ball_MoveRightDown(uint speed)
{
uchar i,j,wdata;
for(i=0;i<8;i++)//向右下移动
{
wdata=0x03;
for(j=0;j<8;j+=2)
{
if(j)
{
LCD_WriteData(0x00,i,64+i*8+j-2);//CLR
LCD_WriteData(0x00,i,64+i*8+j-1);
}
LCD_WriteData(wdata,i,64+i*8+j);
LCD_WriteData(wdata,i,64+i*8+j+1);
wdata=wdata<<2;
Delay_x10ms(speed*10);
if(i==7&&j>=4) j=10;
}
if(buttonplay)
{
buttonplay=0;
if((button==0x01)&&(i>=7)) return 0; //p2.0
else if(button==0x01||button==0x02) return 2;
}
LCD_WriteData(0x00,i,64+i*8+j-2);
LCD_WriteData(0x00,i,64+i*8+j-1);
}
return 2;
}
//=============================================
//水平移动
//0:-->
//1:<--
//=============================================
uchar Ball_MoveP(uchar Data,uchar direction,uchar hang,uint speed)
{
int i;
if(direction)
{
for(i=0;i<62;i++)//-->
{
if(i){
LCD_WriteData(0,hang,64+i-2);LCD_WriteData(0,hang,64+i-1);}
if(buttonplay)
{
buttonplay=0;
if((button==0x02)&&(i>=51)) return 0; //p2.1
else if(button==0x02) return 2;
}
LCD_WriteData(Data,hang,64+i);LCD_WriteData(Data,hang,64+i+1);
Delay_x10ms(speed*10);
i++;
}
LCD_WriteData(0,hang,64+i-2);LCD_WriteData(0,hang,64+i-1);
return 2;
}
else
{
for(i=62;i>0;i--)//<--
{
if(i!=62){
LCD_WriteData(0,hang,64+i+2);LCD_WriteData(0,hang,64+i+1);}
if(buttonplay)
{
buttonplay=0;
if((button==0x04)&(i<=10)) return 0;
else if(button==0x04) return 1;
}
LCD_WriteData(Data,hang,64+i);LCD_WriteData(Data,hang,64+i-1);
Delay_x10ms(speed*10);
i--;
}
LCD_WriteData(0,hang,64+i+2);LCD_WriteData(0,hang,64+i+1);
return 1;
}
}
void Delay_x10ms(uchar DelayTime) //*******ms延时*****//
{
unsigned char i,j,k;
for(i=0;i<DelayTime;i++){
if(buttonplay) break;
for(j=0;j<10;j++){
if(buttonplay) break;
for(k=0;k<45;k++) {if(buttonplay) break;}
} }
}
/*******************************
双人游戏
********************************/
uchar doubleplay()
{
uchar i,flag,sendball=0;
uchar a[3]={0,0,0},b[3]={0,0,0};
LCD_CLR(L);LCD_CLR(R);
//画边框
for(i=0;i<8;i++){//球与信息分割线
LCD_WriteData(0xFF,i,63);}
for(i=1;i<7;i++){
LCD_WriteData(0xFF,i,127);}//右边线
put_chinese(chinese[20],0,4,0);//甲
put_chinese(chinese[21],2,4,0);//乙
for(;;)
{
LCD_CLR(R);
LCD_WriteData(0xFF,0,127);
LCD_WriteData(0xFF,7,127);
for(i=0;i<8;i++){//球与信息分割线
LCD_WriteData(0xFF,i,63);}
for(i=0;i<8;i++){
LCD_WriteData(0xFF,i,127);}//右边线
infodisplay();
double_modle_1(sendball);
sendball++;
if(sendball>=4) sendball=0;
infodisplay();
//比分局分控制
if((gamenum.mark1>=11)&&((gamenum.mark1-gamenum.mark2)>=2))
{
a[gamenum.game1]=gamenum.mark1;
b[gamenum.game1]=gamenum.mark2;
gamenum.game1++;
gamenum.mark1=0;
gamenum.mark2=0;
put_chinese(chinese[20],0,64,1);
put_chinese(chinese[13],0,80,1);
enter();LCD_CLR(R);
}
else if((gamenum.mark2>=11)&&((gamenum.mark2-gamenum.mark1)>=2))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -