C語(yǔ)言實(shí)現(xiàn)圖形化打磚塊游戲
更新時(shí)間:2022年05月13日 10:47:11 作者:小雪菜本菜
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)圖形化打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)圖形化打磚塊游戲的具體代碼,供大家參考,具體內(nèi)容如下
#include<stdio.h>? #include<conio.h> #include<easyx.h> #include<Windows.h> #define WINDOW_Width ?768 #define WINDOW_Height 1073? #define BrickWidth 81 #define BrickHeight 27 #define ROWS 5 ? ? //行 #define COLS 8 ? ? //列 enum bk { null, red, orange, yellow, green, blue }; #define Broad_Width 110 #define Broad_Height 20 int brick[ROWS][COLS] = { 0 }; IMAGE img[6], img_ball[2]; IMAGE img_bk, img_board; ? int Ball_x = 6; //球的x方向向量 ?? int Ball_y = -6;//球的y方向向量 ? #define Radius 5 int Broad_x = (WINDOW_Width - Broad_Width) / 2 +25; //Broad初始化 int Broad_y = WINDOW_Height - Broad_Height-100; ? int circle_x = WINDOW_Width / 2-16; ? ? ? ? ? ? ? //circle初始化 int circle_y = WINDOW_Height - Radius - Broad_Height-122 ; void loadRescource() { ?? ?loadimage(img + 1, "./res/redblock.png",78,25); ?? ?loadimage(img + 2, "./res/orangeblock.png",78,25); ?? ?loadimage(img + 3, "./res/yellowblock.png",78,25); ?? ?loadimage(img + 4, "./res/greenblock.png",78,25); ?? ?loadimage(img + 5, "./res/blueblock.png",78,25); ? ?? ?loadimage(&img_bk, "./res/bk.png"); ? ?? ?loadimage(img_ball + 0, "./res/ball0.png"); ?? ?loadimage(img_ball + 1, "./res/ball.png"); ? ?? ?loadimage(&img_board, "./res/board.png"); ? } void drawBall() { ?? ?putimage(circle_x, circle_y, &img_ball[0]); ?? ?putimage(circle_x, circle_y, &img_ball[1]); ? } ? ? void ballMove() { ?? ?circle_x += Ball_x; ?? ?circle_y += Ball_y; ? } int ?DisappearBrick() { ?? ?int ZK_COL =( circle_x-60) / BrickWidth; ?? ?int ZK_ROW = (circle_y-250) / BrickHeight; ? ?? ?if (ZK_ROW < 5 && ZK_COL < 8 && brick[ZK_ROW][ZK_COL] != -1) ?? ?{ ?? ??? ?brick[ZK_ROW][ZK_COL] = -1; ?? ??? ?return 1; ? ?? ?}return 0; } //碰撞檢測(cè)int circle_x, int circle_y void CollisionDetection() { ?? ?//球如果往右邊移動(dòng),檢測(cè)球是否撞上右邊沿 ?? ?if (Ball_x > 0 && circle_x >= WINDOW_Width - Radius-55) ?? ?{ ?? ??? ?Ball_x = -6; ?? ?} ?? ?//球如果往上邊移動(dòng),檢測(cè)球是否撞上上邊沿 ?? ?if (Ball_y < 0 && circle_y <= Radius || DisappearBrick()) ?? ?{ ?? ??? ?Ball_y = 6; ?? ?} ?? ?//球如果往左邊移動(dòng),檢測(cè)球是否撞上左邊沿 ?? ?if (Ball_x < 0 && circle_x <= Radius +35) ?? ?{ ?? ??? ?Ball_x = 6; ?? ?} ?? ?//球如果往下邊移動(dòng),檢測(cè)球是否撞上下邊沿 ?? ?if (Ball_y > 0 && circle_y >= WINDOW_Height - Radius) ?? ?{ ?? ??? ?Ball_y = 0; ?? ??? ?Ball_x = 0; ? ?? ?} ?? ?//檢測(cè)球是否撞上板子,只能從上往下撞,只有兩種極限情況 ?? ?if ((Ball_y > 0) && (circle_y >= (Broad_y - Radius) - 25) &&//球y坐標(biāo) ?? ??? ?(circle_x >= Broad_x) && (circle_x <= (Broad_x + Broad_Width))) ?? ?{ ?? ??? ?Ball_y = -6; ?? ?} ? } //鍵盤控制 void KeyControl() { ?? ?CollisionDetection();?? ?//不管有沒有按鍵都要碰撞檢測(cè) ?? ?int ch; ?? ?if (true == _kbhit()) ?? ?{ ? ? ? ? ? ? ? ? ? ? ? //檢測(cè)是否有按鍵 ?? ??? ?ch = _getch();//獲取按鍵的值 ?? ??? ?switch (ch) ?? ??? ?{ ?? ??? ?case 'a': ?? ??? ?case 'A': ?? ??? ?case 75: ?? ??? ??? ?if(Broad_x >= Radius + 35+38) ?? ??? ??? ?Broad_x -= 50; ?? ??? ??? ?break; ?? ??? ?case 'd': ?? ??? ?case 'D': ?? ??? ?case 77: ?? ??? ??? ?if (Broad_x <= WINDOW_Width - Radius - 55-149) ?? ??? ??? ?Broad_x += 50; ?? ??? ??? ?break; ?? ??? ?} ?? ?} } void DrawAllBrick() { ?? ?for (int i = 0; i < ROWS; i++) ?? ?{ ?? ??? ?for (int j = 0; j < COLS; j++) ?? ??? ??? ?switch (brick[i][j]) ?? ??? ??? ?{ ?? ??? ??? ?case 1: ?? ??? ??? ??? ?putimage(j * 81 + 60, i * 27 + 250, &img[1]); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?putimage(j * 81 + 60, i * 27 + 250, &img[2]); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?putimage(j * 81 + 60, i * 27 + 250, &img[3]); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 4: ?? ??? ??? ??? ?putimage(j * 81 + 60, i * 27 + 250, &img[4]); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 5: ?? ??? ??? ??? ?putimage(j * 81 + 60, i * 27 + 250, &img[5]); ?? ??? ??? ?} ?? ?} ? } void init(int ?brick[][COLS]) { ?? ?int k = 1; ?? ?for (int i = 0; i < ROWS; i++) ?? ?{ ? ?? ??? ?for (int j = 0; j < COLS; j++) ?? ??? ?{ ? ?? ??? ??? ?brick[i][j] = k; ? ?? ??? ?} ?? ??? ?k++; ?? ?} ? } ? int main() { ?? ?initgraph(WINDOW_Width, WINDOW_Height/*,EW_SHOWCONSOLE*/); ?? ?init(brick); ?? ?loadRescource(); ? ?? ?while (true) ?? ?{ ?? ??? ?BeginBatchDraw(); ? ?? ??? ?putimage(0, 0, &img_bk); ? ?? ??? ?putimage(Broad_x, Broad_y, &img_board); ? ?? ??? ?DrawAllBrick(); ? ?? ??? ?drawBall(); ?? ??? ?ballMove(); ?? ??? ?KeyControl(); ?? ??? ?DisappearBrick(); ? ?? ??? ?EndBatchDraw(); ?? ??? ?Sleep(20); ?? ?} ?? ?while (1); ?? ?return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言菜鳥基礎(chǔ)教程之Hello World
C語(yǔ)言是一門通用計(jì)算機(jī)編程語(yǔ)言,應(yīng)用廣泛。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。2017-10-10C語(yǔ)言實(shí)現(xiàn)登錄注冊(cè)和忘記密碼功能
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)登錄、注冊(cè)和忘記密碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12Unreal學(xué)習(xí)之簡(jiǎn)單三角形的繪制詳解
之所以寫這個(gè)繪制簡(jiǎn)單三角形的實(shí)例其實(shí)是想知道如何在Unreal中通過代碼繪制自定義Mesh,如果你會(huì)繪制一個(gè)三角形,那么自然就會(huì)繪制復(fù)雜的Mesh了。所以這是很多圖形工作者的第一課,快跟隨小編一起學(xué)習(xí)起來(lái)吧2023-02-02二叉樹中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹高問題
今天小編就為大家分享一篇關(guān)于二叉樹中葉子節(jié)點(diǎn)的統(tǒng)計(jì)和樹高問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03