Week 2 - 03/05
- 再次強調不接受遠距教學,請告訴你遠距的同學退選。
- 因為修課人數眾多且分兩間教室,為了更好收集大家對課程的問題,每次上課都會有 Zuvio 的問答,回答與否將列入平時成績。
- 請善用助教時間,本週將會研討延長整題的助教時間。
- 下周一開始你應該已經完成 tutorial 並且著手開發遊戲。
- 未符合課程要求的遊戲,將酌量調整成績。
- Time Log 網站是 https://toggl.com/track/ 使用方法請參照投影片 Slides
Week 1 - 02/26
不接受遠距教學,如果你有同學加選但無法到課堂上上課,請他退選。
請好好閱讀課程需求,選擇的遊戲必須滿足(1)會死掉或闖關失敗(2)要分關卡,評分標準包含遊戲難度與。
Topic 1: Introducing the course Slides
- 學期成績
- 平時成績 -> 20%
- 實習進度展示 -> 20%
- 實習報告 -> 30%
- 實習成果 -> 30%
- 說明
- 實習成果之成績未達標準(C+或67 - 69以下)者,不論其他成績為何,其學期成績均調整為不及格。
- 未完成實習報告所規定之事項者,學期總成績依該規定扣分。
- 同組兩人貢獻程度不同者,學期成績依貢獻比例適度調整。
- 限制
- 除非預先通知授課老師請假,則缺席、遲到 1 節課,學期總成績扣 1 分(直接上學校系統)。
- You have full control of your grade; thus, do not come to me at the end of semester for asking for grades
- 課程進行
- 學期中老師(或助教)每隔週(或隔兩週)會考察一次進度,考察的目的是了解遊戲程式的進度,並協助解決程式設計的問題。
- 平時成績以每次考察時進度之控制為計分標準,進度愈快者成績愈佳。
- 第二週時需選定遊戲完成分組,並於第二週展示原本遊戲內容與操作方式給老師或助教看(問卷連結,否則扣平時成績10分)。
- 第三週未完成 Git 練習者,每樣練習扣平時成績 10 分(See Topic 2 below)。
- 期末實習報告應指出組員的分工情形以及組員對實習貢獻百分比,以供調整評分之參考。
- 為量化各組每週投入實習的時間與程式的數量,每次上課時,各組均須上網填寫前一週用於製作遊戲程式的時間與工作內容,並上傳程式。
- Content of this semester
- 本學期將分組(每組以兩人為限),製作一個遊戲程式
- 請根據課程提供的遊戲 framework 進行遊戲開發,不得使用其他 framework
- 三選一 Windows/Android/HTML5 遊戲程式設計與製作
- Goal of this course
- Get you familiar with a big project
- Put the concept of OOP into real use
- Writing codes as a team
Topic 2: Game Introduction to Game Framework
- 本遊戲 framework 由陳偉凱老師開發,並成為北科資工系大學部重要訓練課程。
- Game is an application framework for developing 2D games
- Game framework was created in 1998 as an object library that provides ready-to-use graphics and sound objects for CSIE OOP lab class. Over the years, Game has undergone several revisions and evolved into an application framework.
- The Windows version of Game framework is implemented with the Microsoft VC++ based on MFC and DirectX. Starting from 2011, an Android version Game framework is also offered.
- Game framework is released under GPL.
- Game framework provides the following functionalities:
- A simple and easy-to-use bitmap graphic object and a sound object
- Built-in state control for game and main control loop with overridable game speed control
- The selection of the full screen mode and the window mode for presenting the game.
- 進行遊戲開發之前,請閱讀程式碼與投影片,並完成各平台的 tutorial 再開始寫自己的遊戲。
- We have three diffferent plarforms for games
- Windows Source, Tutorial
- Please download the source code version if you are planning to develop a game under Windows 8/Windows 10.
- Please follow the following installation instructions to compile and execute the game framework and its sample program.
- Install Microsoft Visual Studio 2017 C++
- Download and decompress the zip file of source code.
- Double click game.sln to open the source code.
- Compile and execute the sample game. If compilation fails, make sure your Visual Studio and DirectX SDK versions are correct.
- Follow the tutorials above to add new functionalities or objects to the Game.
- When your game is fully developed, follow the game deployment instructions above to create setup files for your game.
- Android Source, Tutorial
- Please download the source code version if you are planning to develop a game under Android
- Please follow the following installation instructions to compile and execute the game framework and its sample program.
- Follow the Android tutorials to add new functionalities or objects to the Game.
- When your game is fully developed, follow the game deployment instructions above to install the game on the phone
- HTML 5 Source, Tutorial
- Please download the file and use a browser to execute the sample game
- Follow the HTML5 tutorials above to add new functionalities or objects to the Game.
- Windows Source, Tutorial
- Documentation can be found on this Gitlab Project
Topic 3: Practice using Git with SourceTree
- 為節省本實驗之硬碟空間,本學期請至 GitHub 註冊帳號
- 在你平時會開發的電腦上設定,別在電腦教室設定,他每次都會不見
- 兩人一組(分別稱為某甲與某乙)
- 一人一組(稱為某甲)
- 第三週未完成練習者,每樣練習扣平時成績 10 分。(before 2021/3/12)
- 請於第三週上課時間,將練習成果展現給老師或是助教檢查。(on 2021/3/12)
FAQ
- Windows version
- Question 1: console (printf) 能在Game Framework 下使用嗎?
- Answer: TRACE指令可以替代printf,例如TRACE("%d\n", x); 就會把x印出來。當使用debug mode執行程式時,找一個名為Output的視窗(View->Output),TRACE指令所列印的資料會 顯示在此視窗。
- Question 2: 使用pDC->TextOut(...)顯示文字時,文字的背景可以設定為透明嗎?
- Answer: 顯示文字前先執行pDC->SetBkMode(TRANSPARENT);即可。
- Question 3: Game Framework預設有三種state (init, run, over),但這三種state似乎都是互相獨立的, 有沒有方法可以定義變數,讓三種狀態都可以取用。 例如讓在run狀態時的計分用的int score,可以傳到over的狀態顯示給玩家看。
- Answer: (1) 比較簡單的方法是在Base class,即GameState中加入static的變數(注意是static變數),那麼每個繼承的state都能共用此變數了,但是這樣寫用到static變數有點髒。(2) 比較勤勉的方法是先宣告一個class S,裡面放所有需要共享的變數,然後在Game或MyGame中宣告一個S的變數s,並將s的pointer傳給各個state,這樣各state就可以分享相同的變數了;那麼又怎麼把s傳給各個state呢?先在GameState的變數宣告中增加一個S的pointer,然後利用constructor (或自己訂一個副程式)的參數代入s的pointer再存起來。
- Question 4: 我的遊戲用到很多很多圖形(CMovingBitmap),不知何故,當載入太多圖形時遊戲會當掉。
- GameFramework有bug,在gamelib.cpp檔的副程式void CMovingBitmap::LoadBitmap(char *filename, COLORREF color)中,使用到HBITMAP, 再轉換為CBitmap物件,但是使用後漏了釋放,請在此副程式結束前,加一行 bmp->DeleteObject()釋放此物件。
- Question 5: CAnimation這個class有沒有支援deep copy?
- Answer: 沒有,如果需要的話,請自己寫CAnimation的copy constructor。
- Question 6: 我想要做Game的單元測試,怎麼樣才能帶入Google Test (gtest)呢?
- Answer: 參考GameFramework with Google Test文件
- Question 1: console (printf) 能在Game Framework 下使用嗎?
- Android version
- Question 1: 我希望畫面能有兩個地方同時被觸控,如何寫code處理這種multi-touch?
- Answer: 當pointerPressed(List pointers)時,參數其實是一個List,multi-touch的各個點都會出現在pointers這個List裡面。你的程式只要判斷List裡面的每個Pointer,即可達成處理multi-touch的能力。
- Question 1: 我希望畫面能有兩個地方同時被觸控,如何寫code處理這種multi-touch?
- HTML5 version
- Question 1: 我的GameLevel的draw副程式為什麼不會被執行到?導致畫面更新不正確。
- Answer: 目前HTML5版的GameFramework有bug,當某GameLevel未attach任何Sprite至rootScene時,draw就不會被呼叫。解決的方法是在GameLevel中至少attach一個Sprite到rootScene,且該Sprite的座標必須在update中不斷變更,那麼GameLevel的draw就會正確被呼叫。
- Question 2: 如何變更遊戲畫面的長寬比?
- Answer: src/game.js第49行that.idealWidth及that.idealHeight設定畫面的長寬比。
- Question 1: 我的GameLevel的draw副程式為什麼不會被執行到?導致畫面更新不正確。