pic_game.c
来自「单片机控制实现几个小游戏:贪吃蛇、俄罗斯方块、推箱子」· C语言 代码 · 共 179 行
C
179 行
#ifndef __PIC_GAME_c__
#define __PIC_GAME_c__
#include "PIC_GAME.h"
void main(void)
{
uint8_t i;
delay(255);
cpu_inti();
for(i=0;i<16;i++)displaybuffer_16mux16[i]=game_dora[i];
LED_UEN_0123;
//for(i=0;i<16;i++)displaybuffer_16mux16[i]=game_lostway[i];
//flash_displaybuffer[5]=0x5555;//闪烁调试代码
//flash_status=FLASH_NO_TIME;
//flash_time=40;
//while(keywords!=UP);
//display_moving_up(game_snake);
while(1)
{
(*game[Current_game].my_game)();
}
}
void display_moving_down(const int16_t *cur)
{
uint8_t i;
INTE=0;
GIE=0;
for(i=0;i<16;i++)displaybuffer_16mux16[i]=cur[i];
/*
// uint16_t temp;
// temp=displaybuffer_16mux16[15];
for(i=0;i<SPEED_0;i++)
{
displaybuffer[16+i]=cur[i];
displaybuffer_16mux16++;
delay_long_int(display_speed_0[i]);
}
for(i=0;i<16;i++)displaybuffer[i]=cur[i];
displaybuffer_16mux16=&displaybuffer[0];
for(i=0;i<SPEED_1;i++)
{
//displaybuffer[16+i]=next[i];
displaybuffer[16+i]=0;
displaybuffer_16mux16++;
delay_long_int(display_speed_1[i]);
}
for(i=0;i<SPEED_2;i++)
{
//displaybuffer[32]=temp;
displaybuffer_16mux16--;
delay_long_int(display_speed_2[i]);
}
displaybuffer_16mux16++;
delay_long_int(display_speed_3);
*/
keywords=0;
INTE=1;
GIE=1;
}
void display_moving_up(const int16_t *cur)
{
uint8_t i;
GIE=0;
INTE=0;
for(i=0;i<16;i++)displaybuffer_16mux16[i]=cur[i];
/*
for(i=0;i<16;i++)displaybuffer_16mux16[i+16]=displaybuffer_16mux16[i];
displaybuffer_16mux16=&displaybuffer[16];
for(i=0;i<SPEED_0;i++)
{
displaybuffer[15-i]=cur[i];
displaybuffer_16mux16--;
delay_long_int(display_speed_0[i]);
}
for(i=0;i<16;i++)displaybuffer_16mux16[i+16]=displaybuffer_16mux16[i];
displaybuffer_16mux16=&displaybuffer[16];
for(i=0;i<SPEED_1;i++)
{
//displaybuffer[15-i]=next[i];
displaybuffer[15-i]=0;
displaybuffer_16mux16--;
delay_long_int(display_speed_1[i]);
}
for(i=0;i<SPEED_2;i++)
{
//displaybuffer[32]=temp;
displaybuffer_16mux16++;
delay_long_int(display_speed_2[i]);
}
displaybuffer_16mux16--;
delay_long_int(display_speed_3);
*/
keywords=0;
INTE=1;
GIE=1;
}
void delay(uint8_t MS) //短延时程序
{
while(MS--){}
}
void delay_long(uint16_t MS)//超长延时程序
{
while(MS--){}
}
void delay_long_int(uint16_t MS)//超长延时程序
{
while(MS--){}
}
void defaults(void)
{
if(keywords==UP){display_moving_up(game[select_game].my_game_wait);}
if(keywords==DOWN){display_moving_down(game[select_game].my_game_wait);}
display_LED_total_NO();
if(game_model==A_model)seg_7_led_buffer[3]=CODE_A;else seg_7_led_buffer[3]=CODE_B;
}
void defaults_key(void)
{
switch(keywords)
{
case UP:
if(select_game==LOSTWAY)select_game=DEFAULTS; else select_game++;
break;
case DOWN:
if(select_game==DEFAULTS)select_game=LOSTWAY; else select_game--;
break;
case OK:
Current_game=select_game;break;
case RIGHT:
if(game_model==A_model)game_model=B_model;else game_model=A_model;
break;
case LEFT:
if(game_model==A_model)game_model=B_model;else game_model=A_model;
break;
default:
Current_game=DEFAULTS;
break;
}
// keywords=0; //清除键值
}
void display_cmd(uint8_t cmd,uint16_t d_data)//对显示器送数据或地址
{
uint8_t i;
switch(cmd)
{
case DISPLAY_CMD_CLR:
for(i=0;i<16;i++)displaybuffer_16mux16[i]=0;break;
case DISPLAY_CMD_BG_CLR:
for(i=0;i<16;i++)BG_display_16mux16[i]=0;break;
case DISPLAY_CMD_ROLE_CLR:
for(i=0;i<16;i++)ROLE_display_16mux16[i]=0;break;
case DISPLAY_CMD_OVER:
for(i=0;i<16;i++)displaybuffer_16mux16[i]=game_over[i];break;//游戏结束信息送入显缓区
case DISPLAY_CMD_WIN:
for(i=0;i<16;i++)displaybuffer_16mux16[i]=game_win[i];break;//游戏胜利信息送入显缓区
case DISPLAY_CMD_FLASH_CLOSE:
flash_status=NO_FLASH;break;
case DISPLAY_CMD_FLASH_CLR:
for(i=0;i<16;i++)flash_displaybuffer[i]=0;break;
case DISPLAY_CMD_FLASH:
flash_status=FLASH_NO_TIME;break;
case DISPLAY_CMD_FLASH_TIME:
flash_time=d_data;flash_status=FLASH_YES_TIME;break;
default:
break;
}
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?