欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++基于easyx圖形庫(kù)實(shí)現(xiàn)打磚塊游戲

 更新時(shí)間:2022年05月11日 14:07:29   作者:麥克學(xué)肖邦  
這篇文章主要為大家詳細(xì)介紹了C++基于easyx圖形庫(kù)實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++基于easyx實(shí)現(xiàn)打磚塊的具體代碼,供大家參考,具體內(nèi)容如下

代碼:

#include <graphics.h>
#include <ctime>
#include <iostream>
#include <cassert>
using namespace std;
?
class Board
{
public:
?? ?int x;
?? ?int y;
?? ?int w;
?? ?int h;
?? ?COLORREF color;
};
?
class Board* createBoard(int x, int y, int w, int h, COLORREF color)
{
?? ?Board* board = new Board;
?? ?assert(board);
?? ?board->x = x;
?? ?board->y = y;
?? ?board->w = w;
?? ?board->h = h;
?? ?board->color = color;
?? ?return board;
}
?
class Ball
{
public:
?? ?int x;
?? ?int y;
?? ?int r;
?? ?int dx;
?? ?int dy;
?? ?unsigned long color;
};
?
class Ball* createBall(int x, int y, int r, int dx, int dy, unsigned long color)
{
?? ?Ball* pBall = new Ball;
?? ?assert(pBall);
?? ?pBall->x = x;
?? ?pBall->y = y;
?? ?pBall->r = r;
?? ?pBall->dx = dx;
?? ?pBall->dy = dy;
?? ?pBall->color = color;
?? ?return pBall;
}
?
class Map
{
public:
?? ?Map() {}
?? ?
?? ?//初始化地圖
?? ?void initMap(int map[][8], int row, int cols);
?? ?//繪制地圖
?? ?void drawMap(int map[][8], int row, int cols);
?? ?//繪制木板
?? ?void drawBoard(Board* pBoard);
?? ?//繪制球
?? ?void drawBall(Ball* pBall);
};
?
?
?
class Move
{
public:
?? ?
?? ?//移動(dòng)球
?? ?void moveBall(Ball* pBall, Board* pBaord, int map[][8], int row, int cols);
?? ?//球擊中木板后
?? ?int hitBoard(Ball* pBall, Board* pBoard);
?? ?//球擊中墻后
?? ?int hitBricks(Ball* pBall, int map[][8], int row, int cols);
};
?
?
class System
{
public:
?? ?//按鍵操作,控制木板左右移
?? ?void keyDown(Board* pBoard);
?
?? ?//計(jì)時(shí)器
?? ?int Timer(int duration, int id);
?
?? ?//游戲結(jié)束
?? ?int gameOver(Ball* pBall, Board* pBoard);
?
?? ?//游戲結(jié)束的文字顯示
?? ?void outtextxyInfo(int x, int y, const char* info);
?
?? ?//游戲勝利
?? ?int windGame(int map[][8], int row, int cols);
?
};
?
void Map::drawBoard(Board* pBoard)
{
?? ?setfillcolor(pBoard->color);
?? ?//木板的x , y 坐標(biāo) , 木板的坐標(biāo)加上 寬度 和高度?
?? ?solidrectangle(pBoard->x, pBoard->y, pBoard->x + pBoard->w, pBoard->y + pBoard->h);
}
?
void Map::initMap(int map[][8], int row, int cols)
{
?? ?for (int i = 0; i < row; i++)?
?
?? ?{
?? ??? ?for (int j = 0; j < cols; j++)
?? ??? ?{
?? ??? ??? ?map[i][j] = rand() % 3 + 1; //[1,3]
?? ??? ?}
?? ?}
}
?
void Map::drawMap(int map[][8], int row, int cols)
{
?? ?setlinecolor(BLACK);
?? ?for (int i = 0; i < row; i++)
?? ?{
?? ??? ?for (int j = 0; j < cols; j++)
?? ??? ?{
?? ??? ??? ?int x = 100 * j;
?? ??? ??? ?int y = 25 * i;
?? ??? ??? ?switch (map[i][j])
?? ??? ??? ?{
?? ??? ??? ?case 0:
?? ??? ??? ??? ?break;
?? ??? ??? ?case 1:
?? ??? ??? ??? ?setfillcolor(RGB(255, 255, 85));
?? ??? ??? ??? ?fillrectangle(x, y, x + 100, y + 25);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:
?? ??? ??? ??? ?setfillcolor(RGB(85, 255, 85));
?? ??? ??? ??? ?fillrectangle(x, y, x + 100, y + 25);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:
?? ??? ??? ??? ?setfillcolor(RGB(85, 85, 255));
?? ??? ??? ??? ?fillrectangle(x, y, x + 100, y + 25);
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
?
void System::keyDown(Board* pBoard)?
{
?? ?//修改木板的坐標(biāo)
?? ?//_getch()
?? ?//使用異步處理函數(shù) , 按鍵控制
?? ?if((GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT)) && pBoard->x > 0)?
?? ?{
?? ??? ?pBoard->x -= 1;
?? ?}
?? ?if((GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT))&& pBoard->x + pBoard->w < 800)?
?? ?{
?? ??? ?pBoard->x += 1;
?? ?}
}
?
void Map::drawBall(Ball* pBall)?
{
?? ?//setfillcolor(pBall->color);
?? ?setfillcolor(RGB(rand() % 255, rand() % 255 , rand() % 255)); //隨機(jī)顏色
?? ?solidcircle(pBall->x, pBall->y, pBall->r);
}
?
void Move::moveBall(Ball* pBall, Board* pBoard, int map[][8], int row, int cols)?
{
?? ?//碰撞反彈,?
?? ?/*if(pBall->x - pBall->r <= 0 || pBall->x + pBall->r >= 800)?
?? ?{
?? ??? ?pBall->dx = -pBall->dx;
?? ?}
?? ?if(pBall->y - pBall->r <= 0 || pBall->y + pBall->r >=600 )?
?? ?{
?? ??? ?pBall->dy = -pBall->dy;
?? ?}*/
?? ?
?? ?if (pBall->x - pBall->r <= 0 || pBall->x + pBall->r >= 800)
?? ?{
?? ??? ?pBall->dx = -pBall->dx;
?? ?}
?
#if 0
?? ?if (pBall->y - pBall->r <= 0 || hitBoard(pBall, pBoard))
?? ?{
?? ??? ?cout << "發(fā)生碰撞" << endl;
?? ??? ?cout << "沒(méi)有發(fā)生反射" << endl;
?? ??? ?pBall->dy = -pBall->dy;
?? ?}
#else
?? ?if(pBall->y - pBall->r <= 0?
?? ?|| pBall->y + pBall->r >= 600?
?? ?|| hitBoard(pBall,pBoard)
?? ?|| hitBricks(pBall,map,row,cols))
?? ?{
?? ??? ?cout << "發(fā)生碰撞" << endl;
?? ??? ?pBall->dy = -pBall->dy;
?? ?}
#endif
?? ?pBall->x += pBall->dx;
?? ?pBall->y += pBall->dy;
?? ??
}
?
int System::Timer (int duration,int id)?
{
?? ?static int startTime[10];?? ?//靜態(tài)變量自動(dòng)初始化為零
?? ?//用靜態(tài)變量是因?yàn)橐涗浬弦淮蔚倪\(yùn)行結(jié)果
?
?? ?int endTime = clock();
?? ?if(endTime - startTime[id] >= duration)?
?? ?{
?? ??? ?//下一次開始的時(shí)間編程變成一次結(jié)束的時(shí)間
?? ??? ?startTime[id] = endTime;
?? ??? ?return 1;
?? ?}
?? ?return 0;
}
?
int Move::hitBoard(Ball* pBall, Board* pBoard)
{
?
#if 0
?? ?if(pBall->y + pBall->r == pBoard->y)?
?? ?{
?? ??? ?if(pBall->x > pBoard->x && pBall->x < pBoard->x + pBoard->w)?
?? ??? ?{
?? ??? ??? ?cout << "發(fā)生碰撞" << endl;
?? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?else?
?? ??? ?{
?? ??? ??? ?cout << "碰撞出錯(cuò)" << endl;
?? ??? ?}
?? ?}
#else
?? ?if (pBall->y + pBall->r == pBoard->y)
?? ?{
?? ??? ?if (pBall->x > pBoard->x && pBall->x <= pBoard->x + pBoard->w)
?? ??? ?{
?? ??? ??? ?cout << "發(fā)生碰撞" << endl;
?? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?cout << "碰撞出錯(cuò)" << endl;
?? ??? ?}
?? ?}
#endif
?
?? ?return 0;
}
?
int Move::hitBricks(Ball* pBall,int map[][8],int row,int cols)
{
?? ?int j = pBall->x / 100;
?? ?int i = (pBall->y - pBall->r) / 25;
?? ?if(i < row && j < cols && map[i][j] != 0)?
?? ?{
?? ??? ?map[i][j] = 0;
?? ??? ?return 1;
?? ?}
?? ?return 0;
}
?
int System::gameOver(Ball* pBall,Board* pBoard)
{
?? ?if(pBall->y + pBall->r > pBoard->y)?
?? ?{
?? ??? ?return 1;
?? ?}
?? ?return 0;
}
?
int System::windGame(int map[][8], int row, int cols)
{
?? ?for(int i = 0; i < row; ++i)?
?? ?{
?? ??? ?for(int j = 0; j < cols; ++j)?
?? ??? ?{
?? ??? ??? ?if(map[i][j] !=0)?
?? ??? ??? ?{
?? ??? ??? ??? ?return 0;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 1;
}
?
void System::outtextxyInfo(int x, int y, const char* info)
{
?? ?settextstyle(45, 0, "楷體");
?? ?settextcolor(RED);
?? ?outtextxy(x, y, info);
}
?
int main()?
{
?? ?Map init;
?? ?Move move;
?? ?System psystem;
?? ?System judge;
?? ?srand((unsigned int)time(NULL));
?? ?initgraph(800, 600);
?? ?int map[5][8];
?? ?Board* pBoard = createBoard(300, 600 - 25, 200, 25, BLUE);
?? ?Ball* pBall = createBall(400, 300, 10, 15, -5, RED);
?? ?init.initMap(map, 5, 8);
?? ?BeginBatchDraw();
?? ?while (true)
?? ?{?
?? ??? ?cleardevice();?? ?
?? ??? ?init.drawMap(map, 5, 8);
?? ??? ?init.drawBoard(pBoard);
?? ??? ?init.drawBall(pBall);
?? ??? ?if (judge.Timer(20, 0))
?? ??? ??? ?move.moveBall(pBall, pBoard, map, 5, 8);
?? ??? ?judge.keyDown(pBoard);
?? ??? ?//Sleep(10);?? ??? ?
?? ??? ?if (judge.gameOver(pBall, pBoard))?
?? ??? ?{
?? ??? ??? ?psystem.outtextxyInfo(300, 350, "游戲失敗");
?? ??? ??? ?FlushBatchDraw();
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?if (judge.windGame(map, 5, 8))?
?? ??? ?{
?? ??? ??? ?psystem.outtextxyInfo(300, 350, "游戲勝利");
?? ??? ??? ?FlushBatchDraw();
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?FlushBatchDraw(); ??
?? ?}
?? ?Sleep(5000);
?? ?EndBatchDraw(); ? ? ? ??
?? ?
?? ?closegraph();
?? ?return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 頭文件不宜定義變量的原因全面解析

    頭文件不宜定義變量的原因全面解析

    以下是對(duì)頭文件不宜定義變量的原因進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • 關(guān)于C語(yǔ)言中參數(shù)的傳值問(wèn)題

    關(guān)于C語(yǔ)言中參數(shù)的傳值問(wèn)題

    C語(yǔ)言中參數(shù)的傳值一直比較含糊,今天在網(wǎng)上看到三個(gè)面試題的詳解,感覺(jué)講的很好,就拿來(lái)記下,方便學(xué)習(xí)和記憶
    2013-10-10
  • C語(yǔ)言實(shí)現(xiàn)刪除某一個(gè)數(shù)組值的方法

    C語(yǔ)言實(shí)現(xiàn)刪除某一個(gè)數(shù)組值的方法

    這篇文章主要給大家分享C語(yǔ)言數(shù)組中刪除數(shù)組中某個(gè)值的方法,既然要學(xué)習(xí)刪除數(shù)組中的元素,我們就必須得先知道數(shù)組中有哪些元素。同時(shí)還要定義一個(gè)變量,并將需要?jiǎng)h除的元素賦值給那個(gè)變量。下面來(lái)看看文章的詳細(xì)內(nèi)容吧
    2021-11-11
  • 編譯錯(cuò)誤error: stray ‘\343’in program的解決方法

    編譯錯(cuò)誤error: stray ‘\343’in program的解決方法

    以下是對(duì)編譯錯(cuò)誤error: stray ‘\343’in program的解決方法進(jìn)行了詳細(xì)的分析介紹,如遇此問(wèn)題的朋友們可以過(guò)來(lái)參考下
    2013-07-07
  • QT中窗口關(guān)閉自動(dòng)銷毀的實(shí)現(xiàn)示例

    QT中窗口關(guān)閉自動(dòng)銷毀的實(shí)現(xiàn)示例

    這篇文章主要介紹了QT中窗口關(guān)閉自動(dòng)銷毀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++拋出和接收異常的順序

    C++拋出和接收異常的順序

    這篇文章主要介紹了C++拋出和接收異常的順序,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷功能

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)計(jì)算圓周長(zhǎng)以及面積

    C語(yǔ)言實(shí)現(xiàn)計(jì)算圓周長(zhǎng)以及面積

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)計(jì)算圓周長(zhǎng)以及面積方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c++ 調(diào)用python傳輸圖片實(shí)例

    c++ 調(diào)用python傳輸圖片實(shí)例

    今天小編就為大家分享一篇c++ 調(diào)用python傳輸圖片實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C語(yǔ)言實(shí)現(xiàn)出棧序列

    C語(yǔ)言實(shí)現(xiàn)出棧序列

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)出棧序列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論