首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

DOS BGI 簡易打飛碟遊戲原始碼 (graphics.h)

     編輯:關於C++

遊戲簡介

基於 Borland BGI `` 的 DOS 圖形模式小遊戲:飛碟沿拋物線軌跡飛行,玩家控制準星左右/上下移動,空格鍵射擊擊中得分。

核心模組

  • 視訊初始化:`initgraph(&gd, &gm, "C:\\TC")` 進入 VGA 模式。
  • 鍵盤中斷攔截:`setvect(9, NewInt9)` 取代 INT 9h,建立 `key_state[128]` 非阻塞輪詢。
  • 繪圖原語:`DrawFly` (飛碟)、`DrawM` (準星)、`PrScore` (分數顯示)、`Win` (結局)。
  • 物理軌跡:`y = (x/10)^2 + 200` 拋物線,`x` 以隨機速度遞增。
  • 碰撞檢測:簡單矩形範圍判定 `(x+col+10 >= mx-2 && x <= mx+2) && (y >= my-2 && y <= my+2)`。

主迴圈邏輯

for (int round = 0; round < 20; ++round) {
    col = random(10)*20 + 200;   // 水平偏移
    speed = 2 + random(2);       // 速度
    for (x = -250; x <= 250; x += speed) {
        y = pow(x/10, 2) + 200;
        DrawFly(x, y, WHITE);
        DrawM(mx, my, YELLOW);
        delay(gamespeed);
        DrawM(mx, my, BLACK);
        DrawFly(x, y, BLACK);
        // 鍵盤處理 → 更新 mx, my
        // 空格鍵 → 碰撞判定 → 得分/打破
        // 飛出底部 → 自動結束回合
    }
    // 顯示擊中/未擊中標記
}
Win(); // 根據分數顯示評價

現代化移植指南

程式碼結構優化建議

  • 分離 **輸入 → 邏輯更新 → 渲染** 三階段。
  • 實體組件化:`Player`, `FlyDish`, `Bullet`, `Score`。
  • 狀態機:`Menu`, `Playing`, `GameOver`。
  • 資源管理:RAII 包裝 SDL 物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
DOS/BGI現代替代 (SDL2 為例)
`initgraph``SDL_CreateWindow` + `SDL_CreateRenderer`
直接顯存寫入`SDL_RenderDrawPoint` / `SDL_Texture` 像素操作
INT 9h 攔截`SDL_PollEvent` 處理 `SDL_KEYDOWN/UP`
`delay()``SDL_Delay` 或固定時間步長累加器
`randomize()`/`random()``std::mt19937` + `std::uniform_int_distribution`
`graphics.h` 繪圖SDL2_gfx / 手繪矩形/圓 / 精靈圖