最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年12月22日 08:59:17   作者:MCFON  
本文給大家分享的是作者在使用C++制作俄羅斯方塊的時(shí)候的思路分析以及開發(fā)準(zhǔn)備和實(shí)驗(yàn)原理,都是些基礎(chǔ)的知識(shí)儲(chǔ)備,希望大家能夠喜歡,具體的代碼我們下一節(jié)再分享給大家

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

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

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

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

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

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

xface 終端
g++ 編譯器
ncurses 庫

1.4 適合人群

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

1.5 代碼獲取

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

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

2.1 安裝 ncurses 庫

sudo apt-get update
sudo apt-get install libncurses5-dev

2.2 編譯程序

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

g++ main.c -l ncurses

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

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

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

所以我們編程中需要解決的問題有:

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

3.2 基本圖形

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


3.3 NCURSES庫的使用

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

3.3.1 NCURSES--從Hello World程序開始

如果調(diào)用 NCURSES 庫中的函數(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)容寫到顯示器上,并刷新
 getch(); //等待用戶輸入
 endwin(); //退出NCURSES模式
 return 0;
}

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

3.3.2 窗口機(jī)制

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

舉例說明,如果調(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)能夠通過函數(shù)的命名規(guī)則看出各個(gè)函數(shù)的功能區(qū)別

3.3.3 newwin和box函數(shù)

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

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

例:

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 庫的基本使用方法就介紹到這里了,在具體使用中遇到問題仍需要查閱相關(guān)資料。

相關(guān)文章

  • C與C++中結(jié)構(gòu)體的區(qū)別

    C與C++中結(jié)構(gòu)體的區(qū)別

    C中的結(jié)構(gòu)體只涉及到數(shù)據(jù)結(jié)構(gòu),而不涉及到算法,也就是說在C中數(shù)據(jù)結(jié)構(gòu)和算法是分離的,而到C++中一類或者一個(gè)結(jié)構(gòu)體可以包含函數(shù)(這個(gè)函數(shù)在C++我們通常中稱為成員函數(shù)),C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合
    2013-10-10
  • C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹

    C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹

    大家好,本篇文章主要講的是C++實(shí)操之內(nèi)聯(lián)成員函數(shù)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言題目:有多少張桌子--并查集

    C語言題目:有多少張桌子--并查集

    并查集是一種用于管理分組的數(shù)據(jù)結(jié)構(gòu)。它具備兩個(gè)操作:(1)查詢?cè)豠和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下
    2021-09-09
  • 深入理解Qt信號(hào)槽機(jī)制

    深入理解Qt信號(hào)槽機(jī)制

    信號(hào)槽是 Qt 框架引以為豪的機(jī)制之一。本文主要介紹了Qt信號(hào)槽機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言之實(shí)現(xiàn)單鏈表指定結(jié)點(diǎn)的插入方式

    C語言之實(shí)現(xiàn)單鏈表指定結(jié)點(diǎn)的插入方式

    這篇文章主要介紹了C語言之實(shí)現(xiàn)單鏈表指定結(jié)點(diǎn)的插入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言基于貪心算法解決裝箱問題的方法

    C語言基于貪心算法解決裝箱問題的方法

    這篇文章主要介紹了C語言基于貪心算法解決裝箱問題的方法,簡單描述了裝箱問題,并結(jié)合實(shí)例形式給出了C語言使用貪心算法解決貪心問題的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決

    C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決

    這篇文章主要介紹了C++無法從“const char[ ]”轉(zhuǎn)換為“char *”問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • C++ QgraphicsScene類案例詳解

    C++ QgraphicsScene類案例詳解

    這篇文章主要介紹了C++ QgraphicsScene類案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言如何用順序棧實(shí)現(xiàn)回文序列判斷

    C語言如何用順序棧實(shí)現(xiàn)回文序列判斷

    這篇文章主要為大家介紹了C語言如何用順序棧來實(shí)現(xiàn)回文序列的判斷,文中含有詳細(xì)的代碼示例及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 面試常見問題之C語言與C++的區(qū)別問題

    面試常見問題之C語言與C++的區(qū)別問題

    在C中,用static修飾的變量或函數(shù),主要用來說明這個(gè)變量或函數(shù)只能在本文件代碼塊中訪問,而文件外部的代碼無權(quán)訪問,今天重點(diǎn)給大家介紹面試中常見的C語言與C++區(qū)別的問題,感興趣的朋友跟隨小編一起看看吧
    2021-05-05

最新評(píng)論

罗江县| 凌海市| 漳平市| 隆子县| 湛江市| 广水市| 文水县| 多伦县| 永宁县| 上蔡县| 娄烦县| 涟水县| 德阳市| 浠水县| 宿迁市| 武乡县| 监利县| 新邵县| 兰坪| 股票| 卓资县| 丘北县| 临夏县| 平安县| 集贤县| 深圳市| 若羌县| 普陀区| 盘山县| 南宫市| 广安市| 莆田市| 新宁县| 刚察县| 焦作市| 长阳| 贺州市| 商南县| 三穗县| 新竹县| 浮梁县|