標頭檔案
#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 當前頁面...