1. 程式人生 > >記錄一下自己寫得小遊戲練習心得

記錄一下自己寫得小遊戲練習心得

  1. 飛機大戰

最簡單的數字遊戲,費事一個小時左右寫完,卡在了scanf(“ %c”,&x);忘記寫定址符號。

新學:

清屏函式:system(“cls”);

隨機數生成:srand(time(NULL));x=rand ()%10;

  1. 改進版本的飛機大戰

增加移動靶子,和物理子彈,積分系統,用函式封裝,卡死在static 用法上。

新學:

被清屏閃瞎狗眼:void gotoxy(int x,int y)  //游標移動到(x,y)位置重畫以清屏

{

    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD pos;

    pos.X = x;

    pos.Y = y;

    SetConsoleCursorPosition(handle,pos);}

用於隱藏游標防止游標閃爍:void HideCursor()

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二個值為0表示隱藏游標

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}srand(time(NULL));x=rand ()%10;

需要改進:BUG調不掉,依然有時報錯,除錯了一整天,不知道為什麼。雖然已經調到了十二點,但是就是出不來,之後注意:規避陣列可能溢位的情況

如:列印時用for迴圈列印二維陣列,而不要直接用未知數如a[x][y]列印(下標經常越界),統一列印不容易出錯,雖然我死活不明白我到底錯在哪兒,血的教訓。

  1. 彈球遊戲

由網課上給的飛機大戰程式碼改過來,所以十分順利。

新學:

暫停函式:Sleep(100);(替代count一點也不好使哈哈哈還是count吧)

巨集常量:#define PI 3.1415

音效:printf("\a"); // 響鈴

Const常量:const是一個C語言的關鍵字,它限定一個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性。另外,在觀看別人程式碼的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。另外CONST在其他程式語言中也有出現,如C++、PHP5、C#.net、HC08 C。

  (1)可以定義const常量,具有不可變性。

  例如:const int Max=100; Max++會產生錯誤;

  (2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

  例如: void f(const int i) { .........} 編譯器就會知道i是一個常量,不允許修改;

  (3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

  (4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

  例如: void f(const int i) { i=10;//error! }

靜態區域性變數有以下特點:

該變數在全域性資料區分配記憶體;

靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化;

靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;

它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;

int Myclass::Sum = 0; //在類外定義並初始化靜態資料成員

注意的地方:1.出現在類外的函式定義不能指定關鍵字 static。2.靜態成員可以相互訪問,包括靜態成員函式訪問靜態資料成員和訪問靜態成員函式。3.非靜態成員函式可以任意訪問靜態資料成員和靜態成員函式。靜態成員函式沒有額外的this指標。

全域性變數和全域性靜態變數的區別:

1)全域性變數是不顯式用static修飾的全域性變數,全域性變數預設是有外部連結性的,作用域是整個工程,在一個檔案內定義的全域性變數,在另一個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數。

2)全域性靜態變數是顯式用static修飾的全域性變數,作用域是宣告此變數所在的檔案,其他的檔案即使用extern宣告也不能使用。

需要改進:板子移動太慢了。

  1. 堅持100秒

新學:

可以加入一點隨機擾動,防止所有的飛機聚在一起:用隨機數解決

記錄時間:初始化時startTime = clock();結束時endTime = clock();

printf("你堅持了:%.3f秒!\n", (endTime - startTime) / 1000.0);

  1. 消磚塊的彈球遊戲

需要改進:彈球打在磚塊上無法反彈,只有經過磚塊下面一格才會反彈,比較鬼畜哈哈。

  1. 空戰遊戲

失去耐心了【捂臉。

新學:

二維陣列儲存遊戲畫布中對應的元素:0為空格,1為飛機*,2為子彈|,3為敵機@

每次都要記著:只有得分之後才用判斷升不升級啊加不加快啊啥的。

  1. Easyx!

終於到這裡啦,首先畫了圍棋與國際象棋棋盤。

新學:

解決刷屏問題:BeginBatchDraw();//開始批量繪製。執行後,任何繪圖操作都將暫時不輸出到螢幕上,直到執行以下兩個函式才將之前的繪圖輸出。

FlushBatchDraw();//輸出繪圖

EndBatchDraw();//結束繪圖

  1. 實時鐘表

新學:

獲取當前時間:SYSTEMTIME ti;                       // 定義變數儲存當前時間GetLocalTime(&ti);      

滑鼠互動:MOUSEMSG m;

If(MouseHit())

m=GetMouseMsg();

m.uMsg==WM_MOUSEMOVE

m.uMsg==WM_LBUTTONDOWN//左鍵按下

m.uMsg==WM_RBUTTONDOWN//右鍵擡起

  1. Flappy bird

由素材更改過來,還算容易。非常開心,這是我做的第一個有介面的遊戲。

新學:

寫路徑的格式:"open \"C:\\Users\\Administrator\\Desktop\\程式設計師表白程式\\白 白,我表白.wav\" alias aa"血的教訓,多寫兩個槓就可以規避資料夾有空格的問題。