📄 hit_brick.c
字号:
#ifndef __hit_brick_c__
#define __hit_brick_c__
#include "hit_brick.h"
void hit_brick(void)
{
//keywords_delay=SHORT_PUSH;
LED_UEN_012;//显示器2初始化
currspeed=HIT_BRICK_SPEED; //初始化速度
total_NO=0; //分数初始化
display_cmd(DISPLAY_CMD_CLR,NULL);//清空显示缓冲区
display_cmd(DISPLAY_CMD_ROLE_CLR,NULL);//清空显示缓冲区
displaybuffer_16mux16[0]=0x0080;//初始化飞机位置
displaybuffer_16mux16[15]=rand();//生成第一行方块区
while(1)
{char i;
hit_delay_long(currspeed);
while(stop_game); //停止
total_NO++; //加分数
display_LED_total_NO();//显示分数
currspeed=HIT_BRICK_SPEED-(total_NO/20)*10000; //速度控制
for(i=1;i<15;i++)displaybuffer_16mux16[i]=displaybuffer_16mux16[i+1];//推进方块区
displaybuffer_16mux16[15]=rand();//生成第一行方块区
if(displaybuffer_16mux16[1]>0)break; //若到底行则退出游戏
}
//当前游戏结束执行
display_cmd(DISPLAY_CMD_OVER,NULL); //显示游戏结束
Current_game=DEFAULTS; //等待游戏选择
stop_game=GANE_BEGIN; //游戏不停止
LED_UEN_0123;//LED显示所有位
keywords=0;
}
void hit_delay_long(uint32_t delay_time)//同俄罗斯方块算法
{static uint16_t push_no;
while(delay_time--)
{
if(keyenable)
{
push_no=0;keywords=0;
}
else
{
if(push_no>SHORT_PUSH/*keywords_delay*/)
{
switch(keywords)
{
case LEFT :
if(displaybuffer_16mux16[0]!=0x0001)displaybuffer_16mux16[0]>>=1;
// display_16(0);
break;
case RIGHT:
if(displaybuffer_16mux16[0]!=0x8000)displaybuffer_16mux16[0]<<=1;
// display_16(0);
break;
default:
break;
}
push_no=0;
//keywords_delay=SHORT_PUSH;
}
else
push_no++;
}
}
}
void hit_brick_clr(void)//消方块
{uint8_t i,j;
for(i=1;i<16;i++)
{
if(displaybuffer_16mux16[i]==0xffff)//方块若满
{
for(j=i;j>1;j--)displaybuffer_16mux16[j]=displaybuffer_16mux16[j-1];
displaybuffer_16mux16[1]=0;//消方块
//make_sound();//发声
}
}
}
void key_hit(void)//打砖块键盘处理
{
switch(keywords)
{
case LEFT://打转块飞机移动
if(displaybuffer_16mux16[0]!=0x0001)displaybuffer_16mux16[0]>>=1;
break;
case RIGHT:
if(displaybuffer_16mux16[0]!=0x8000)displaybuffer_16mux16[0]<<=1;
break;
case STOP://停止
stop_game=~stop_game;
break;
case OK://打砖块 OK
if(stop_game==GANE_BEGIN)
{
hit_stone();
hit_brick_clr();
}
break;
default:
break;
}
}
void /*uchar */hit_stone(void)//填补方块/*返回打击值*/
{char i;
if(game_model==B_model)
{
for(i=1;i<16;i++)
{
if((displaybuffer_16mux16[0]&displaybuffer_16mux16[i])>0)
{
displaybuffer_16mux16[i-1]|=displaybuffer_16mux16[0];//填补I-1行
return;
}
}
displaybuffer_16mux16[15]|=displaybuffer_16mux16[0];//填补第15行//有点重复??
}
else
{
for(i=1;i<16;i++)
{
if((displaybuffer_16mux16[i]&displaybuffer_16mux16[0])>0)
{
displaybuffer_16mux16[i]&=~displaybuffer_16mux16[0];//消I行
break; //去掉这行 还有消整列的功能,可以作为宝物扩展
}
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -