色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用C語言實現球球大作戰項目

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-21 16:36 ? 次閱讀

這篇文章主要為大家詳細介紹了C語言實現——《球球大作戰項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!在室友面前秀一下豈不是美滋滋!

游戲介紹:

這是一個大球吃小球的世界,玩家的目標是要努力吃成最大的球球。在游戲一開始,玩家出現在地圖上隨機位置,地圖里灑滿了小彩豆,玩家吃掉小彩豆體積就會增大,當增大到比別人的球大時,就可以吃別人的球啦,當然也得躲避更大的球。小球速度快,大球速度慢。球球到達一定重量后,可以分身,一個球變成等大的兩個球,可以再次分身,但是最多可以擁有16個分身。

本期就是帶著大家用C語言去開發一款自己寫的簡易版球球大作戰,一定要自己動手來寫喲~

本項目編譯環境:VS2019/VS2013;

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

配套講解教程:球球大作戰游戲教程——嗶哩嗶哩

源代碼示例:

#include#include#include#include#include#include#pragma comment(lib,"winmm.lib")#define WIN_WIDTH 1024 //宏定義窗口寬和高#define WIN_HEIGHT 640#define MAP_WIDTH  (WIN_WIDTH*5)#define MAP_HEIGHT (WIN_HEIGHT*5)#define FOOD_NUM 1000//食物數量 #define AI_NUM 500 //人工智障數量
//玩家,用圓表示,用變量表示玩家的坐標struct Ball //定義小球的結構,玩家,ai,食物{  int x;  int y;  int r;  bool flag;//是否存在標志  DWORD color;//小球顏色}player,food[FOOD_NUM],ai[AI_NUM];//定義變量//int a; 圖片 IMAGE map;IMAGE map(MAP_WIDTH, MAP_HEIGHT);POINT cameraPos;//攝像機位置void CameraUpdate(){  //以人物為中心,計算攝像機的位置  cameraPos.x = player.x - WIN_WIDTH / 2;  cameraPos.y = player.y - WIN_HEIGHT / 2;
  if (cameraPos.x < 0) cameraPos.x = 0;  if (cameraPos.y < 0) cameraPos.y = 0;  if (cameraPos.x > MAP_WIDTH - WIN_WIDTH) cameraPos.x = MAP_WIDTH - WIN_WIDTH;  if (cameraPos.y > MAP_HEIGHT - WIN_HEIGHT) cameraPos.y = MAP_HEIGHT - WIN_HEIGHT;
}//初始化數據void GameInit(){  mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);  mciSendString("play BGM repeat", 0, 0, 0);  //設置隨機數種子  srand((unsigned)time(NULL));
  player.x = rand() % MAP_WIDTH;  player.y = rand() % MAP_HEIGHT;  player.r = 15;  player.flag = true;  player.color = RGB(rand() % 256, rand() % 256, rand() % 256);  //初始化食物數據  for (int i = 0; i < FOOD_NUM; i++)  {    food[i].x = rand() % MAP_WIDTH;    food[i].y = rand() % MAP_HEIGHT;    food[i].r = rand() % 5+1;    food[i].flag = true;    food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);  }  //初始化ai  for (int i = 0; i < AI_NUM; i++)  {    ai[i].x = rand() % MAP_WIDTH;    ai[i].y = rand() % MAP_HEIGHT;    ai[i].r = rand() % 15 + 1;    ai[i].flag = true;    ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);  }}void GameDraw(){  //加上雙緩沖繪圖,防止閃屏  BeginBatchDraw();  //設置工作區  SetWorkingImage(&map);  //設置背景顏色  setbkcolor(WHITE);  //清屏  cleardevice();  //繪制食物  for (int i = 0; i < FOOD_NUM; i++)  {    if (food[i].flag)    {      setfillcolor(food[i].color);      solidcircle(food[i].x, food[i].y, food[i].r);    }  }  //繪制智障  for (int i = 0; i < AI_NUM; i++)  {    if (ai[i].flag)    {      setfillcolor(ai[i].color);      solidcircle(ai[i].x, ai[i].y, ai[i].r);    }  }  //繪制玩家  if (player.flag)  {    setfillcolor(player.color);    solidcircle(player.x, player.y, player.r);    settextcolor(BLACK);    setbkmode(TRANSPARENT);    outtextxy(player.x, player.y, "頑石老師");  }  SetWorkingImage();//恢復默認工作區  CameraUpdate();  //putimage(cameraPos.x, cameraPos.y, &map);  putimage(0, 0, WIN_WIDTH, WIN_HEIGHT, &map, cameraPos.x, cameraPos.y);  EndBatchDraw();//結束雙緩沖繪圖}//控制玩家void PlayerContrl(int speed){  //往上移動,什么發生改變?y坐標減  if (GetAsyncKeyState(VK_UP) && player.y-player.r >= 0)  {    player.y -= speed;  }  if (GetAsyncKeyState(VK_DOWN) && player.y + player.r  {    player.y += speed;  }  if (GetAsyncKeyState(VK_LEFT) && player.x - player.r >= 0)  {    player.x -= speed;  }  if (GetAsyncKeyState(VK_RIGHT) && player.x + player.r   {    player.x += speed;  }}//求兩點之間的距離double DisTance(struct Ball b1,struct Ball b2){  return sqrt((double)(b1.x - b2.x)*(b1.x - b2.x) + (b1.y - b2.y)*(b1.y - b2.y));}//玩家吃食物void EatFood(){  for (int i = 0; i < FOOD_NUM; i++)  {    if (food[i].flag && DisTance(player,food[i])    {      food[i].flag = false;      player.r+=food[i].r/4;    }  }}//追逐算法 void Chase(struct Ball *chase, struct Ball run){  chase->x < run.x ? chase->x += 2 : chase->x -= 2;//x改變  chase->y < run.y ? chase->y += 2 : chase->y -= 2;//y改變}
void aiMove(){  for (int i = 0; i < AI_NUM; i++)  {    if (ai[i].flag)    {      Chase(&ai[i], player);    }  }}int main(){  //創建窗口  initgraph(WIN_WIDTH, WIN_HEIGHT);  GameInit();  //需要不斷地處理繪圖,以及獲取鍵盤消息...循環  while (1)  {    aiMove();    GameDraw();    EatFood();    PlayerContrl(10);  }    getchar();  return 0;}

責任編輯:haq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136713
  • 代碼
    +關注

    關注

    30

    文章

    4780

    瀏覽量

    68539

原文標題:C語言項目實戰:《球球大作戰》零基礎項目!185 行源代碼示例

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解SMT工藝的五原則

    SMT(表面貼裝技術)工藝中的五原則,是工程師在選擇焊膏時的一個重要指導原則,它確保了焊接的可靠性和質量。以下是對五原則的詳細解釋:
    的頭像 發表于 12-04 09:11 ?140次閱讀
    詳解SMT工藝的五<b class='flag-5'>球</b>原則

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?379次閱讀

    BGA連接器植工藝研究

    直接影響器件與電路的性能及可靠性,現從植工藝路線、BGA連接器設計要求、植工藝參數及關鍵技術、試驗及檢測要求等幾個方面,闡述了影響BGA連接器植工藝實現的各種因素,借以提高BGA
    的頭像 發表于 07-15 15:42 ?761次閱讀
    BGA連接器植<b class='flag-5'>球</b>工藝研究

    智能軟啟動柜浮控制設置在哪

    智能軟啟動柜是一種用于電動機啟動和控制的設備,它通過控制電動機的啟動電流,減少啟動時的沖擊,延長電動機的使用壽命。智能軟啟動柜的浮控制設置是其中的一個重要功能,可以有效地控制水位,防止水泵空轉或
    的頭像 發表于 06-18 14:41 ?802次閱讀

    借助多個預校正相機的準確 360° 型成像

    機器視覺發展至今,型視頻數據的質量和靈活性使該媒介成為需要同步視頻流的應用的理想之選。典型的是成為GIS應用,例如移動地圖和街景,彩色化LIDAR生成的3D點云
    的頭像 發表于 06-15 08:34 ?298次閱讀
    借助多個預校正相機的準確 360° <b class='flag-5'>球</b>型成像

    何用C語言實現高效查找(二分法)

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

    淺談SMT工藝中的葡萄效應成因

    葡萄效應是指在SMT回流焊過程中,錫膏無法完全融化和潤濕焊盤,而形成一顆顆類似葡萄的小球,影響焊點的可靠性和外觀。葡萄效應的成因主要與錫膏的質量、印刷工藝、回流焊曲線等因素有關。本文將重點分析錫膏印刷后有效壽命對葡萄效應的
    的頭像 發表于 05-24 09:13 ?680次閱讀

    囊擴張導管疲勞試驗儀儀器評估

    文章由濟南三泉智能科技有限公司提供囊擴張導管疲勞試驗儀是一種用于檢測囊擴張導管疲勞性能的設備。該設備主要用于評估囊擴張導管在擴張過程中的擴張力、擴張速度等物理參數,以及模擬實際使用中的彎曲
    的頭像 發表于 05-23 10:52 ?281次閱讀
    <b class='flag-5'>球</b>囊擴張導管疲勞試驗儀儀器評估

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?963次閱讀

    什么是葡萄珠現象?如何解決?

    葡萄珠現象(Graping),一般指在smt貼片加工過程中回流焊接過程中部分錫膏沒有完全融化,反而被互相焊接在一起形成一顆顆獨立的錫珠或錫堆疊在一起,形成類似一串串葡萄的現象。下面深圳佳金源錫膏
    的頭像 發表于 04-01 15:30 ?593次閱讀
    什么是葡萄<b class='flag-5'>球</b>珠現象?如何解決?

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    帶光口的機可以和交換機搭配使用嗎?

    帶光口的機可以和交換機搭配使用嗎? 攝像監控是當今社會中不可或缺的一部分,它提供了安全監控和錄像的功能。而帶光口的機作為一種常見的攝像監控設備之一,其特點是具備網絡功能和光纖傳輸功能。本文將詳細
    的頭像 發表于 02-04 10:09 ?1082次閱讀

    ADUC7061如何使用C語言實現EEPROM功能?

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

    液位浮開關接線原理詳解

    開關,我們通過他用來接通控制水泵電路。
    的頭像 發表于 01-02 09:33 ?1329次閱讀
    液位浮<b class='flag-5'>球</b>開關接線原理詳解

    錫膏起的緣由都有哪些?

    貼裝電阻、電容器、IC等電子元件的電子焊接。隨著SMT貼片使用量的增加,電焊新材料應運而生。錫膏的起是因為印刷操作失誤而導致的,所以說,引發錫膏起的緣由主要都
    的頭像 發表于 12-26 15:20 ?444次閱讀
    錫膏起<b class='flag-5'>球</b>的緣由都有哪些?
    主站蜘蛛池模板: 一个人免费完整观看日本| 别插我B嗯啊视频免费| 国产成人精品在视频| 久久婷五月综合色啪首页| 偷偷鲁青春草原视频| 97在线播放| 好紧小嫩嫩水的10p| 人妻少妇偷人精品无码洋洋AV | 久草在线一免费新视频| 三叶草未满十八岁| 99久久婷婷国产综合精品青草| 湖南张丽大战黑人hd视频| 色综合五月激情综合色一区| 99久久久精品| 久久久精品久久久久三级| 小学生偷拍妈妈视频遭性教育 | 久久精品一本到99热| 小鸟酱喷水| 国产短视频精品区| 秋霞午夜一级理论片久久| 做a爱片的全过程| 九色91精品国产网站| 午夜噜噜噜私人影院在线播放 | 国产欧美精品一区二区三区-老狼| 男人插女人动态图| 在线播放日韩欧美亚洲日本| 国产不卡无码高清视频| 男人插曲女人的视频| 亚洲一区免费香蕉在线| 国产午夜a理论毛片在线影院| 秋霞网站一级一片| qvod 韩国| 麻豆沈芯语| 最新国自产拍天天更新| 和美女啪啪啪动态图| 日本动漫henta videos| FREEXXX性乌克兰XXX| 久青草国产观看在线视频| 伊人青青草| 国产在线中文字幕| 午夜国产理论|