欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、實驗介紹

1.1 實驗內(nèi)容

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

1.2 實驗知識點

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

1.3 實驗環(huán)境

xface 終端
g++ 編譯器
ncurses 庫

1.4 適合人群

本課程難度一般,適合有 C++ 編程基礎(chǔ),對游戲設(shè)計、邏輯分析感興趣的同學(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 選項引入 ncurses 庫:

g++ main.c -l ncurses

三、實驗原理

3.1 設(shè)計前的分析

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

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

顯示方塊
實現(xiàn)方塊的移動
方塊旋轉(zhuǎn)
對層滿的方塊消行
提示下一個方塊形狀

3.2 基本圖形

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


3.3 NCURSES庫的使用

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

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;
}

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

3.3.2 窗口機制

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

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

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

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

如果你已經(jīng)建立了一個叫做win的窗口,想要在win窗口上輸出內(nèi)容,可以再普通函數(shù)前添加w,同時參數(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)移動到窗口win的(y,x)處然后打印字符串string
相信看完上面的例子,你已經(jīng)能夠通過函數(shù)的命名規(guī)則看出各個函數(shù)的功能區(qū)別

3.3.3 newwin和box函數(shù)

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

然而,我們創(chuàng)建了一個窗口卻無法看見它,需要用 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++實現(xiàn)日期計算器的示例代碼

    C/C++實現(xiàn)日期計算器的示例代碼

    本篇文章主要介紹了C/C++實現(xiàn)日期計算器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • VSCode插件開發(fā)全攻略之package.json詳解

    VSCode插件開發(fā)全攻略之package.json詳解

    這篇文章主要介紹了VSCode插件開發(fā)全攻略之package.json的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言如何寫類實現(xiàn)教程示例

    C語言如何寫類實現(xiàn)教程示例

    這篇文章主要為大家介紹了C語言如何寫類的實現(xiàn)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • VC定時器的用法實例詳解

    VC定時器的用法實例詳解

    這篇文章主要介紹了VC定時器的用法,以實例形式詳細(xì)講述了VC定時器的原理與具體用法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C語言的結(jié)構(gòu)體你了解嗎

    C語言的結(jié)構(gòu)體你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語言的結(jié)構(gòu)體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別

    C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別

    這篇文章主要介紹了C++ 中靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Qt實現(xiàn)無邊框窗口的示例代碼

    Qt實現(xiàn)無邊框窗口的示例代碼

    本文主要介紹了Qt實現(xiàn)無邊框窗口的示例代碼,主要包括鼠標(biāo)光標(biāo)在不同區(qū)域的變化,關(guān)閉拖動窗口,窗口支持任意拉伸等,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C++標(biāo)準(zhǔn)之(ravalue reference) 右值引用介紹

    C++標(biāo)準(zhǔn)之(ravalue reference) 右值引用介紹

    臨時對象的產(chǎn)生和拷貝所帶來的效率折損,一直是C++所為人詬病的問題,下面簡單地介紹一下Copy Elision、RVO,對此不感興趣的可以直接跳過
    2012-11-11
  • C語言如何與ARM匯編語言混合編程示例詳解

    C語言如何與ARM匯編語言混合編程示例詳解

    本文主要敘述了C與匯編語言混合編程,匯編語言指的是ARM匯編語言。本文用來幫助理解ARM嵌入式中的匯編程序,及C語言如何與匯編混合編程
    2021-10-10
  • C語言make和Makefile介紹及使用

    C語言make和Makefile介紹及使用

    這篇文章介紹了C語言make和Makefile以及使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評論