C+++Win32項目-老鼠吃狗-熱衷於製作遊戲的你再合適不過了

在這裏插入圖片描述
#include <stdio.h>
#include “acllib.h”
#include <time.h>

const char *TitleName=“貓抓老鼠”;
const int WindowWidth=800,WindowHeight=600;
const char * Dog=“dog.bmp”;
const char * Jerry=“jerry.bmp”;
const char * GameMusic=“tada.wav”;
const int MaxNum=100;

ACL_Image DogImage;
ACL_Image JerryImage;
ACL_Sound Sou;

struct rect
{
int x,y;
int Width,Height;
}rect1,rect2;

void TimerEvent(int id);
void KeyboardEvent(int key,int event);
int Collision(rect r1,rect r2);
void paint();

struct Sprite
{
int Width,Height;
int x,y;
int distx,disty;
}* DogSprite[MaxNum]={NULL},JerrySprite;
int Dognum=0;
int score=0;
int Setup()
{
initWindow(TitleName,DEFAULT,DEFAULT,WindowWidth,WindowHeight);
loadImage(Dog,&DogImage);
loadImage(Jerry,&JerryImage);
loadSound(GameMusic,&Sou);
srand((unsigned)time(NULL));

DogSprite[Dognum] = (struct Sprite*)malloc(sizeof(struct Sprite));
DogSprite[Dognum]->Width=80;
DogSprite[Dognum]->Height=80;
DogSprite[Dognum]->x=rand()%(WindowWidth-DogSprite[Dognum]->Width);
DogSprite[Dognum]->y=rand()%(WindowHeight-DogSprite[Dognum]->Height);
DogSprite[Dognum]->distx=10;
DogSprite[Dognum]->disty=10;

JerrySprite.Width=80;
JerrySprite.Height=80;
JerrySprite.x=rand()%(WindowWidth-JerrySprite.Width);
JerrySprite.y=rand()%(WindowHeight-JerrySprite.Height);
JerrySprite.distx=10;
JerrySprite.disty=10;
registerTimerEvent(TimerEvent);
startTimer(0,40);
startTimer(1,1000);
registerKeyboardEvent(KeyboardEvent);
paint();
return 0;

}

void TimerEvent(int id)
{
if(id= =0)
{
for(int i=0;i<Dognum;i++)
{
if(DogSprite[i])
{
DogSprite[i]->x+=DogSprite[i]->distx;
DogSprite[i]->y+=DogSprite[i]->disty;
if(DogSprite[i]->x>=WindowWidth-DogSprite[i]->Width||DogSprite[i]->x<=0)
{
DogSprite[i]->distx*=-1;
}
if(DogSprite[i]->y>=WindowHeight-DogSprite[i]->Height||DogSprite[i]->y<=0)
{
DogSprite[i]->disty*=-1;
}
}
}
}
if(id==1)
{
if(Dognum<MaxNum)
Dognum++;
if(Dognum<MaxNum&&DogSprite[Dognum]==NULL)
{
DogSprite[Dognum] = (struct Sprite*)malloc(sizeof(struct Sprite));
DogSprite[Dognum]->Width=80;
DogSprite[Dognum]->Height=80;
DogSprite[Dognum]->x=rand()%(WindowWidth-DogSprite[Dognum]->Width);
DogSprite[Dognum]->y=rand()%(WindowHeight-DogSprite[Dognum]->Height);
DogSprite[Dognum]->distx=10;
DogSprite[Dognum]->disty=10;
}
}
paint();
}
void KeyboardEvent(int key,int event)
{
if(event!=KEY_DOWN)
{
return ;
}
else
{
switch(key)
{
case VK_DOWN:{
JerrySprite.y+=JerrySprite.disty;
if(JerrySprite.y>=WindowHeight-JerrySprite.Height)
JerrySprite.y=WindowHeight-JerrySprite.Height;
break;
}
case VK_UP:
{
JerrySprite.y-=JerrySprite.disty;
if(JerrySprite.y<=0)
JerrySprite.y=0;
break;
}
case VK_LEFT:
{
JerrySprite.x-=JerrySprite.distx;
if(JerrySprite.x<=0)
JerrySprite.x=0;
break;
}
case VK_RIGHT:
{
JerrySprite.x+=JerrySprite.distx;
if(JerrySprite.x>=WindowWidth-JerrySprite.Width)
JerrySprite.x=WindowWidth-JerrySprite.Width;
break;
}
default:
break;
}
rect2.x=JerrySprite.x;
rect2.y=JerrySprite.y;
rect2.Width=JerrySprite.Width;
rect2.Height=JerrySprite.Height;

		for(int i=0;i<Dognum;i++)
			{
				if(DogSprite[i])
				rect1.x=DogSprite[i]->x;
				rect1.y=DogSprite[i]->y;
				rect1.Width=DogSprite[i]->Width;
				rect1.Height=DogSprite[i]->Height;
					{
						int c=Collision(rect1,rect2);
							if(c)
							{
								playSound(Sou, 0);
								score++;
								delete(DogSprite[i]);
								DogSprite[i] = NULL;
							}
					}
			}
}
paint();

}
void paint()
{
beginPaint();
clearDevice();
putImageScale(&JerryImage,JerrySprite.x,JerrySprite.y,JerrySprite.Width,JerrySprite.Height);
for(int i=0;i<=Dognum-1;i++)
{
if(DogSprite[i])
{
putImageScale(&DogImage,DogSprite[i]->x,DogSprite[i]->y,DogSprite[i]->Width,DogSprite[i]->Height);
}
}
char str[50];
sprintf_s(str, “score:%d”, score);
setTextSize(30);
paintText(10, 10, str);
endPaint();
}
int Collision(rect r1,rect r2)
{
int c=1;
if(r1.x>r2.x&&r2.x+r2.Width>r2.x)
{
if(r1.y>r2.y&&r2.y+r2.Height>r1.y)
return c;
if(r1.y<r2.y&&r1.y+r1.Height>r2.y)
return c;
}
if(r1.x<r2.x&&r1.x+r1.Width>r2.x)
{
if(r1.y>r2.y&&r2.y+r2.Height>r1.y)
return c;
if(r1.y<r2.y&&r1.y+r1.Height>r2.y)
return c;
}
c=0;
return c;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章