最近写了一个战斗机的游戏
此处特别鸣谢蒟蒻尹对本游戏的大力支持
#include <bits/stdc++.h>
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
#include "windows.h"
#pragma GCC optimize(3)
#pragma GCC optimize(2)
using namespace std;
const int row = 26+12;
const int col = 18*2;
struct enemy {
int x,y;
bool life;
} enemy[1000];
int enemy_top=1;
int tim_fire;
int tim_enemy_making;
bool v[row][col];
int Map[row][col] = {
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0},// 0
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 1
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 2
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 3
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 4
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 5
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 6
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 7
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 8
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},// 9
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//10
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//11
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//12
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//13
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//14
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//15
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//16
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//17
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//18
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//19
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//20
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//21
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//22
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//23
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//24
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//25
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//26
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//27
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//28
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//29
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//30
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//31
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//32
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//33
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//34
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//35
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//36
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//37
};
int p_x=17,p_y=9; //玩家的坐标 map[p_x][p_y];
void hide_cursor() {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
}
void color (string ss) {
if(ss=="RED")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
if(ss=="BLU")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 1);
if(ss=="GRE")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
if(ss=="YEL")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
if(ss=="PUR")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
if(ss=="WHI")
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
}
bool check(int x,int y) {
if(x>=0&&y>=0&&x<=37&&y<=35) return true;
return false;
}
void move(int x_mov,int y_mov) { //玩家坐标位移
p_x+=x_mov,p_y+=y_mov;
}
void fire(int p_x,int p_y) {
int now_fire=time(0);
if(tim_fire==0||now_fire-tim_fire>=1) {
Map[p_x-1][p_y]=8;
Map[p_x-1][p_y+1]=8;
tim_fire=now_fire;
}
}
void player_step() { //位移操作
Map[p_x][p_y]=0;
Map[p_x][p_y+1]=0;
Map[p_x+1][p_y+1]=0;
Map[p_x+1][p_y]=0;
// Map[p_x+1][p_y-1]=0;
Map[p_x+1][p_y-2]=0;
// Map[p_x+1][p_y+2]=0;
Map[p_x+1][p_y+3]=0;
Map[p_x+2][p_y+3]=0;
Map[p_x+2][p_y+4]=0;
Map[p_x+2][p_y+5]=0;
Map[p_x+2][p_y+6]=0;
Map[p_x+2][p_y+2]=0;
Map[p_x+2][p_y+1]=0;
Map[p_x+2][p_y]=0;
Map[p_x+2][p_y-1]=0;
Map[p_x+2][p_y-3]=0;
Map[p_x+2][p_y-4]=0;
Map[p_x+2][p_y-5]=0;
Map[p_x+2][p_y-2]=0;
// Map[p_x+3][p_y]=0;
// Map[p_x+3][p_y+1]=0;
Map[p_x+3][p_y+2]=0;
Map[p_x+3][p_y-1]=0;
Map[p_x+4][p_y]=0;
Map[p_x+4][p_y+1]=0;
Map[p_x+4][p_y-1]=0;
Map[p_x+4][p_y+2]=0;
Map[p_x+4][p_y+3]=0;
Map[p_x+4][p_y+4]=0;
Map[p_x+4][p_y-2]=0;
Map[p_x+4][p_y-3]=0;
if(GetKeyState(VK_UP) < 0&&p_x-1>=0) {
move(-1, 0);
}
if(GetKeyState(VK_DOWN ) < 0&&p_x+1<=33) {
move( 1, 0);
}
if(GetKeyState(VK_LEFT) < 0&&p_y-1>=5) {
move( 0,-1);
}
if(GetKeyState(VK_RIGHT) < 0&&p_y+1<=29) {
move( 0, 1);
}
if(GetKeyState(' ') < 0) {
fire(p_x,p_y);
}
Map[p_x][p_y]=2;
Map[p_x][p_y+1]=2;
Map[p_x+1][p_y+1]=1;
Map[p_x+1][p_y]=1;
// Map[p_x+1][p_y-1]=7;
Map[p_x+1][p_y-2]=1;
// Map[p_x+1][p_y+2]=7;
Map[p_x+1][p_y+3]=1;
Map[p_x+2][p_y+3]=1;
Map[p_x+2][p_y+4]=3;
Map[p_x+2][p_y+5]=3;
Map[p_x+2][p_y+6]=3;
Map[p_x+2][p_y+2]=3;
Map[p_x+2][p_y+1]=3;
Map[p_x+2][p_y]=3;
Map[p_x+2][p_y-1]=3;
Map[p_x+2][p_y-3]=3;
Map[p_x+2][p_y-4]=3;
Map[p_x+2][p_y-5]=3;
Map[p_x+2][p_y-2]=1;
// Map[p_x+3][p_y]=7;
// Map[p_x+3][p_y+1]=7;
Map[p_x+3][p_y+2]=1;
Map[p_x+3][p_y-1]=1;
Map[p_x+4][p_y]=3;
Map[p_x+4][p_y+1]=3;
Map[p_x+4][p_y-1]=1;
Map[p_x+4][p_y+2]=1;
Map[p_x+4][p_y+3]=3;
Map[p_x+4][p_y+4]=3;
Map[p_x+4][p_y-2]=3;
Map[p_x+4][p_y-3]=3;
}
// puts(" || ");
// puts(" | || | ");
// puts(" ===|====|=== ");
// puts(" | | ");
// puts(" ==|==|== ");
// puts("");
// puts("");
void enemy_check(int e_x,int e_y,int id,int cor) {
if(Map[e_x][e_y]==8) {
enemy[id].life=false;
return ;
}
if(check(e_x,e_y)&&Map[e_x][e_y]>=1&&Map[e_x][e_y]<=3) exit(0);
Map[e_x][e_y]=cor;
}
void enemy_clear(int e_x,int e_y) {
if(v[e_x][e_y])Map[e_x][e_y]=0;
if(v[e_x][e_y+1])Map[e_x][e_y+1]=0;
if(v[e_x-1][e_y])Map[e_x-1][e_y]=0;
if(v[e_x-2][e_y])Map[e_x-2][e_y]=0;
if(v[e_x-3][e_y])Map[e_x-3][e_y]=0;
if(v[e_x-1][e_y+1])Map[e_x-1][e_y+1]=0;
if(v[e_x-2][e_y+1])Map[e_x-2][e_y+1]=0;
if(v[e_x-3][e_y+1])Map[e_x-3][e_y+1]=0;
if(v[e_x-1][e_y-1])Map[e_x-1][e_y-1]=0;
if(v[e_x-2][e_y-3])Map[e_x-1][e_y-2]=0;
if(v[e_x-1][e_y-3])Map[e_x-1][e_y-3]=0;
if(v[e_x-1][e_y-4])Map[e_x-1][e_y-4]=0;
if(v[e_x-1][e_y+2])Map[e_x-1][e_y+2]=0;
if(v[e_x-1][e_y+3])Map[e_x-1][e_y+3]=0;
if(v[e_x-1][e_y+4])Map[e_x-1][e_y+4]=0;
if(v[e_x-1][e_y+5])Map[e_x-1][e_y+5]=0;
if(v[e_x-3][e_y-1])Map[e_x-3][e_y-1]=0;
if(v[e_x-3][e_y+2])Map[e_x-3][e_y+2]=0;
}
void enemy_move(int e_x,int e_y,int id) {
enemy_clear(e_x,e_y);
e_x+=1;
enemy[id].x=e_x;
if(v[e_x][e_y]) {
enemy_check(e_x,e_y,id,4);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x][e_y+1]) {
enemy_check(e_x,e_y+1,id,4);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y]) {
enemy_check(e_x-1,e_y,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-2][e_y]) {
enemy_check(e_x-2,e_y,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-3][e_y]) {
enemy_check(e_x-3,e_y,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y+1]) {
enemy_check(e_x-1,e_y+1,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-2][e_y+1]) {
enemy_check(e_x-2,e_y+1,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-3][e_y+1]) {
enemy_check(e_x-3,e_y+1,id,6);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y-1]) {
enemy_check(e_x-1,e_y-1,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y-2]) {
enemy_check(e_x-1,e_y-2,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y-3]) {
enemy_check(e_x-1,e_y-3,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y-4]) {
enemy_check(e_x-1,e_y-4,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y+2]) {
enemy_check(e_x-1,e_y+2,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y+3]) {
enemy_check(e_x-1,e_y+3,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y+4]) {
enemy_check(e_x-1,e_y+4,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-1][e_y+5]) {
enemy_check(e_x-1,e_y+5,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-3][e_y-1]) {
enemy_check(e_x-3,e_y-1,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
if(v[e_x-3][e_y+2]) {
enemy_check(e_x-3,e_y+2,id,7);
if(enemy[id].life==false) {
enemy_clear(e_x,e_y);
return ;
}
}
}
void enemy_step() {
for(int i=1; i<=enemy_top; i++) {
if(!enemy[i].life) continue;
enemy_move(enemy[i].x,enemy[i].y,i);
}
}
void make_enemy() {
int now_tim_enemy=time(0);
srand(time(0));
int enemy_making_lie=rand()%27+4;
if(now_tim_enemy-tim_enemy_making>=5) {
enemy[++enemy_top].life=1;
enemy[enemy_top].x=1;
enemy[enemy_top].y=enemy_making_lie;
tim_enemy_making=now_tim_enemy;
}
}
// =||=
// ||
// ====||====
// --
void draw(int x,int y) {
if(Map[x][y]==0) putchar (' ');
// 1~3:player
if(Map[x][y]==1||Map[x][y]==2) color("GRE"),putchar('|');
if(Map[x][y]==3) color("GRE"),putchar('=');
// 4~7:enemy
if(Map[x][y]==4||Map[x][y]==5) color("WHI"),putchar('-');
if(Map[x][y]==6) color("WHI"),putchar('|');
if(Map[x][y]==7) color("WHI"),putchar('=');
if(Map[x][y]==8) { //子弹特殊操作
color("YEL"),putchar('^');
Map[x][y]=0;
if(x-1)
Map[x-1][y]=8;
}
}
int main() {
hide_cursor();
for(int i=0; i<=37; i++) {
for(int j=0; j<=35; j++) {
v[i][j]=1;
}
}
system("mode con cols=37 lines=38");
while (true) {
for(int i=0; i<=37; i++) {
for(int j=0; j<=35; j++) {
draw(i,j);
}
if(i!=row-1)puts("");
}
make_enemy();
enemy_step();
player_step();
Sleep(100);
system("cls");
}
cout<<1;
while(1) {
}
}