學習程式設計從遊戲開始

lexyao發表於2024-12-11

0.前言

前面已經寫了搭建程式開發環境的幾篇文章,雖然有些內容跟網上的其他一些文章有重複和相似之處,但總覺得這些內容各有所長,每個人的文章裡都有自己的經歷和感受,也就是說,除了通用的知識,還包含了個人經驗。

寫了這些文章之後,有讀者問我,搭建了程式設計開發環境後怎麼使用啊?

聽了這樣的問話,開始時我沒怎麼在意,但後來想一想,覺得有必要寫一點東西了。為什麼呢?讀者中有資深的程式設計師,也有新手。當然這裡的新手有初學程式設計的人,也有是剛更換了新的開發環境的人。不管是哪一種人,對於新的開發環境都需要有一個熟悉的過程。怎麼才能熟悉新的開發環境呢?有兩種方法:一個是學習,一個是練習。

在這篇文章裡,我主要講述以下幾個方面的內容:

  1. 程式設計計劃
  2. 我的學習程式設計的經歷
  3. 結束語

1.程式設計計劃

學習程式設計的教程在網上有很多,我寫出來肯定不如那些文章的作者寫得好,所以,我想透過編寫一個程式,一步步地引導新手熟習新的開發環境。

網上有很多編寫程式的示例,如果一個一個地去看原始碼,只能看到一個結果,而不能瞭解編寫程式的過程。我想寫的文章就是從一個空白視窗一步一步地新增元件、編寫程式碼、最佳化結構,直到形成一個完整的應用程式。

當初我學習C++ Builder時是從編寫一個叫做“多彩俄羅斯方塊”的單機版遊戲開始的,所以我今天想寫一個這樣的遊戲應用程式,透過編寫這個程式,達到手把手引導讀者熟悉程式開發環境和學會編寫程式的目的。

我計劃使用多種方式編寫程式,從而體驗不同的程式語言和程式設計工具,對比不同方法的優缺點,對於想選擇程式設計工具的人來說應該是有幫助的。

不過,計劃的方式有多種,最終能不能完全實現還要看以後的情況,也許能全部完成,也許半途而廢。

計劃採用以下幾種方案編寫具有相同功能的“多彩俄羅斯方塊”單機版遊戲應用程式,先用一種方式完成,之後有時間了在考慮用其他方式完成:

  • TetrisL:在Lazarus中使用Pascal語言編寫,使用LCL和FCL元件
  • TetrisX:在Code Blocks中使用C++語言編寫,使用wxWidgets元件,透過編寫程式碼構建顯示介面
  • TetrisS:在Code Blocks中使用C++語言編寫,使用wxWidgets元件,透過wxSmith輔助構建介面
  • TetrisM:在Code Blocks中使用C++語言編寫,使用Windows API呼叫,透過編寫程式碼構建介面

2.我的學習程式設計的經歷

我需惡習編寫程式是從計算開始的,把工作中耗費時間比較多的計算過程編寫成程式,一方面節省了計算耗費的時間,另一方面也避免了計算過程中出現的人為錯誤。

計算機使用程式計算比人用計算器計算速度要快的很多,節省時間是必然的。這不用解釋,一個人需要幾天完成的計算過程,在計算機上使用程式計算,除了輸入資料的時間,計算過程只需要幾分鐘甚至幾秒鐘的時間。

使用計算機避免錯誤這也是一個很大的優勢。如果是人工計算,一個計算過程需要幾個小時甚至幾天的時間,計算完成後不能確定是否存在錯誤,需要重新驗算一遍,兩遍計算的結果不一致就需要再次計算一遍,有時候還需要採用不同的計算方法進行驗算,這個過程消耗的時間是很多的,當然也很費力。

把一套計算過程的所有計算編寫到一個程式中去,將程式計算的結果與手工計算的結果對比,只要結果是正確的,那麼以後使用這個程式進行的計算就一定是正確的,計算過程不會出現任何錯誤。為了避免錯誤需要做的唯一的工作就是核對作為輸入資料的檔案內容沒有錯誤,這樣的工作量就很小了。

我開始是使用Basic語言在PC-1500袖珍機上編寫程式,這種袖珍機除了Basic編寫的程式其他的什麼也沒有,而且內部只能儲存一個程式,編寫的程式要使用錄音機儲存在磁帶上。

後來轉到臺式個人計算機後使用的是Dos作業系統,使用了Basic和Fortran。Fortran跟Basic比起來編寫的程式執行速度快,數字計算精度高,執行程式時不需要像Basic那樣先執行一個解釋環境,除此之外也沒有什麼別的優勢。

記得有一次討論工程設計方案,其中的水力計算需要一個人用四五個小時才能完成一次計算,當時我使用了Fortran編寫的計算程式,修改源資料檔案需要大約一分鐘的時間,計算過程只需要幾秒鐘。討論方案的地點從會議室搬到了計算機房,領導跟專家們每提出修改一個方案的意見,我只需要修改一下源資料檔案中的資料,抬手之間就出了計算結果。如果是在往常,一個專案最多從兩三個方案中選擇一個認為相對好一點的就可以了,而這一次從幾十個方案中選擇了大家認為最優秀的方案,而驗證這些方案需要的計算幾乎是瞬間就完成了。這讓領導和專家們大感驚奇。

這樣的例子很多,就不一 一列舉了。

再後來我得到了Turbo Pascal 5.5,它的整合開發環境和優異的效能吸引了我,從此我就與Pascal結緣了。

很快,我使用Pascal重新編寫了我以前使用的程式。而這只是一個開始,只是一些小程式,真正使用Pascal編寫大型程式是從一個意外的需求開始的。

有時候有很多的數字或者名單,每個數字或者名稱佔用一行,列印出來會浪費紙張,版面也不好看。如果在一張紙上分成多列,這樣不就可以了嗎?這樣的要求現在看起來很簡單,但在當時來說是很難辦到的。由於文書處理軟體功能的限制,打字員除了重新列印,沒有辦法把一列資料放到另一列的右邊的。比如說,有若干數字,每頁紙張只能列印20行,要想讓第1到20各資料放在紙張的左邊,21到40放在中間,41到60放在右邊,就需要打字員把資料一個一個地複製過去或者重新輸入。列印完成之後想改成每頁18行,則需要打字員重新輸入。

那時我在《軟體報》上看到一個小程式,內容是把兩個檔案縱向合併,目的就是為了解決上面說的這個問題。我用Pascal借用了這個小程式,實現了檔案的縱向合併。在此基礎上,隨著需求的增加,逐漸增加功能,最後形成了一個集文字和表格於一體的文書處理軟體,它的功能和方便程度超過了當時買到的文字和表格處理軟體的總和。也就是在這個時候,Windows時代來臨了,電腦裡有了微軟的word,我自己寫的文書處理程式被替代了。

使用了Windows作業系統後,原來在Dos下編寫的程式雖然能夠使用,但已經跟不上形勢了,需要使用能夠編寫視窗介面的程式的開發環境。

首先找到的是Visual Basic和Visual FoxPro,但前者對作業系統的依賴性太強,後者編寫的程式離不開開發環境,要釋出一個程式還要“拖家帶口”,這些都不是我喜歡的。這個時候已經開始了網際網路時代,申請的網站空間容量很小,釋出一個應用程式太大了實在不方便。直到找到了Visual C++ 6.0之後才算是找到了自己想要的東西。

儘管我沒有系統地學習過C語言和C++,僅有的一點C語言知識也是為了考取高階程式設計師資格在考試複習資料裡看到的一些程式片段,但是在Dos時代積累下來的程式語言功底還是很有作用的,所謂的觸類旁通,學習一種新的程式語言並不是什麼困難的事情。

後來有了Delphi,我又迴歸到了Pascal。儘管後來使用了C++ Builder,這是一個被人稱作C++版的Delphi的開發環境,開發C++程式要比Visual C++方便很多,但是自從C++ Builder為了適應.net吧自己搞得不倫不類之後,我就再也不碰這東西了。雖然電腦裡也安裝了Visual Studio的各個版本,但是我寫程式主要使用的還是Delphi。

3.結束語

從我學習和使用程式設計工具的經歷來說,我的經驗就是有實用需求才有動力,多動手才能熟練掌握。很多在大學裡學習計算機的畢業後不會寫程式,並不是因為他們不夠聰明,而是在工作後用不到也就放下了,日子久了也就忘記了。

希望我的經歷能給你帶來啟發,我將要寫的東西能夠對你有所助益。

相關文章