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

DOS 時代圖形程式:機器人大戰遊戲原始碼片段 (BGI graphics.h)

     編輯:關於C++

背景

早期 DOS 下 Turbo C/C++ 使用 Borland Graphics Interface (BGI) graphics.h 撰寫的簡易遊戲片段。現代環境已無法直接編譯執行,僅供教學/懷舊參考。

核心技術點

  • 視訊模式切換:int86(0x10, ...) 設定 VGA 256 色模式 (0x13, 320x200) 或文字模式 (0x03)。
  • 直接顯存寫入:unsigned char far *video_buff = (char far*)0xA0000000L 指向顯存段地址,繞過 BGI 函式直接畫點/線/矩形,效率極高。
  • 鍵盤中斷攔截:setvect(9, NewInt9) 取代 BIOS 鍵盤中斷 (INT 9h),建立鍵盤狀態陣列 key_state[128],主迴圈輪詢非阻塞讀取。
  • 幾何繪圖原語:h_line, v_line, p_pixel, s_square, r_rectangle, fillRectangle 封裝基本圖元。
  • 遊戲邏輯:雙玩家 (我方/敵方) 上下左右移動、出拳碰撞檢測、血條扣減、得分顯示。

代碼結構概覽

// 全域狀態
int xx, yy;           // 我方座標
int x1, y1;           // 敵方座標
int youlife, mylife;  // 血量
int board[100][170];  // 邏輯佔用網格

// 關鍵函式
void me() {           // 我方移動/出拳/碰撞檢測
    // 處理鍵盤輸入 sxzy (編碼後的掃描碼)
    // 更新 xx, yy
    // 出拳邏輯 zx (SPACE/其它鍵)
    // 碰撞判定 → 扣血
}
void enemy() { ... }  // 敵方 AI (片段中未完整呈現)
void ground() { ... } // 畫邊框
void delzx() { ... }  // 延時刪除拳頭視覺效果

現代化移植建議

  • 圖形庫:SDL2, SFML, Raylib, OpenGL + GLFW
  • 輸入處理:SDL_EVENT / GLFW callbacks 取代中斷攔截
  • 記憶體模型:移除 far 指標、int86、實模式顯存地址
  • 遊戲迴圈:固定時間步長 accumulator 模式
  • 實體系統:ECS (Entity Component System) 架構分離渲染/邏輯/輸入

歷史價值

展示了 90 年代 DOS 遊戲開發的核心技術:實模式記憶體、硬體中斷、直接顯存操作、BGI 庫封裝。對理解計算機圖形學基礎、作業系統演進、嵌入式裸機開發仍有參考意義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved