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 + -
显示快捷键?