bug极多,及其不完善的飞机大战
#include<iostream>
#include<ctime>
#include<Windows.h>
#include<stdlib.h>
#include<conio.h>
#include <graphics.h>
#include<cmath>
using namespace std;
int boundary_x = 481, boundary_y = 701;//边界大小
int arr[701][481] = { 0 };
int show[701][481] = { 0 };
int player_x,player_y;//玩家位置
float enemy_x, enemy_y;//0x,1y,3子弹;
int bullet_x=-1,bullet_y=-1;//子弹
int enemy_limit = 30, enemy_sleep = 0;//敌机速度
int bullet_limit = 50, bullet_sleep = 0;//敌子弹速度
int flag = 0;
IMAGE img_bd1, img_bd2;//玩家
IMAGE img_bk;//界面
IMAGE img_bg1, img_bg2;//我方子弹
IMAGE img_enemy1, img_enemy2;//敌人
void HideCursor()
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
}
void gotoxy(int x, int y)//光标移动到(x,y)的位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void starup()
{
initgraph(480, 700);
loadimage(&img_bk, "D:\\piture\\backbround.bmp");
loadimage(&img_bd1, "D:\\piture\\player1.bmp");
loadimage(&img_bd2, "D:\\piture\\player11.bmp");
loadimage(&img_bg1, "D:\\piture\\bullet1.bmp");
loadimage(&img_bg2, "D:\\piture\\bullet11.bmp");
loadimage(&img_enemy1, "D:\\piture\\enemy1.bmp");
loadimage(&img_enemy2, "D:\\piture\\enemy131.bmp");
BeginBatchDraw();
}
void showup()//显示画面
{
putimage(0, 0, &img_bk);
putimage(player_x,player_y, &img_bd2, NOTSRCERASE);
putimage(player_x, player_y, &img_bd1, SRCINVERT);
int x, miny,maxy;
if (enemy_y < 0)
miny = 0;
else
{
miny = enemy_y;
}
if (enemy_y + 44 > 700)
maxy = 699;
else
maxy = enemy_y + 44;
for (; miny <= maxy; miny++)
{
for (x = enemy_x - 29; x <= enemy_x + 29; x++)
{
arr[miny][x] = 0;
}
}
enemy_y+=0.1;
if (ceil(enemy_y) < 0)
miny = 0;
else
{
miny = ceil(enemy_y);
}
if (ceil(enemy_y) + 44 > 700)
maxy = 699;
else
maxy = ceil(enemy_y) + 44;
for (; miny <= maxy; miny++)
{
for (x = ceil(enemy_x) - 29; x <= ceil(enemy_x) + 29; x++)
{
arr[miny][x] = 3;
}
}
if (enemy_y == 700)
{
enemy_x = rand() % 422 + 29;
enemy_y = -44;
}
putimage(enemy_x-29, enemy_y, &img_enemy2, NOTSRCERASE);
putimage(enemy_x-29, enemy_y, &img_enemy1, SRCINVERT);
for (int a = 0; a < 700; a++)
for (int b = 0; b < 480; b++)
{
if (b == 0 && arr[a][b] == 2)
arr[a][b] = 0;
else if (arr[a][b] == 2)
{
if (arr[a - 1][b] == 3)
{
int x, miny, maxy;
if (ceil(enemy_y) < 0)
miny = 0;
else
{
miny = ceil(enemy_y)-1;
}
if (ceil(enemy_y) + 44 > 700)
maxy = 699;
else
maxy = ceil(enemy_y) + 44;
for (; miny <= maxy; miny++)
{
for (x = ceil(enemy_x) - 29; x <= ceil(enemy_x) + 29; x++)
{
arr[miny][x] = 0;
}
}
enemy_x = rand() % 422 + 29;
enemy_y = -44;
}
arr[a][b] = 0;
arr[a - 1][b] = 2;
bullet_y = a, bullet_x = b;
putimage(bullet_x, bullet_y, &img_bg2, NOTSRCERASE);
putimage(bullet_x, bullet_y, &img_bg1, SRCINVERT);
}
}
FlushBatchDraw();
}
void updateWithInuput()//与输入有关操作
{
MOUSEMSG m;
while (MouseHit())
{
m = GetMouseMsg();
if (m.uMsg == WM_MOUSEMOVE)
{
int minx, maxx, miny, maxy;
if (player_x - 23 <= 0)
{
minx = 24;
maxx = 70;
}
else if (player_x + 23 >= 480)
{
maxx = 640;
minx = 594;
}
else
{
minx = player_x - 23;
maxx = player_x + 23;
}
if (player_y - 28 <= 0)
{
miny = 29;
maxy = 85;
}
else if (player_y + 29 >= 700)
{
maxy = 700;
miny = 644;
}
else
{
maxy = player_y + 29;
miny = player_y - 28;
}
for (int a = miny; a < maxy; a++)
{
for (int b = minx; b < maxx; b++)
arr[a][b] = 0;
}
if (m.x - 23 < 0)
m.x = 23;
else if (m.x + 23 > 480)
m.x = 456;
if (m.y - 28 < 0)
m.y = 28;
else if (m.y + 28 > 700)
m.y = 670;
player_x = m.x-23, player_y = m.y-28;
for (int a = player_y; a <= player_y + 29; a++)
{
for (int b = player_x; b <= player_x + 23; b++)
if (arr[a][b] == 3)//撞到敌机
{
flag = 1;
break;
}
else
arr[a][b] = 1;
if (flag == 1)
break;
}
}
if (m.uMsg == WM_LBUTTONDOWN)
{
bullet_x = m.x;
bullet_y = m.y;
arr[m.y-2][m.x] = 2;
}
}
}
void updateWithoutInput()//与输入无关操作
{
if (bullet_y > -1)
bullet_y--;
}
int main()
{
srand(time(0));
starup();
enemy_x = rand() % 422 + 29;
enemy_y = -44;
while (1)
{
showup();
updateWithoutInput();
updateWithInuput();
if (flag == 1)
break;
}
EndBatchDraw();
getch();
closegraph();
}