0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用C語言實(shí)現(xiàn)打磚塊項(xiàng)目

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2021-11-19 10:37 ? 次閱讀

這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)——《打磚塊項(xiàng)目》,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下!

游戲介紹:

在游戲中,玩家通過按住并滑動(dòng)擋板下的圓點(diǎn)控制擋板左右移動(dòng),接住擊打磚塊而改變飛行軌跡掉落下來的小球。在游戲界面的左側(cè)有個(gè)速度控制器,玩家可一邊接球,一邊控制它。上下滑動(dòng)調(diào)整小球的飛行速度。速度越快風(fēng)險(xiǎn)越大,當(dāng)然獎(jiǎng)勵(lì)和風(fēng)險(xiǎn)是成正比的。越快的速度得分會(huì)越多,反之速度越慢得分會(huì)越少。(本項(xiàng)目并沒有設(shè)計(jì)速度調(diào)整這一塊,大家可以自己完善一下)

項(xiàng)目技術(shù):

主要是數(shù)組、結(jié)構(gòu)體、繪圖技術(shù)、按鍵操作和定時(shí)器等,對邏輯也是有一定的要求,但是這些在我們項(xiàng)目源碼里面都會(huì)有注釋,大家到時(shí)候?qū)W習(xí)的時(shí)候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學(xué)者。

本項(xiàng)目編譯環(huán)境:VS2019/VS2013;

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關(guān)注文末領(lǐng)?。?/p>

源代碼示例:

#include #include //畫磚塊int  map[5][8];        //描述整個(gè)地圖HWND hwnd = NULL;//用1-3 給數(shù)組賦值void initMap() {  for (int i = 0; i < 5; i++)   {    for (int j = 0; j < 8; j++)     {      map[i][j] = rand() % 3 + 1;    }  }}void drawMap() {  setlinestyle(PS_SOLID, 2);  setlinecolor(WHITE);  for (int i = 0; i < 5; i++)   {    for (int j = 0; j < 8; j++)    {      int x = 100*j ;    //j=x/100      int y = 25*i ;    //i=y/i      switch (map[i][j])   //map[i][j]!=0      {      case 0:      //做消除用的        break;      case 1:        setfillcolor(YELLOW);        fillrectangle(x, y, x + 100, y + 25);        break;      case 2:        setfillcolor(LIGHTBLUE);        fillrectangle(x, y, x + 100, y + 25);        break;      case 3:        setfillcolor(LIGHTGREEN);        fillrectangle(x, y, x + 100, y + 25);        break;      }    }  }}//木板的過程struct Board {  int x;  int y;  int speed;  COLORREF color;  int width;  int height;};//struct Board board = { 300, 800 - 25,1, WHITE, 200, 25 };struct Board* createBoard(int x, int y, int  speed, COLORREF color, int width, int height) {  struct Board* pBoard = (struct Board*)malloc(sizeof(struct Board));  //結(jié)構(gòu)體指針->成員   ->指針指向運(yùn)算符  //(*指針).成員;  pBoard->x = x;  pBoard->y = y;  pBoard->speed = speed;  pBoard->color = color;  //結(jié)構(gòu)體變量.成員  (*pBoard).width = width;  (*pBoard).height = height;  return pBoard;}void drawBoard(struct Board* pBoard) {  setfillcolor(pBoard->color);  fillrectangle(pBoard->x, pBoard->y,    pBoard->x + pBoard->width, pBoard->y + pBoard->height);}//木板的按鍵操作void keyDown(struct Board* pBoard){  //C語言: scanf函數(shù) getch() getchar() gets()  //異步的按鍵操作  if (GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT)&&pBoard->x>=0)   {    pBoard->x -= pBoard->speed;  }  if (GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT)&&pBoard->x<=800-200)   {    pBoard->x += pBoard->speed;  }}//球:struct Ball {  int x;  int y;  int r;        //半徑  int dx;  int dy;  COLORREF color;};struct Ball* createBall(int x, int y, int r, int dx, int dy, COLORREF color){  struct Ball* pBall = (struct Ball*)malloc(sizeof(struct Ball));  pBall->x = x;  pBall->y = y;  pBall->r = r;  pBall->dx = dx;  pBall->dy = dy;  pBall->color = color;  return pBall;}void drawBall(struct Ball* pBall){  setfillcolor(pBall->color);  solidcircle(pBall->x, pBall->y, pBall->r);}//1.反射//2.撞擊木板int hitBoard(struct Ball* pBall, struct Board* pBoard) {  if (pBall->y + pBall->r == pBoard->y) //y滿足  {    if (pBall->x >= pBoard->x && pBall->x <= pBoard->x + pBoard->width)     {      return 1;    }  }  return 0;}int die(struct Ball* pBall) {  if (pBall->y > 800 - 25)  {    return 1;  }  return 0;}//3.撞擊磚塊int hitBricks(struct Ball* pBall) {  //1.算出球的行的列是屬于地圖  int ballJ = pBall->x / 100;  int ballI = (pBall->y - pBall->r) / 25;  //2.當(dāng)前下標(biāo)下,數(shù)組中不等于表示有磚塊需要反射  if (ballJ < 8 && ballI < 5 && map[ballI][ballJ] != 0)   {    map[ballI][ballJ] = 0;    return 1;  }  return 0;}void moveBall(struct Ball* pBall,struct Board* pBoard) {  if (pBall->x - pBall->r <= 0 || pBall->x + pBall->r >= 800)   {    pBall->dx = -pBall->dx;  }  if (pBall->y - pBall->r <= 0 || hitBoard(pBall,pBoard)|| hitBricks(pBall))  {    pBall->dy = -pBall->dy;  }  pBall->x += pBall->dx;  pBall->y += pBall->dy;}//4.收尾工作 :游戲結(jié)束//5.定時(shí)器int Timer(time_t num, int id) {  static time_t start[10];  time_t end = clock();  if (end - start[id]>num)   {    start[id] = end;    return 1;  }  return 0;}int gameOver() {  for (int i = 0; i < 5; i++)   {    for (int j = 0; j < 8; j++)     {      if (map[i][j] != 0)       {        return 0;      }    }  }  return 1;}int main() {  srand((unsigned int)time(0));      //設(shè)置隨機(jī)數(shù)的范圍跟隨時(shí)間改變而改變  hwnd=initgraph(800, 800);  struct Board* pBoard = createBoard(300, 800 - 25,5, WHITE, 200, 25);  struct Ball* pBall = createBall(400, 600, 15, 5, -5, RED);  initMap();  BeginBatchDraw();  while (1)   {    cleardevice();    drawMap();    drawBoard(pBoard);    drawBall(pBall);    if(Timer(10,0))      moveBall(pBall,pBoard);    keyDown(pBoard);    if (die(pBall))     {      MessageBox(hwnd, "you die", "gameOver", MB_OK);      exit(0);    }    if (gameOver())     {      MessageBox(hwnd, "win game", "gameOver", MB_OK);      exit(0);    }    FlushBatchDraw();  }  EndBatchDraw();  closegraph();  return 0;}

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7605

    瀏覽量

    136930
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4790

    瀏覽量

    68653

原文標(biāo)題:C語言項(xiàng)目實(shí)戰(zhàn):《打磚塊》零基礎(chǔ)項(xiàng)目!225 行源碼注釋示例

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

    直方圖統(tǒng)計(jì)的原理 直方圖統(tǒng)計(jì)從數(shù)學(xué)上來說,是對圖像中的像素點(diǎn)進(jìn)行統(tǒng)計(jì)。圖像直方圖統(tǒng)計(jì)常用于統(tǒng)計(jì)灰度圖像,表示圖像中各個(gè)灰度級出現(xiàn)的次數(shù)或者概率。統(tǒng)計(jì)直方圖的實(shí)現(xiàn)采用C/C++或者其他高級語言實(shí)
    的頭像 發(fā)表于 12-24 10:24 ?112次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)

    FPGA磚塊小游戲設(shè)計(jì)思路

    ? 交流問題 ? Q :FPGA磚塊小游戲,如何基于FPGA用verilog語言在Vivado平臺(tái)上寫磚塊小游戲,最好能用到PS2與VG
    的頭像 發(fā)表于 12-09 16:57 ?212次閱讀

    使用C語言實(shí)現(xiàn)函數(shù)模板

      用C語言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?399次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢和特點(diǎn),適用于不同的應(yīng)用場景。以下將從語法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對C
    的頭像 發(fā)表于 10-29 17:31 ?354次閱讀

    PLC編程語言C語言的區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個(gè)方面存在顯著的區(qū)別。本文將從多個(gè)維度深入探討PLC編程
    的頭像 發(fā)表于 06-14 17:11 ?2858次閱讀

    何用C語言實(shí)現(xiàn)高效查找(二分法)

    今天給分享一下使用C語言實(shí)現(xiàn)二分算法,主要包含以下幾部分內(nèi)容:二分查找算法介紹二分查找算法使用場景二分查找算法代碼實(shí)現(xiàn)二分查找算法實(shí)現(xiàn)過程用C
    的頭像 發(fā)表于 06-04 08:04 ?1149次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實(shí)現(xiàn)</b>高效查找(二分法)

    使用C語言實(shí)現(xiàn)的CRC計(jì)算單元的例子

    使用C語言實(shí)現(xiàn)的CRC計(jì)算單元的例子
    的頭像 發(fā)表于 05-16 16:16 ?1000次閱讀

    嵌入式編程,如何用 C 語言實(shí)現(xiàn)狀態(tài)機(jī)設(shè)計(jì)?

    狀態(tài)機(jī)模式是一種行為模式,通過多態(tài)實(shí)現(xiàn)不同狀態(tài)的調(diào)轉(zhuǎn)行為的確是一種很好的方法,只可惜在嵌入式環(huán)境下,有時(shí)只能寫純C代碼,并且還需要考慮代碼的重入和多任務(wù)請求跳轉(zhuǎn)等情形,因此實(shí)現(xiàn)起來著實(shí)需要一番考慮
    發(fā)表于 04-23 11:00

    C語言實(shí)現(xiàn)Web參數(shù)傳遞

    電子發(fā)燒友網(wǎng)站提供《C語言實(shí)現(xiàn)Web參數(shù)傳遞.docx》資料免費(fèi)下載
    發(fā)表于 03-24 09:14 ?2次下載

    嵌入式系統(tǒng)中C語言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用

    C語言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類型數(shù)據(jù)。但是結(jié)構(gòu)是C語言編程中允許您存儲(chǔ)不同數(shù)據(jù)類型的數(shù)據(jù)。
    發(fā)表于 03-12 14:29 ?506次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結(jié)構(gòu)體的基礎(chǔ)<b class='flag-5'>實(shí)現(xiàn)</b>與應(yīng)用

    c語言,c++,java,python區(qū)別

    C語言、C++、Java和Python是四種常見的編程語言,各有優(yōu)點(diǎn)和特點(diǎn)。 C語言
    的頭像 發(fā)表于 02-05 14:11 ?2415次閱讀

    vb語言c++語言的區(qū)別

    VB語言C++語言是兩種不同的編程語言,雖然它們都屬于高級編程語言,但在設(shè)計(jì)和用途上有很多區(qū)別。下面將詳細(xì)比較VB
    的頭像 發(fā)表于 02-01 10:20 ?2355次閱讀

    ADUC7061如何使用C語言實(shí)現(xiàn)EEPROM功能?

    我使用ADUC7061做的信號采集,現(xiàn)在客戶需要實(shí)現(xiàn)EEPROM功能來保存3-5個(gè)數(shù)據(jù),請問如何使用C語言實(shí)現(xiàn)?不使用外部EEPROM 專用IC。
    發(fā)表于 01-12 06:56

    單軸PSO視覺飛拍與精準(zhǔn)輸出:EtherCAT超高速實(shí)時(shí)運(yùn)動(dòng)控制卡XPCIE1032H上位機(jī)C#開發(fā)(七)

    正運(yùn)動(dòng)技術(shù)EtherCAT控制卡在VS平臺(tái)采用C#語言實(shí)現(xiàn)的各種PSO功能。
    的頭像 發(fā)表于 01-03 09:50 ?1052次閱讀
    單軸PSO視覺飛拍與精準(zhǔn)輸出:EtherCAT超高速實(shí)時(shí)運(yùn)動(dòng)控制卡XPCIE1032H上位機(jī)<b class='flag-5'>C</b>#開發(fā)(七)

    怎么寫出效率高、思路清晰的C語言程序?

    要用C語言的思維方式來進(jìn)行程序的構(gòu)架構(gòu)建 要有良好的C語言算法基礎(chǔ),以此來實(shí)現(xiàn)程序的邏輯構(gòu)架 靈活運(yùn)用
    的頭像 發(fā)表于 01-02 14:20 ?577次閱讀