📄 main.c
字号:
//-----------------------------------------------------------------
// 名称:射击训练游戏
//-----------------------------------------------------------------
// 说明:程序启动时液晶屏显示游戏封面,然后显示游戏区,默认弹药为20发,
// K1,K2键用于向上或向下移动枪支,跟踪目标,K3用于发射并模拟枪声,
// 在每次发射时,如果击中则加1分,在击中后如果目标物体尚未移动时,
// 程序不重复加分.弹药用完后可按下K4重新开始.
//
//-----------------------------------------------------------------
#include <htc.h>
#include <stdio.h>
#include <stdlib.h>
#include "LM4229.h"
#include "PictureDots.h"
//按键定义
#define K1_DOWN() (RB4 == 0) //上移
#define K2_DOWN() (RB5 == 0) //下移
#define K3_DOWN() (RB6 == 0) //发射
#define K4_DOWN() (RB7 == 0) //重新开始
//蜂鸣器
#define BEEP() RE2 = ~RE2
INT8U HCount = 0,LCount = 0; //控制模拟枪声的延时变量
INT8U Score = 0, Bullet_Count = 20; //得分,剩余弹药数
INT8U Target_x = 0, Target_y = 0; //目标物体位置
INT8U Pre_Target_y = 0; //目标物体上次所在纵坐标位置
INT8U gun_y = 20; //枪支纵坐标(其中横坐标固定为16*8)
INT8U i;
//-----------------------------------------------------------------
// 延时nX50ms
//-----------------------------------------------------------------
void DelayX50ms(INT8U x)
{
}
//-----------------------------------------------------------------
// 显示成绩与剩余弹药数
//-----------------------------------------------------------------
void Show_Score_and_Bullet()
{
char dat_str[4] = {' ',0,0,0};
//显示成绩
//显示剩余弹药数
}
//-----------------------------------------------------------------
// 按键处理函数
//-----------------------------------------------------------------
void Key_Handle()
{
//枪支位置上移-------------------------------------------------
if (K1_DOWN())
{
if (gun_y != 0) Display_Str_at_xy(26*8,gun_y,(char*)" ",0);
gun_y -= 8;
if (gun_y < 20 ) gun_y = 20;
Draw_Image(Gun_Image,gun_y,26);
}
//枪支位置下移-------------------------------------------------
else if (K2_DOWN())
{
if (gun_y != 0) Display_Str_at_xy(26*8,gun_y,(char*)" ",0);
gun_y += 8;
if (gun_y > 100 ) gun_y = 100;
Draw_Image(Gun_Image,gun_y,26);
}
//发射,绘制与擦除弹道线条,模拟枪声,判断成绩--------------------
else if (K3_DOWN())
{
}
//成绩与弹药数复位---------------------------------------------
else if (K4_DOWN())
{
}
}
//-----------------------------------------------------------------
// TIMER1溢出中断控制模拟枪声输出
//-----------------------------------------------------------------
void TMR1_Gun_Sound()
{
}
//-----------------------------------------------------------------
// TIMER0溢出中断控制目标物体随机移动
//-----------------------------------------------------------------
void TMR0_Ctrl_Target_Rand_Mov()
{
}
//-----------------------------------------------------------------
// 中断处理函数
//-----------------------------------------------------------------
void interrupt INT_ISR()
{
if (TMR1IF)
{
TMR1IF = 0; //软件清零TMR1IF中断标志位
TMR1_Gun_Sound(); //TMR1控制输出模拟枪声
}
if (INT0IF)
{
INT0IF = 0; //软件清零INT中断标志位
Key_Handle(); //延时按键中断
}
if (TMR0IF)
{
TMR0IF = 0; //软件清零TMR0IF中断标志位
TMR0_Ctrl_Target_Rand_Mov(); //TMR0控制目标物体随机移动
}
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
ADCON1 = 0x06; //关闭模数转换端口
TRISD = PORTD = 0x00; //液晶端口配置
TRISC = PORTC = 0x00;
TRISB = 0xFF; //按键输入端口
RBPU = 0; //RB端口内部上拉
TRISE2 = 0; //蜂鸣器输出
LCD_Initialise(); //液晶初始化
Clear_Screen(); //清屏
Draw_Image(Game_Surface,6,0); //显示游戏封面
DelayX50ms(60);
Clear_Screen(); //随后清除封面
//显示固定文字:"★★射击训练游戏★★"
//(待显示汉字用内码表示,因内码过长,第190行末尾添加了换行符“\”)
Display_Str_at_xy(55,1,(char*)
"\xA1\xEF\xA1\xEF\xC9\xE4\xBB\xF7\xD1\xB5\xC1\
\xB7\xD3\xCE\xCF\xB7\xA1\xEF\xA1\xEF",1);
//显示固定文字:"得分"
Display_Str_at_xy(2,117,(char*)"\xB5\xC3\xB7\xD6",0);
//显示固定文字:"剩余弹药"
Display_Str_at_xy(75,117,(char*)"\xCA\xA3\xD3\xE0\xB5\xAF\xD2\xA9",0);
Show_Score_and_Bullet(); //显示成绩与弹药值
//用四条直线绘制游戏区边框
Draw_Image(Gun_Image,gun_y,26); //在初始位置绘制枪支
//设置TMR0,TMR1,INT0中断
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -