📄 test.cpp
字号:
g_pFont = msCreateFont("123.dat");//加载hoho字体库
//g_pEggBitmap = GetGraphics()->CreateBitmapFromBMP("1.bmp");
/////////加载本人坦克//////////////////////////////////////////////
pic_tank_up= GetGraphics()->CreateBitmapFromBMP("src//tank.bmp");
pic_tank_down= GetGraphics()->CreateBitmapFromBMP("src//tank2.bmp");
pic_tank_left= GetGraphics()->CreateBitmapFromBMP("src//tank3.bmp");
pic_tank_right= GetGraphics()->CreateBitmapFromBMP("src//tank4.bmp");
pic_tank_bullet= GetGraphics()->CreateBitmapFromBMP("src//b.bmp");
pic_tank_up->SetColorKey(RGB2Hi(255,255,255));//设置要设为透明的色
pic_tank_down->SetColorKey(RGB2Hi(255,255,255));//设置要设为透明的色
pic_tank_left->SetColorKey(RGB2Hi(255,255,255));//设置要设为透明的色
pic_tank_right->SetColorKey(RGB2Hi(255,255,255));//设置要设为透明的色
pic_tank_bullet->SetColorKey(RGB2Hi(255,255,255));//设置要设为透明的色
/////////加载机器人坦克//////////////////////////////////////////////
pic_bot_tank_up= GetGraphics()->CreateBitmapFromBMP("src//bot_up.bmp");
pic_bot_tank_down= GetGraphics()->CreateBitmapFromBMP("src//bot_down.bmp");
pic_bot_tank_left= GetGraphics()->CreateBitmapFromBMP("src//bot_left.bmp");
pic_bot_tank_right= GetGraphics()->CreateBitmapFromBMP("src//bot_right.bmp");
pic_bot_tank_up->SetColorKey(RGB2Hi(0,0,0));//设置要设为透明的色
pic_bot_tank_down->SetColorKey(RGB2Hi(0,0,0));//设置要设为透明的色
pic_bot_tank_left->SetColorKey(RGB2Hi(0,0,0));//设置要设为透明的色
pic_bot_tank_right->SetColorKey(RGB2Hi(0,0,0));//设置要设为透明的色
/////////////////////////////////////////////////////////////////////////////////////
Bot.bot_way=3; //设定初始方向
Bot.inway_x=200;//设定初始点x
Bot.inway_y=200;
Bot.bot_way=1;
Bot2.bot_way=3; //设定初始方向
Bot2.inway_x=0; //设定初始点x
Bot2.inway_y=0;
Bot2.bot_way=1;
SetTimer(hWnd,TIMER2,100,0);//开启一个机器人
SetTimer(hWnd,TIMER3,10,0);//移动bot
GetGraphics()->DrawFont(SCREENBUFFER,30,60,g_pFont,RGB2Hi(255,255,255),"测试");
return TRUE;
}
//
// 函数: WndProc(HWND, unsigned, WORD, LONG)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_TIMER:
if(wParam==TIMER1)//管理子弹发射过程
{
MYRECT botrect,bulletrect,botrect2; //第一个是Bot的rect,中间的是子弹的rect,第三个是Bot2的rect
botrect.x=Bot.inway_x;
botrect.y=Bot.inway_y;
botrect.height=28;
botrect.width=28;
botrect2.x=Bot2.inway_x;
botrect2.y=Bot2.inway_y;
botrect2.height=28;
botrect2.width=28;
bulletrect.x=Bullet.inway_x;
bulletrect.y=Bullet.inway_y;
bulletrect.width=5;
bulletrect.height=5;
if(IsInArea(botrect,bulletrect)) //判断Bot和子弹是否碰撞
{
Bullet.inway_x=-20; //子弹移出屏幕
Bullet.inway_y=-20; //子弹移出屏幕
isBulletshot=false;
//SetWindowText(hWnd,"打中Bot1!");
// MessageBox(NULL,"中!","中!",0);
Bot.inway_x=200;
Bot.inway_y=200;
Bot.bot_way=1;
}
if(IsInArea(botrect2,bulletrect))//判断Bot2和子弹是否碰撞
{
Bullet.inway_x=-20;//子弹移出屏幕
Bullet.inway_y=-20;//子弹移出屏幕
isBulletshot=false;
SetWindowText(hWnd,"打中Bot2!");
Bot2.inway_x=100;
Bot2.inway_y=100;
Bot2.bot_way=1;
}
return bulletrun();
}
else if(wParam==TIMER2)//管理bot方向
{
//取随机方向
srand((unsigned)time(NULL));
int a=rand()%10;
if(a<=1)
{
Bot2.bot_way=1;
Bot.bot_way=0;
}else if(a>=2&&a<=4)
{
Bot2.bot_way=0;
Bot.bot_way=1;
}else if(a>=5&&a<=6)
{
Bot2.bot_way=2;
Bot.bot_way=2;
}else if(a>7)
{
Bot2.bot_way=3;
Bot.bot_way=3;
}
}else//管理bot移动
{
if(Bot.bot_way==0) //如果向上
{
if(Bot.inway_y<=0)//边界检查
{
Bot.inway_y=0;
}
else
{
Bot.inway_y-=tank_speed;
}
}else if(Bot.bot_way==1) //如果向下
{
if(Bot.inway_y>=572)//边界检查
{
Bot.inway_y=571;
}
else
{
Bot.inway_y+=tank_speed;
}
}else if(Bot.bot_way==2) //如果向左
{
if(Bot.inway_x<=0)//边界检查
{
Bot.inway_x=0;
}
else
{
Bot.inway_x-=tank_speed;
}
}else if(Bot.bot_way==3) //向右
{
if(Bot.inway_x>=770)//边界检查
{
Bot.inway_x=769;
}
else
{
Bot.inway_x+=tank_speed;
}
}
if(Bot2.bot_way==0) //如果向上
{
if(Bot2.inway_y<=0)//边界检查
{
Bot2.inway_y=0;
}
else
{
Bot2.inway_y-=tank_speed;
}
}else if(Bot2.bot_way==1) //如果向下
{
if(Bot2.inway_y>=572)//边界检查
{
Bot2.inway_y=571;
}
else
{
Bot2.inway_y+=tank_speed;
}
}else if(Bot2.bot_way==2) //如果向左
{
if(Bot2.inway_x<=0)//边界检查
{
Bot2.inway_x=0;
}
else
{
Bot2.inway_x-=tank_speed;
}
}else if(Bot.bot_way==3) //向右
{
if(Bot2.inway_x>=770)//边界检查
{
Bot2.inway_x=769;
}
else
{
Bot2.inway_x+=tank_speed;
}
}
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_MOVE://如果窗体移动则
if( GetGraphics() != NULL)
GetGraphics()->UpdateBounds();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_ACTIVATE: // 窗口的活動狀態
{
switch((LOWORD(wParam)))
{
case WA_ACTIVE:
case WA_CLICKACTIVE:
g_bActive = true;
break;
case WA_INACTIVE:
g_bActive = false;
break;
default:
break;
}
if( GetGraphics() != NULL )
GetGraphics()->Restore();
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// “关于”框的消息处理程序。
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
bool IsInArea(MYRECT rect1,MYRECT rect2)//判断是否相交
{
if(fabs((rect1.x +rect1.width / 2)-(rect2.x + rect2.width/2))<fabs(rect1.width + rect2.width) / 2)
{
if(fabs( (rect1.y + rect1.height / 2)-(rect2.y +rect2.height/2)) < fabs((rect1.height+ rect2.height) / 2))
{//MessageBox(NULL,"在区域!","",0);
return true;
}
}
return false;
}
int bulletrun()
{
if(isBulletshot)
{
switch(Bullet.buletway)
{
case 0://上
if( Bullet.inway_y<=0)
{
isBulletshot=false;
return 0;
}
Bullet.inway_y-=15;
break;
case 1://下
if( Bullet.inway_y>=572)
{
isBulletshot=false;
return 0;
}
Bullet.inway_y+=15;
break;
case 2://左
if( Bullet.inway_x<=0)
{
isBulletshot=false;
return 0;
}
Bullet.inway_x-=15;
break;
case 3:
if( Bullet.inway_x>=770)
{
isBulletshot=false;
return 0;
}
Bullet.inway_x+=15;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -