#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,