C语言写雷霆战机
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <graphics.h>
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
#define WND_WIDTH 500
#define WND_HEIGHT 700
typedef struct Node
{
int x;
int y;
struct Node *pnext;
}NODE;
NODE *pZidan = NULL;
NODE *pMine = NULL;
NODE *pDiji = NULL;
void CreateList()
{
pZidan = (NODE *)malloc(sizeof(NODE));
if (pZidan == NULL)
{
perror("shibai1\n");
}
pZidan->x = 50;
pZidan->y = 50;
pZidan->pnext = NULL;
pMine = (NODE *)malloc(sizeof(NODE));
if (pMine == NULL)
{
perror("shibai1\n");
}
pMine->x = 225;
pMine->y = 620;
pMine->pnext = NULL;
pDiji = (NODE *)malloc(sizeof(NODE));
if (pDiji == NULL)
{
perror("shibai1\n");
}
pDiji->x = 0;
pDiji->y = 0;
pDiji->pnext = NULL;
}
void AddNode(int flag)
{
if (flag == 0)
{
NODE *pnew = (NODE *)malloc(sizeof(NODE));
pnew->x = pMine->x+21;
pnew->y = pMine->y-10;
pnew->pnext = NULL;
pnew->pnext = pZidan->pnext;
pZidan->pnext = pnew;
}
else if(flag == 1)
{
}
}
void AddNode_Diji()
{
NODE *pnew = (NODE *)malloc(sizeof(NODE));
pnew->x = rand()%(WND_WIDTH-20);
pnew->y = 0;
pnew->pnext = NULL;
pnew->pnext = pDiji->pnext;
pDiji->pnext = pnew;
}
void Shoot()
{
NODE *pdr = pDiji->pnext;
NODE *pdrpre = pDiji;
NODE *pzd = pZidan->pnext;
NODE *pzdpre = pZidan;
while (pdr != NULL)
{
pzd = pZidan->pnext;
pzdpre = pZidan;
while (pzd != NULL)
{
if (pzd->x > pdr->x - 10 && pzd->x <= pdr->x + 50 &&
pzd->y >= pdr->y - 15 && pzd->y <= pdr->y + 15)
{
pzdpre->pnext = pzd->pnext;
free(pzd);
pdrpre->pnext = pdr->pnext;
free(pdr);
pdr = pDiji->pnext;
pdrpre = pDiji;
break;
}
else
{
pzd = pzd->pnext;
pzdpre = pzdpre->pnext;
}
}
if (pdr != NULL)
pdr = pdr->pnext;
if (pdr != NULL)
{
pdrpre = pdrpre->pnext;
}
}
}
int main(void)
{
char key;
DWORD t1, t2,tt1,tt2;
IMAGE image_zidan;
IMAGE image_diji;
IMAGE image_bcground;
IMAGE image_mephon;
loadimage(&image_zidan,TEXT("..//tupian//zidan2.jpg"),10, 15);
loadimage(&image_diji, TEXT("..//tupian//diji.jpg"), 20, 25);
loadimage(&image_mephon, TEXT("..//tupian//我机1.jpg"), 50, 80);
loadimage(&image_bcground, TEXT("..//tupian//背景1.jpg"), 500, 700);
initgraph(WND_WIDTH, WND_HEIGHT);
srand(time(NULL));
CreateList();
t1 = GetTickCount();
tt1 = GetTickCount();
while (1)
{
t2 = GetTickCount();
tt2 = GetTickCount();
if (t2 - t1 > 2000)
{
AddNode_Diji();
t1 = t2;
}
if (tt2 - tt1 > 200)
{
AddNode(0);
tt1 = tt2;
}
BeginBatchDraw();
cleardevice();
putimage(0, 0, &image_bcground);
putimage(pMine->x, pMine->y, &image_mephon);
NODE *p = pZidan->pnext;
while (p != NULL)
{
putimage(p->x, p->y, &image_zidan);
p->y -= 20;
p = p->pnext;
}
NODE *p_diji = pDiji->pnext;
while (p_diji != NULL)
{
putimage(p_diji->x, p_diji->y,&image_diji);
p_diji->y++;
p_diji = p_diji->pnext;
}
Sleep(25);
Shoot();
EndBatchDraw();
if (_kbhit())
{
key = _getch();
switch (key)
{
case 119 ://上
pMine->y -= 10;
break;
case 115://下
pMine->y += 10;
break;
case 97://左
pMine->x -= 10;
break;
case 100://右
pMine->x += 10;
break;
default:
break;
}
}
}
getchar();
return 0;
}