飞机大战(可读档)

这是一个使用C++编程实现的飞机大战游戏,游戏中包含玩家飞机、敌机、子弹、技能、分数和错误计数等元素。玩家可以通过键盘控制飞机移动、射击和使用技能。游戏具有实时显示分数、敌机移动速度、技能充能状态等功能,并支持存档和读档。玩家在游戏过程中需要注意避免碰撞,防止错误计数达到限制导致游戏失败。
摘要由CSDN通过智能技术生成

#include<iostream>
#include<stdlib.h>
#include<string>
#include<conio.h>
#include<Windows.h>
#include<time.h>
#include <graphics.h>
using namespace std;
char ch;
#define Count 5//敌机数量,每次损毁都会立刻重建,可认为同时存在的飞机有五架
#define Col 40//列
#define Row 40//行
//玩家飞机坐标,声明:左上角坐标为(0,0)
int PlayerPlane_y = Row - 2;//39,墙上面最后一行
int PlayerPlane_x = Col / 2;//20,列中央
//子弹坐标
int Bullet_y;
int Bullet_x;
//敌机坐标
int Enemy_y[Count] = { 0 };
int Enemy_x[Count] = { 0 };
//敌机的移动速度
int EnemySleep = 250;
int sleep = 0;//当二者相等时敌机才发生移动,sleep可认为缓冲,该设置用于控制速度与难度梯度
//分数
int score = 0;
//技能充能
int skill1 = 20;
int skill2 = 5;
//容错度
int error = 0;//抵达五时失败
//获取系统时间
int flag = 0;//标志记录编号
int fflag;//继续游戏时选择的游戏编号
//句柄,用于双缓冲绘图
HANDLE hOutput, hOutBuf;
char* time()//返回指针
{
    time_t rawtime;//原始时间
    struct tm* curtime;//指向结构体的变量
    time(&rawtime); // 获取系统时间并存储
    curtime=localtime(&rawtime); //转换为本地时间
    char* now = asctime(curtime);//更改为指针类型
    return now;
}
//一开始写结构体想要保存数据,写着写着又想起是全局变量了不用结构体
/*typedef struct history
{
    int PlayerPlane_y;
    int PlayerPlane_x;
    int Enemy_y[Count];
    int Enemy_x[Count];
    int EnemySleep;
    int sleep;
    int score;
    int skill1;
    int skill2;
    int error=0;
    char* curtime;
    int flag=0;//初始化标记
}history,*apple;
apple L = new history;//赋予空间*/

void game();//有关进入游戏后的各项函数
void again();//存档操作
void write(FILE*fp);//存档操作
void findhistory();//寻找历史记录
void read();//读档
void creathistory();//创建存档
void changeflag();//赋予新存档新编号
void menu()
{
    printf("                                           --------------飞机大作战--------------\n");
    printf("                                          |                                       |\n");
    printf("                                          |             3.查看历史记录            |\n");
    printf("                                          |             2.选择存档开始            |\n");
    printf("                                          |             1.开始游戏                |\n");
    printf("                                          |             0.退出游戏                |\n");
    printf("                                          |             W/A/S/D移动               |\n");
    printf("                                          |           空格射击 E/R技能            |\n");
    printf("                                          |                                       |\n");
    printf("                                          |w温馨提示,游戏过程中可以按下\"Esc\"退出游戏 |\n");
    printf("                                          ----------------------------------------------\n");
}

int main()
{
    system("color b");
    int input = 0;
    menu();
    printf("请选择:");
    scanf("%d", &input);
    switch (input)
    {
    case 3:
        findhistory();
    case 2:
        again();
        break;
    case 1:
        game();//大部分函数均包括在内
        break;
    case 0:
        printf("退出游戏\n");
        break;
    default:
        printf("输入有误,请重新输入:\n");
        break;
    }
    return 0;
}
//隐藏光标
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info = { 1,0 };  //第二个值为0,表示隐藏光标
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

// 光标移到(X, Y)位置
void gotoxy(int x, int y)
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle, pos);
}

void DisPlay(int arr[Col][Row])//绘制画面
{
    gotoxy(0, 0);
    system("cls");
    /*hOutBuf = CreateConsoleScreenBuffer(
        GENERIC_WRITE,
        FILE_SHARE_WRITE,
        NULL,
        CONSOLE_TEXTMODE_BUFFER,
        NULL
    );
    hOutput = CreateConsoleScreenBuffer(
        GENERIC_WRITE,
        FILE_SHARE_WRITE,
        NULL,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我阿飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值