學習C C 第二十天 完整的俄羅斯方塊小遊戲

2021-10-01 14:27:20 字數 4513 閱讀 2039

標頭檔案

#pragma once

#define block_count 5

//數量

#define block_width 5

//寬度

#define block_height 5

//高度

#define block_size 20

//方塊的畫素大小

#define start_x 130

//掉落方塊位置的x軸

#define start_y 30

//掉落方塊位置的y軸

#define key_up 72

//按鍵的 ↑ → ← 的對應alls值

#define key_right 77

#define key_down 78

#define key_left 75

#define key_space 32

#define reward_score 10

//消除一行的獎勵分數

#define grade_speed 50

//根據分數提公升速度

//方塊的方向的列舉

enum block_dir_t

;//方塊是否可以移動的列舉

enum move_dir_t

;int score =0;

//分數 總分

int rank =0;

//等級

int nextindex =-1

;//下乙個方塊的序號

int blockindex =-1

;//當前方塊的種類

int speed =

500;

//方塊下降速度 500毫秒(0.5秒)

int minx =30;

//最小的x的值

int miny =30;

//最小的y的值

int visit[30]

[15];

//訪問陣列

int markcolor[30]

[15];

//表示對應位置的顏色

int block[block_count *4]

[block_height]

[block_width]

=//[三種 * 形態][行][列],,

,,// l 形方塊,,

,,// 田 形方塊,,

,,// t 形方塊,,

,,// z 形方塊,,

,};

專案完整函式

#include

#include

#include

#include

//kbhit()使用

#include

"tetrisgame.h"

int color[block_count]=;

//歡迎介面

void

welcome

(void

)//初始化遊戲場景

void

initgamescene

(void

)//清除右上角區域方塊

void

clearblock()

}}//在右上角區域,繪製下乙個方塊

void

drawblock

(int x,

int y)}}

}//繪製方塊:在指定位置繪製指定方塊的指定方向

void

drawblock

(int x,

int y,

int blockindex, block_dir_t dir)}}

}/**清除當前方塊

*輸入:

* x - 當前方塊的x座標

* y - 當前方塊的y座標

* dir - 當前方塊的方向

*/void

clearblock

(int x,

int y, block_dir_t dir)}}

}//產生新方塊

void

nextblock()

/**如果在指定位置可以向指定方向移動

*輸入:

* x - 當前方塊的x座標

* y - 當前方塊的y座標

* movedir - 當前方塊可以向那個方向移動

* blockdir - 當前方塊的方向

* 返回值:

* 真 - 返回1

* 假 - 返回0

*/int

moveable

(int x0,

int y0, move_dir_t movedir, block_dir_t blockdir)}}

}else

if(movedir == move_left)}}

}else

if(movedir == move_right)}}

}return ret;

}//檢測遊戲是否結束

void

failcheck()

}//判斷當前方塊是否可以轉向到指定方向

//注意,此時還沒有轉到該方向!!!

introtatable

(int x,

int y, block_dir_t dir)

for(

int i =

0; i < block_height; i++)}

}return1;

}//方塊速度的變化

void

wait

(int interval)}}

//到達底部 固定當前方塊(25塊方塊)

void

mark

(int x,

int y,

int blockindex, block_dir_t dir)}}

}//方塊降落

void

move()

}clearblock

(x, k, blockdir)

;//清除當前方塊if(

_kbhit()

)//控制方塊的變化

}else

if(key == key_down)

else

if(key == key_left)

}else

if(key == key_right)}}

k +=20

;drawblock

(x, y + k, blockindex, blockdir)

;//繪製當前方塊

wait

(curspeed);if

(!moveable

(x, y + k, move_down, blockdir))}

}//掉落方塊

void

newblock()

//消除已經滿格的一行,並把上面的所有向下移

void

down

(int x)

else}}

//清除最頂上的哪一行(就是行標為0的哪一行)

setcolor

(black)

;for

(int j =

0; j <

15; j++)}

//消除行數 得到分數 lines表示消除的行數

void

addscore

(int lines)

//更新等級

void

updategrade()

}//消除最下層是否滿行 滿了 消除

void

check()

}//更新分數

addscore

(clearlines)

;//更新等級(更新等級提示,等級越高,速度越快)

updategrade()

;}intmain()

system

("pause");

closegraph()

;//關閉畫布

return0;

}

Linux C學習第二十天

棧和佇列 棧 後進先出 新增元素 壓棧 刪除元素 出棧 棧的實現 1.順序棧。2.鏈式棧 棧最頂端的元素叫棧頂元素。順序棧 標頭檔案 ifndef stack h define stack h define size 10 typedef enum bool typedef int data typ...

python學習第二十天

1.多繼承 繼承 x是一種y的時候.可以使用繼承關係.is a 乙個類同時繼承多個類 python,c 孫悟空是一種猴子,還是一種神仙 2.經典類的mro 通過數型結構的深度優先遍歷 一條道走到黑 從左往右 3.新式類的mro 重點,難點 c3演算法 先拆分再合併 第一項的頭和後面所有項的尾進行比較...

java web學習第二十天 jsp

乙個jsp頁面中可以有0到多次的指令 1.如果兩個屬性只寫了乙個,那麼另乙個值和他相同,都沒寫預設iso page 格式 page屬性 屬性值 pageencoding它指定當前jsp的編碼 contenttype 它表示新增乙個響應頭 import 導包,可以出現多次 errorpage 當前頁面...