告誡這樣的回答:我沒有自己的Turbo C/C++所以這個答案是基於查找的功能定義和特徵,並從那裏拼湊在一起的東西。
(1)itoa
是一個非標準C函數(微軟具體?),它將整數值轉換爲字符串。它有簽名:char* itoa(int, char* int);
。它採用第一個參數中的值並將其轉換爲第二個參數中的字符數組。最後的整數參數是用來轉換字符串的基礎。例如,如果int b = 33
我們將有:
char buf[33];
itoa(b, buf, 10); // buf would contain '3', '3', '0'
itoa(b, buf, 16); // buf would contain '2', '1', '0'
itoa(b, buf, 2); // buf would contain '0', '0', '1', '0', '0', '0', '0','1'
(2)outtextxy功能用於在屏幕上繪製一個字符串,並具有函數簽名outtextxy(int x, int y, char* string);
拳頭參數給出的X和Y座標(以像素)的字符串將開始。
(3)線條函數用於在屏幕上繪製線條,並具有函數簽名line(int x1, int y1, int x2, int y2);
,其中前兩個參數是第一個起點的x和y座標(以像素爲單位),後兩個參數座標(以像素爲單位)爲最終點。
(4)getmaxx()
和getmaxy()
根據分辨率以像素爲單位返回屏幕的寬度和高度。所以,如果你是在1024×768分辨率運行,getmaxx()
將返回1024和getmaxy()
將返回768
知道什麼是單獨的功能呢,我們可以分析代碼片段:
line(5,ymid,getmaxx()-5,ymid);
此畫線,在屏幕中間,從左側開始5個像素,從右側延伸到5個像素。沒有看到完整的代碼,我必須作一個假設,ymid
是中點屏幕,即int ymid = getmaxy()/2;
line(xmid+3,5,xmid+3,getmaxy()-5);
製作一個類似的假設,即int xmid = getmaxx();
,那麼這個功能吸引了來自5個像素一條垂直線下方至屏幕頂部至屏幕底部以上5個像素。另外,請注意,我們將xmid
偏移了3,因此該線偏離右邊三個像素。無法看到更多的代碼或這段代碼的上下文,我不知道爲什麼原作者選擇這樣做。
for(i= xmid+gap;i<getmaxx()-5;i=i+gap)
{
outtextxy(i,ymid-3,"|");
itoa(i-xmid,str,10);
outtextxy(i,ymid+3,str);
}
我們不知道是什麼的gap
值爲但爭論的緣故,讓我們假定它是20,而且還假設我們的屏幕分辨率爲1024×768。根據這些假設,我們可以得出如下結論:
xmid
將是512
getmaxx()
將返回1024
i
將開始在532和運行至超過1024 20的步驟。
由此我們知道i
將具有序列{532,552,572,...,992,1032}。有了這個,我們可以看下一行代碼,看看這個outtext會畫一個'|'使用上面的每個i值和x座標,並使用y值ymid-3
。我對這行代碼的最好猜測是,它負責在x軸下面幾個像素處繪製刻度標記gap
。
在下一行中,值i-xmid
將剛剛返回距中心的距離,並將其轉換爲字符串。因此,例如,第一次通過循環i
將是532,如果我們減去xmid
,我們將得到20,並且我們將導致str
具有值「20」。因此,這行代碼只是生成刻度標記。
for循環體中的最後一行將在正確的位置打印出字符串,注意outtextxy函數調用中x和y的值,因此標籤將在x軸上方打印幾個像素,軸。
我沒有分析其他三個循環,但我懷疑他們正在做同樣的事情,在軸上畫刻度線。我們使用四個for循環來處理每個軸上的正方向和負方向。
你在哪個平臺上運行(Windows,Mac,Linux,DOS)?你還使用什麼圖形軟件包(OpenGL,DirectX,native)? – thurizas
我正在使用基於DOS的Turbo C/C++ – Harshira
過去幾天我一直在接受培訓,所以我沒有時間回到這裏。我在分析代碼時發佈了一個答案。 – thurizas