行业知识
C++ 游戏飞机大战, 字符型的
2026-10-22 05:06:09
来源:互联网转载
//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告#include#include#include#include#include#include#include 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;//抵达五时失败//获取系统时间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;char* curtime;int flag = 0;//初始化标记}history, * apple;void contain(apple& L, int PlayerPlane_y, int PlayerPlane_x, int EnemySleep, int sleep, int score, int skill1, int skill2, int error, int flag, char* curtime){L = new history;//赋予空间L->PlayerPlane_y = PlayerPlane_y;L->PlayerPlane_x = PlayerPlane_x;L->EnemySleep = EnemySleep;L->sleep = sleep;L->score = score;L->skill1 = skill1;L->skill2 = skill2;L->error = error;L->flag = flag;L->curtime = curtime;}void game();//有关进入游戏后的各项函数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 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);for (int i = 0; i 0 && i 4){EnemySleep -= 2;}}}//子弹的移动if (arr[i][j] == 4){arr[i][j] = 0;if (i > 1){arr[i - 1][j] = 4;}}}}//敌机的移动,sleep初始0if (sleep EnemySleep){sleep = 0;}for (int i = 0; i ^ = Col - 2)//提前处理,不破坏墙面,当然不提前处理也没问题,可以设1{score -= 100;arr[Enemy_y[i]][Enemy_x[i]] = 0;Enemy_y[i] = rand() % 3 + 1;Enemy_x[i] = rand() % (Row - 2) + 1;arr[Enemy_y[i]][Enemy_x[i]] = 3;}//敌机下移的处理if (sleep == EnemySleep){for (int j = 0; j curtime = time();fprintf(fp, "%d %d %d %d %d %d %d %d %d %s ",L->PlayerPlane_y,L->PlayerPlane_x,L->EnemySleep,L->sleep,L->score,L->skill1,L->skill2,L->error,L->flag,*(L->curtime));for (int i = 0; i Enemy_y[i], L->Enemy_x[i]);}void creathistory(apple& L)//创建存档{FILE* fp;if ((fp = fopen("history.txt", "a+")) == NULL) { cout PlayerPlane_x,&L->EnemySleep,&L->sleep,&L->score,&L->skill1,&L->skill2,&L->error,&L->flag,L->curtime)){for (int i = 0; i Enemy_y[i], L->Enemy_x[i]);}rewind(fp);//指针归位}}void again(apple& L){int arr[Col][Row] = { 0 };for (int i = 0; i Enemy_y[i]][L->Enemy_x[i]] = 3;}arr[L->PlayerPlane_y][L->PlayerPlane_x] = 2;for (int i = 0; i flag; i++){read(L);printf("请输入你选择的存档编号flag:");int a = getch();cout