国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

使用C++一步步實(shí)現(xiàn)俄羅斯方塊

2020-05-23 13:31:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、實(shí)驗(yàn)介紹

1.1 實(shí)驗(yàn)內(nèi)容

本節(jié)實(shí)驗(yàn)我們進(jìn)行設(shè)計(jì)俄羅斯方塊前的思路分析,以及介紹ncurses 庫(kù)的使用方法。

1.2 實(shí)驗(yàn)知識(shí)點(diǎn)

C++ 編程基礎(chǔ)
ncurses 庫(kù)的使用
俄羅斯方塊邏輯設(shè)計(jì)

1.3 實(shí)驗(yàn)環(huán)境

xface 終端
g++ 編譯器
ncurses 庫(kù)

1.4 適合人群

本課程難度一般,適合有 C++ 編程基礎(chǔ),對(duì)游戲設(shè)計(jì)、邏輯分析感興趣的同學(xué)。

1.5 代碼獲取

git clone https://github.com/Gamerchen/game_zero.git

二、開(kāi)發(fā)準(zhǔn)備

2.1 安裝 ncurses 庫(kù)

sudo apt-get updatesudo apt-get install libncurses5-dev

2.2 編譯程序

編譯命令要加上 -l 選項(xiàng)引入 ncurses 庫(kù):

g++ main.c -l ncurses

三、實(shí)驗(yàn)原理

3.1 設(shè)計(jì)前的分析

在開(kāi)始程序編寫(xiě)之前,我們要先分析程序設(shè)計(jì)需要實(shí)現(xiàn)哪些功能,劃分為哪些模塊,在俄羅斯方塊中我們首先想到的應(yīng)該是顯示方塊,其次是方塊的下落,左右移動(dòng),旋轉(zhuǎn),最后的層滿消行,另外一個(gè)基本的俄羅斯方塊游戲還應(yīng)該有下一個(gè)方塊形狀的提示功能。

所以我們編程中需要解決的問(wèn)題有:

顯示方塊
實(shí)現(xiàn)方塊的移動(dòng)
方塊旋轉(zhuǎn)
對(duì)層滿的方塊消行
提示下一個(gè)方塊形狀

3.2 基本圖形

每個(gè)方塊由四個(gè) box 組成,從游戲框的中心位置掉落,在框內(nèi)不碰撞邊界和其他方塊的情況下可以進(jìn)行旋轉(zhuǎn)。

c++,俄羅斯方塊

3.3 NCURSES庫(kù)的使用

簡(jiǎn)單地說(shuō), NCURSES 是一個(gè)從 System V Release 4.0 (SVr4) 中 CURSES 的克隆,這是一個(gè)可自由配置的庫(kù),完全兼容舊版本的 CURSES,是一個(gè)可以使應(yīng)用程序直接控制終端屏幕顯示的庫(kù)。NCURSES封裝了底層的終端功能,包含了一些創(chuàng)建窗口的函數(shù),并且有 Menu 、 Panel 和 Form 對(duì)CURSES基礎(chǔ)庫(kù)的擴(kuò)展,我們可以建立一個(gè)同時(shí)包含多窗口(multiple windows)、菜單(menus)、面板(panels)和表單(forms)的應(yīng)用程序。窗口可以被獨(dú)立管理,例如讓它卷動(dòng)(scrollability)或者隱藏。 菜單(Menus)可以讓用戶建立命令選項(xiàng),從而方便執(zhí)行命令。而窗體(Forms)允許用戶建立一些簡(jiǎn)單的數(shù)據(jù)輸入和顯示的窗口。面板(Panels)是 NCURSES 窗口管理功能的擴(kuò)展,可以用它覆蓋或堆積窗口。

3.3.1 NCURSES--從Hello World程序開(kāi)始

如果調(diào)用 NCURSES 庫(kù)中的函數(shù),必須在代碼中加載 ncurses.h 文件( ncurses.h中已經(jīng)包含stdio.h )

例:

#include <ncurses.h>int main(){ initscr(); //初始化,進(jìn)入NCURSES模式 printw("Hello World!"); //在虛擬屏幕上打印 Hello Wowrld! refresh(); //將虛擬屏幕上的內(nèi)容寫(xiě)到顯示器上,并刷新 getch(); //等待用戶輸入 endwin(); //退出NCURSES模式 return 0;}

在以上實(shí)例中我們介紹了 NCURSES 庫(kù)中最基本函數(shù)的使用方法,函數(shù)的功能已在注釋中說(shuō)明,這里不再贅述。

3.3.2 窗口機(jī)制

當(dāng) NCURSES 初始化的時(shí)候,它會(huì)默認(rèn)創(chuàng)建一個(gè)叫做 stdscr 的窗口,大小一般是 80 列,25 行(根據(jù)顯示器或者顯卡的不同,可能會(huì)出現(xiàn)不同的大小),除此之外,你還可以通過(guò)窗口系統(tǒng)的函數(shù)創(chuàng)建你自己的窗口。

舉例說(shuō)明,如果調(diào)用以下函數(shù):

printw("Hi!");refresh();

它會(huì)在stdscr上當(dāng)前光標(biāo)位置輸出 "Hi!",調(diào)用 refresh() 函數(shù),只更新 stdscr 上的緩沖區(qū)。

如果你已經(jīng)建立了一個(gè)叫做win的窗口,想要在win窗口上輸出內(nèi)容,可以再普通函數(shù)前添加w,同時(shí)參數(shù)也要發(fā)生變化。

printw(string) //在stdscr的當(dāng)前光標(biāo)位置打印字符串string
mvprintw(y,x,string)  //將字符串string打印在坐標(biāo)(y,x)處
wprintw(win,string)  //在窗口win的當(dāng)前光標(biāo)位置打印字符串string
mvwprintw(win,y,x,string)  //將光標(biāo)移動(dòng)到窗口win的(y,x)處然后打印字符串string
相信看完上面的例子,你已經(jīng)能夠通過(guò)函數(shù)的命名規(guī)則看出各個(gè)函數(shù)的功能區(qū)別

3.3.3 newwin和box函數(shù)

一個(gè)窗口的建立是通過(guò) newwin() 函數(shù)開(kāi)始的,函數(shù)返回一個(gè)指向窗口的結(jié)構(gòu)指針,這個(gè)指針可以被傳送至一些類似于 wprintw() 這樣需要窗口參數(shù)的函數(shù)中。

然而,我們創(chuàng)建了一個(gè)窗口卻無(wú)法看見(jiàn)它,需要用 box() 函數(shù)在已經(jīng)定義的窗口外圍畫(huà)上邊框。

例:

WINDOW *create_newin(int height, int width, int starty, int startx){ WINDOW *local_win; local_win = newin(height, width, starty, startx); box(local_win, 0, 0); wrefresh(local_win); return local_win;}

關(guān)于 NUCRSES 庫(kù)的基本使用方法就介紹到這里了,在具體使用中遇到問(wèn)題仍需要查閱相關(guān)資料。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 同心县| 上蔡县| 梁河县| 平果县| 武定县| 礼泉县| 南郑县| 天津市| 阆中市| 司法| 康保县| 望都县| 金坛市| 宜君县| 名山县| 苍南县| 四子王旗| 东港市| 三门县| 兴国县| 德兴市| 梁山县| 慈溪市| 肥西县| 南昌县| 察哈| 阜南县| 山西省| 永春县| 巫溪县| 曲阜市| 汶川县| 永康市| 山东| 宜城市| 贡山| 红原县| 无棣县| 古蔺县| 株洲市| 莎车县|