亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++小游戲BrickHit實(shí)例代碼

 更新時(shí)間:2018年02月11日 15:36:50   作者:tniap  
本文通過(guò)實(shí)例代碼給大家介紹了C++小游戲BrickHit的相關(guān)資料,需要的朋友可以參考下

打磚塊小游戲。材料:EasyX圖形庫(kù)。

碰撞的處理,木板移動(dòng)方法還需要優(yōu)化。

//定義 Circle,Brick,Broad
#include<cmath>
#include<graphics.h>
#ifndef _PROPERTY_H_
#define _PROPERTY_H_
struct Circle {
  int x0, y0, r;
  int mvX, mvY;
  COLORREF color;
  virtual ~Circle() {}
  Circle(int x0_, int y0_, int r_, int mvX_, int mvY_, COLORREF color_)
    :x0(x0_), y0(y0_), r(r_), mvX(mvX_), mvY(mvY_), color(color_) {}
  //小球起始位置
  void prtCirl() {
    setfillcolor(color);
    solidcircle(x0, y0, r);
  }
  //小球的移動(dòng)
  void CirlMove() {
    setfillcolor(BLACK);
    solidcircle(x0, y0, r);
    x0 += mvX;
    y0 += mvY;
    setfillcolor(color);
    solidcircle(x0, y0, r);
  }
  //判斷小球是否離開(kāi)寬口內(nèi)。
  //參數(shù):窗口左上坐標(biāo)、寬、高。
  //離開(kāi)返回真。
  bool IsCirlQuit(int x, int y, int width, int height) {
    if (x0 - x <= r && mvX < 0) {
      mvX = -mvX;
      return false;
    }
    else if (x + width - x0 <= r && mvX > 0) {
      mvX = -mvX;
      return false;
    }
    else if (y0 - y <= r && mvY < 0) {
      mvY = -mvY;
      return false;
    }
    else if (y + height - y0 <= r)
      return true;
    return false;
  }
};
struct Brick {
  int x0, y0;
  COLORREF color;
  int height, width;
  virtual ~Brick() {}
  Brick(int x0_, int y0_, int width_, int height_, COLORREF color_)
    :x0(x0_), y0(y0_), width(width_), height(height_), color(color_) {}
  //磚塊的繪制
  void prtBrick() {
    setfillcolor(color);
    solidrectangle(x0, y0, x0 + width, y0 + height);
  }
  //判斷磚塊是否與小球發(fā)生碰撞
  //參數(shù):小球
  //發(fā)生碰撞返回真
  bool IsCrashCirl(Circle &arg) {
    if (arg.x0 + arg.r < x0 || x0 + width < arg.x0 - arg.r)
      return false;
    int disY = min(abs(y0 - arg.y0), abs(y0 + height - arg.y0));
    if (disY <= arg.r) {
      arg.mvY = -arg.mvY;
      return true;
    }
    return false;
  }
  //磚塊的清除
  void BrickClr() {
    setfillcolor(BLACK);
    solidrectangle(x0, y0, x0 + width, y0 + height);
  }
};
struct Broad :public Brick{
  int mvX;
  int floor, ceiling;
  virtual ~Broad() {}
  Broad(int x0_, int y0_, int width_, int height_, int mvX_,
    int floor_, int ceiling_, COLORREF color_)
    :Brick(x0_, y0_, width_, height_, color_), mvX(mvX_), floor(floor_), ceiling(ceiling_) {}
  //重載,判斷木板是否與小球發(fā)生碰撞
  //參數(shù):小球
  //發(fā)生碰撞返回真
  bool IsCrashCirl(Circle &arg) {
    if (arg.x0 + arg.r < x0 || x0 + width < arg.x0 - arg.r)
      return false;
    if (y0 - arg.y0 <= arg.r&&arg.mvY > 0) {
      arg.mvY = -arg.mvY;
      return true;
    }
    return false;
  }
  //木板移動(dòng)
  void BroadMove() {
    POINT point;
    GetCursorPos(&point);
    if (x0 <= point.x&&point.x <= x0)
      return; 
    BrickClr();
    if (point.x < x0)
      x0 = max(x0 - mvX, floor);
    else
      x0 = min(x0 + mvX, ceiling - width);
    setfillcolor(color);
    solidrectangle(x0, y0, x0 + width, y0 + height);
  }
};
#endif // _PROPERTY_H_
//Main.cpp
#include<list>
#include<algorithm>
#include"property.cpp"
using namespace std;
const int WndW = 400, WndH = 400; //窗口大小
list<Brick> CreatBricks();
bool theGame(list<Brick> &MyBrks, Broad &MyBrd, Circle&MyCirl);
int main() { 
  //brick布局
  list<Brick> MyBrks = move(CreatBricks());
  //broad:60*20,移速5,WHITE
  Broad MyBrd(WndW/2 - 30, WndH - 20, 60, 20, 5, 0, WndW, WHITE);
  //circle:半徑5,移速5,DARKGRAY
  Circle MyCirl(WndW/2 - 10, WndH - 20 - 10, 10, 5, 5, DARKGRAY);
  HWND Hwnd = initgraph(WndW, WndH);
  bool GameOver = theGame(MyBrks, MyBrd, MyCirl);
  if (GameOver)
    MessageBox(Hwnd, L"u Win!", L"BrickHit",MB_OK);
  else
    MessageBox(Hwnd, L"default!", L"BrickHit", MB_OK);
  closegraph();
  return 0;
}
//bricks的實(shí)現(xiàn)
list<Brick> CreatBricks() {
  //brick信息:5行10列,40*10
  int Row = 5, Col = 10;
  int BrickW = WndW / Col;
  int BrickH = 10;
  list<Brick> MyBrks;
  bool ColChoice = true;
  for (int i = Row - 1; i >= 0; i--) {
    ColChoice = !ColChoice;
    for (int j = 0; j < Col; j++)
      switch (ColChoice) {
      case true:
        MyBrks.push_back({ BrickW*j,BrickH*i,BrickW,BrickH,LIGHTGREEN });
        ColChoice = !ColChoice;
        break;
      case false:
        MyBrks.push_back({ BrickW*j,BrickH*i,BrickW,BrickH,LIGHTCYAN }); 
        ColChoice = !ColChoice;
        break;
      }
  }
  return MyBrks;
}
//游戲的實(shí)現(xiàn)
bool theGame(list<Brick> &MyBrks, Broad &MyBrd, Circle&MyCirl) {
  //游戲起始界面
  for_each(MyBrks.begin(), MyBrks.end(), [](Brick it) { it.prtBrick(); });
  MyBrd.prtBrick();
  MyCirl.prtCirl();
  //游戲循環(huán)
  while (!MyBrks.empty()) {
    MyCirl.CirlMove();
    MyBrd.BroadMove();
    if (MyCirl.IsCirlQuit(0, 0, WndW, WndH))
      return false;
    MyBrd.IsCrashCirl(MyCirl);
    auto theBrick = find_if(MyBrks.begin(), MyBrks.end(),
      [&MyCirl](Brick it) { return it.IsCrashCirl(MyCirl); });
    if (theBrick != MyBrks.end()) {
      theBrick->BrickClr();
      MyBrks.erase(theBrick);
    }
    Sleep(30);
  }
  return true;
}

總結(jié)

以上所述是小編給大家介紹的C++小游戲BrickHit實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C/C++經(jīng)典算法之約瑟夫問(wèn)題詳解

    C/C++經(jīng)典算法之約瑟夫問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典算法之約瑟夫問(wèn)題的相關(guān)資料,約瑟夫環(huán)問(wèn)題是一道經(jīng)典的數(shù)據(jù)結(jié)構(gòu)的題目,本文介紹了解決約瑟夫問(wèn)題的三種方法,需要的朋友可以參考下
    2021-07-07
  • C++線性時(shí)間的排序算法分析

    C++線性時(shí)間的排序算法分析

    這篇文章主要介紹了C++線性時(shí)間的排序算法分析,是非常經(jīng)典的非比較排序算法,對(duì)于C++程序員有很大的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C++構(gòu)建函數(shù)使用介紹

    C++構(gòu)建函數(shù)使用介紹

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷(xiāo)毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一 些清理工作
    2022-08-08
  • 順序線性表的代碼實(shí)現(xiàn)方法

    順序線性表的代碼實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇順序線性表的代碼實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • C語(yǔ)言和C++的6點(diǎn)區(qū)別

    C語(yǔ)言和C++的6點(diǎn)區(qū)別

    在本篇文章里我們給大家整理了關(guān)于C語(yǔ)言和C++的6點(diǎn)區(qū)別,需要的朋友們可以學(xué)習(xí)參考下。
    2019-02-02
  • 基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    本文主要介紹了通過(guò)QT實(shí)現(xiàn)的一個(gè)文件傳輸小工具。功能就是能實(shí)現(xiàn)文件的雙向傳輸,即客戶端能傳給服務(wù)端,服務(wù)端可以傳給客戶端。文中示例代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2021-12-12
  • C 語(yǔ)言進(jìn)制之間的轉(zhuǎn)換

    C 語(yǔ)言進(jìn)制之間的轉(zhuǎn)換

    本篇文章主要介紹了C語(yǔ)言進(jìn)制之間的轉(zhuǎn)換,舉例說(shuō)明并附圖片,幫助大家理解,希望對(duì)大家有所幫助
    2016-07-07
  • C++ OpenCV實(shí)戰(zhàn)之圖像全景拼接

    C++ OpenCV實(shí)戰(zhàn)之圖像全景拼接

    本文主要介紹了如何使用OpenCV C++ 進(jìn)行圖像全景拼接,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以了解一下
    2022-01-01
  • C/C++: Inline function, calloc 對(duì)比 malloc

    C/C++: Inline function, calloc 對(duì)比 malloc

    以下是對(duì)c/c++中的malloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下
    2016-07-07
  • C++ 中滾動(dòng)條的滾動(dòng)問(wèn)題

    C++ 中滾動(dòng)條的滾動(dòng)問(wèn)題

    本文主要通過(guò)一個(gè)示例,給大家介紹了C++中滾動(dòng)條的滾動(dòng)問(wèn)題,以及相關(guān)參數(shù)的解釋?zhuān)浅5脑敿?xì),有需要的小伙伴可以參考下。
    2015-06-06

最新評(píng)論