#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#define Higt 15
#define Width 15
#define EnemyNum 5
#define difficulty 2
int position_x,position_y ;
int enemy_x[EnemyNum],enemy_y[EnemyNum] ;
int canvas[Higt][Width] = {0} ;
int score ;
int BulletWidth ;
int EnemyMoveSpeed ;
PIMAGE img_my;
PIMAGE img_enemy;
PIMAGE img_arrow;
PIMAGE img_new;
PIMAGE img_erha;
void gotoxy (int ,int ) ;
void startup() ;
void show() ;
void updateWithoutInput() ;
void updateWithInput() ;
int main()
{
initgraph(800,800);
img_my=newimage();
img_enemy=newimage();
img_arrow=newimage();
img_new=newimage();
img_erha=newimage();
getimage(img_my,"our_fly.png",0,0);//获得我方战机的图片
getimage(img_enemy,"enemy_fly.png",0,0);
getimage(img_arrow,"arrow.png",0,0);
getimage(img_new,"new.png",0,0);
getimage(img_erha,"erha.png",0,0);
srand(time(NULL));
startup();
while(1)
{
show();
updateWithoutInput();
updateWithInput();
}
closegraph();
return 0;
}
void gotoxy (int x,int y)
{
HANDLE handle =
GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos ;
pos.X = x ;
pos.Y = y ;
SetConsoleCursorPosition(handle , pos);
}
void startup()
{
position_x = Higt - 1 ;
position_y = Width/2 ;//初始位置
canvas[position_x][position_y] = 1 ;
int k ;
for (k = 0 ; k < EnemyNum ; k++)
{
enemy_x[k] = rand()%difficulty;
enemy_y[k] = rand()%Width;
canvas[enemy_x[k]][enemy_y[k]] = 3;
}
score = 0 ;
BulletWidth = 0 ;
EnemyMoveSpeed = 5 ;
}
void show()
{
gotoxy(0,0);
int i , j ;
for (i = 0 ;i < Higt ; i++)
{
for(j=0;j<Width;j++)//打印横排
{
if (canvas[i][j]==0)//零代表空
{
putimage(i*50,j*50,img_new);
}
else if(canvas[i][j]==1)//1代表自己的战机
{
putimage(i*50,j*50,img_my);
}
else if(canvas[i][j]==2)//2代表子弹
{
putimage(i*50,j*50,img_arrow);
}
else if (canvas[i][j]==3)//3代表敌机
{
putimage(i*50,j*50,img_enemy);
}
}
xyprintf(700,700,"score:%d",score);
Sleep(5);//每10毫秒更新一次
}
}
void updateWithoutInput()
{
int i ,j ,k ;
for (i=0;i<Higt;i++)
{
for(j=0;j<Width;j++)//全排扫描
{
if(canvas[i][j]==2)//对子弹进行判断
{
for(k=0;k<EnemyNum;k++)//对每一个敌机扫描
{
if((i==enemy_x[k])&&(j==enemy_y[k]))//子弹和敌机碰撞
{
score++;
if(score%5==0&&EnemyMoveSpeed>3)
{
EnemyMoveSpeed--;
}
if(score%5==0)
{
BulletWidth++;
}
canvas[enemy_x[k]][enemy_y[k]]= 0;//敌机消失
enemy_x[k]=rand()%difficulty;//重置敌机位置
enemy_y[k]=rand()%Width;
canvas[enemy_x[k]][enemy_y[k]] = 3;
canvas[i][j] = 0 ;
}
}
canvas[i][j]=0;
if(i>0)
canvas[i-1][j] = 2 ;
}
}
}
static int speed = 0;
if(speed<EnemyMoveSpeed)
speed++;
for(k=0;k<EnemyNum;k++)
{
if((position_x==enemy_x[k])&&(position_y==enemy_y[k]))
{
putimage(300,300,img_erha);
outtextxy(250,500,"哈哈,你永远也赢不了,因为我根本没设置胜利");
Sleep(3000);
system("pause");
exit(0);
}
if(enemy_x[k]>Higt)//飞出界外
{
canvas[enemy_x[k]][enemy_y[k]] = 0;
enemy_x[k]=rand()%difficulty;
enemy_y[k]=rand()%Width;//重置
canvas[enemy_x[k]][enemy_y[k]] = 3;
score--;//扣掉一分
if (BulletWidth >0 )
BulletWidth--;
}
if(speed == EnemyMoveSpeed)
{
for(k=0;k<EnemyNum;k++)
{
canvas[enemy_x[k]][enemy_y[k]] = 0 ;
enemy_x[k]++;
speed = 0;
canvas[enemy_x[k]][enemy_y[k]] = 3;
}
}
}
}
void updateWithInput()
{
char input ;
if(kbhit())
{
input=getch();
if (input == 'w'&&position_y>0)
{
canvas[position_x][position_y] = 0;
position_y--;
canvas[position_x][position_y] = 1;
}
else if(input == 's'&&position_y<Width-1)
{
canvas[position_x][position_y] = 0;
position_y++;
canvas[position_x][position_y] = 1;
}
else if(input=='a')
{
canvas[position_x][position_y] = 0;
position_x--;
canvas[position_x][position_y] = 1;
}
else if (input == 'd')
{
canvas[position_x][position_y] = 0;
position_x++;
canvas[position_x][position_y] = 1;
}
else if (input == 'j')
{
int left = position_y - BulletWidth ;
int right = position_y + BulletWidth ;
if(left < 0)
left = 0 ;
if(right > Width-1)
right = Width -1 ;
int k ;
for (k=left; k<=right; k++)
canvas[position_x-1][k] = 2;
}
}
}